下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VB的类模块及其在链表数据结构中的应用 VB的类模块及其在链表数据结构中的应用摘要:VB6中的类模块是VB面向对象程序设计的一种新技术。它的属性和方法可定义,已基本具备了类的特征。利用类模块进行程序设计可实现代码复用,使程序设计结构化、简洁化。关键词:VB;类模块;链表;类模块;数据结构引言当前面向对象方法已成为程序开发的主流技术,而VB6中提供了类模块结构,使开发者可将很多常用的操作进行合理的封装,以实现代码复用和程序结构化。类模块中的代码描述了通过该类创建的对象特性和行为。虽然VB类模块并非真正意
2、义上的对象,但其可定义属性和方法,已基本具备了类的特征。本文将通过VB类模块在数据结构中的应用,来探讨数据结构中链表的另一种实现方法。一. 使用类模块的优点应用程序的本质结构即组织指令的方法,这些方法代表指令存放的位置的执行顺序。复杂的应用程序对组织或结构的要求非常高,因此除对程序的执行进行控制外,还需要对结构进一步优化。由于VB程序基于对象,因此代码结构可理解为程序常用物理表示的模型。开发者可将与窗体或无关的代码放入标准模块(扩展名为BAS)中,以实现代码复用,而类模块既包含代码又包含数据类模块(扩展名为CLS)是用于创建对象的更好解决方案。二. 类模块和标准模块的区别为
3、更好地理解类模块,将类模块和标准模块进行比较,具体如下所述:1.标准模块数据仅有一个备份,如公共变量值改变后,程序中再次读取该变量,将得到同一个值,而类模块数据则相对于类实例独立存在。2.标准模块数据在程序作用域内存在,即存在于程序存活期,而类实例数据仅存在于对象存活期,其随对象创建而创建,随对象撤消而撤消。3.在标准模块中声明为Public型的变量在工程中均可访问,而类模块的Public型的变量,仅当对象含有该实例的引用时才可访问。三. 利用类模块建立链表类的方法要建立一个链表,首先要明确组成链表的项目。在数据结构中,线性链表的一个结点由两部分组成,数据域和指针域,数据域存储数据元
4、素的信息,指针域存储直接后继的位置。我们要建立的链表类的最基本单位是结点和后继结点之间有相互联系的机制,所以定义链表类本身用到两个类模块,下面我们将通过一个例子来说明利用类模块建立链表类的方法。1.结点的建立可以通过“工程”菜单中的“添加类模块”来建立一个名称为Node结点,它是一个类模块,它包含两部分内容:1.1结点的内容。本例中是一个坐标信息Public x As IintegerPublic y As Iinteger1.2后继结点信息,通过它可对整个表中的结点进行链接Public NextNode As Node所以我们的结点类Node就建成了。2利用节点类构造链表类List有了上面的
5、Node结点类,也就有了组成链表的基本单位,就可以构造自己的链表了。为了方便,可以将链表的信息封装起来,组成一个新的类模块,名称为List。首先在窗体上加一文本框,以用来放置链表的内容,然后通过“工程”菜单中的“添加类模块”来建立一个名称为List类模块。因为链表数据结构的建立是为了方便使用的,为了保证其在操作过程的完整性,其内容如下:2.1定义表头和表尾Public ListHead As NodePublic ListTail As Node表头和表尾是程序和链表进行交流的重要信息,它们也是结点类,各自具有节点的特点和自身的特点。2.2链表信息初始化使一张链表初始化,表头也即表
6、尾,并且均为空的。Private Sub Class_Initialize()Set ListHead=Nothing ' 设置表头为空Set ListTail =Nothing ' 设置表尾为空End Sub2.3建立新结点链表的结点需要我们一个一个去建立,将新的结点也就是Node类一个一个接入表中,接的方法就是通过对表头指针和表尾指针的调
7、整。Sub MakeNode(n1 As Integer,n2 As Integer)Dim n As NodeSet n=New Noden.x=n1n.y=n2If ListHead Is Nothing ThenSet ListHead = n ' 若为空链表,则新加入的结点位头结点ElseSet ListTail.NextNode = n ' 若链表不为空,则将新加入的结点置于表尾
8、End if Set ListTail = nSet ListTail.NextNode = NothingEnd Sub2.4显示链表信息显示链表的信息,我们通过一个循环,将链表的信息显示在窗体的文本框中。Sub DisplayList()Dim n As NodeSet n = ListHeadWhile Not n Is NothingForm1.Text1.Text = Form1.Text1.Text+"X:" + Str(n.X) + "Y:" + Str(n.Y) + vbCr + vbLfSet n =n. NextNodeWendEnd
9、 Sub2.5清空链表内容清楚链表内容,是通过从表头开始逐个删除结点来完成的。Private Sub Class_Terminate()ClearlistEnd SubSub Clearlist()Dim n As NodeWhile Not ListHead Is Nothing ' 若不为空链表,进行以下操作Set n = ListHeadSet ListHead = ListHead.NextNode &
10、#160; ' 将表头下一个结点内容置入表头Set n = NothingWendEnd Sub2.6将一个表的内容传递到另一个表链表是由结点连接而成的,所以要将一个表的内容传递到另外一个表中只需要将表头和表尾赋值给新的表头和表尾即可。Sub TransferList(list2 As List)Set list2 = New ListSet list2.listHead = listHeadSet list2.ListTail = listTailSet listHead = NothingSet L
11、istTail = NothingEnd Sub2.7获取当前链表第一个结点信息,并将该结点清空Sub GetNode(column As Integer, row As Integer)Dim n As NodeIf Not ListHead Is Nothing Then Set n = ListHeadcolumn = n.Xrow = n.YSet ListHead = ListHead.NextN
12、odeEnd IfIf ListHead Is Nothing Then Set ListTail = NothingSet n = NothingEnd IfEnd Sub四. 利用链表类进行面向对象编程直接利用上面建立的链表类List,可以很简单地完成上面已经构造的操作,当然,在其中也可加入其他的方法。对于一个类,在使用它的过程中不必知道程序实现的细节问题,只要了解类本身具有的方法就可以应用了,不仅如此,还可以利用已有的类构造新的类,实现代码的可重用,List就是利用Node的基础上实现的。下面的程序很简单地实现了给链表添加10个结点,并将其内容在文本框中显示。通过链表类来编程源
13、程序变得非常简洁。Private Sub CmdChain_Click()'通过链表类来构造Dim TestList As ListDim i As IntegerForm1.ScaleMode = vbPlxelsForm1.AutoRedraw = TrueSet TestList = New ListText1.Text = ""For i = 1 To 10TestList.MakeNewNode i, i * 10Next iTestList.DispLayListEnd Sub当然,我们在编程过程中也可以只通过结点来实现链表,当然结点之间的关系在我们使用
14、起来时就应该很明了,源程序如下:Private Sub CmdNodelist_Click( )'直接利用结点构造链表Dim i As IntegerDim n As NodeDim ListHead As NodeDim ListTail As NodeText1.Text = ""For i = 1 To 10Set n = New Noden.X = in.Y = i * 10If ListHead Is Nothing ThenSet ListHesd = nElseSet ListTail.NextNode = nEnd IfSet ListTail = nSet ListTail.NextNode = NothingNext iWhile Not ListHead Is NothingSet ListHead = ListHead.NextNodeText1.Text = Text.Text + "X:" + Str(n.X) + "Y:" + Str(n.Y) + vbCr + vbLfSet n = NothingWendEnd Sub五. 结束语通过
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业电脑交易协议格式(2024年)版A版
- 2025年度跨境电商平台产品区域代理合同协议书4篇
- 科技前沿:资金驱动创新
- 2025年度仓储物流场地租赁保证金三方服务协议4篇
- 2025年度柴油运输合同书(智能化物流服务)4篇
- 2025年度绿色环保型铲车租赁合作协议4篇
- 2025年智能餐饮连锁店合作协议范本3篇
- 2025年度特色面馆连锁品牌加盟管理规范合同范本3篇
- 2025年度商业地产项目场地合作运营协议4篇
- 专业电线电缆供应协议模板2024版
- 【公开课】同一直线上二力的合成+课件+2024-2025学年+人教版(2024)初中物理八年级下册+
- 高职组全国职业院校技能大赛(婴幼儿照护赛项)备赛试题库(含答案)
- 2024年公安部直属事业单位招聘笔试参考题库附带答案详解
- NB-T 47013.15-2021 承压设备无损检测 第15部分:相控阵超声检测
- 装饰工程施工技术ppt课件(完整版)
- SJG 05-2020 基坑支护技术标准-高清现行
- 汽车维修价格表
- 司炉岗位应急处置卡(燃气)参考
- 10KV供配电工程施工组织设计
- 终端拦截攻略
- 药物外渗处理及预防【病房护士安全警示教育培训课件】--ppt课件
评论
0/150
提交评论