


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VB中的数据结构使用最近因为在使用VB的过程中,发现要使用一些数据结构,虽然不像C里面那样方便,但总结一下,还是可以做的,虽然不是很习惯。以飨各位。 为便于理解数组的作用,我们引入数据项和指针项的概念,在数据项中存放数组中各元素的值,指针项中存放该值在数组中的位置,两者一一对应。指针的上限指向数组第一个元素的位置,下限指向最末一个元素的位置。数组中的元素在内存中是连续的线性的节点序列,这种线性的数据结构是应用最广泛,最简单的一种数据结构。自定义数据类型(Type Statement)可以包含多个互相关联的不同数据类型的元素,VB限定声明一个自定义数据类型必须在模块层(Module Level)进行。声明了一个自定义数据类型后便可以定义一个那种类型的变量。1.用名为queue的自定义数据类型声明一个固定大小的数组:Type queuedata As Integer 用作数据项next As Integer 用作指针项End TypeConst max=10Dim a(10) As queue设a( i )为数组中的一个元素,该元素的指针指向数组a(10)第i+1个元素,其下标为i ,指针的值为i 。需要指出的是数据结构不同于数据类型,也不同于数据类型声明的对象(变量)。数据结构不仅描述数据类型的数据对象,而且要描述数据对象各元素之间的各种运算。为了弄清自定义数据类型的作用,我们规定变量data存放元素的值(作数据场用),变量next存放紧接本元素后的元素的指针。通过用自定义数据类型queue声明数组a(10)和对变量next作专门规定,可以发现,我们能将一片连续的线性分布的数据存放在内存中非线性的不连续的地址空间里,却不影响我们对其进行线性的运算操作。像这种利用指针把各个元素链接起来的结构被称为链表,类似例1定义的数组均可作为链表使用。例 用queue将a(10)初始化为一个单向链接表:For i = 0 To 9 a( i ).next = i + 1 i + 1为下一个元素的指针a( i ).data=10*rndNext i 2.栈和队列栈是常用的数据结构。在Visual Basic程序设计中,栈可以用来实现递归作用;或者是将数组和链表中因删除而空闲的资源回收利用,避免出现一边是资源空闲,一边数组或链表长度不断增长的尴尬局面。栈可以用一维数组或链表作存储结构。用数组来实现既容易又方便,此时用指针变量Top1指向数组结点,每次有元素进栈栈顶指针top1=top1+1,a(top1).data= 10*rnd,每次有元素出栈top1=top1-1,b= a(top1).data 。当top1=0栈空,top1等于数组上限时栈满。与栈的在一头进出方式不同,队列是先进先出的数据结构,队列也可以用一维数组或链表作存储结构。队运算中要使用两个指向队头和队尾的指针变量top1、bottom,最后进队元素的指针等于队头指针top1,队中最先进队元素的指针等于队尾指针bottom,当top1=bottom时队空,初始条件为top1=bottom=0,当top1+1=bottom(数组)或a(top1).next=bottom(链表)时队满。有元素进队时top1=top1+1(数组)或top1=a(top1).next(链表);有元素出队时bottom=bottom+1(数组)或bottom = a(bottom).next(链表)。 使用固定大小的数组总会遇到栈满或队满的情形,我们可以使用动态数组来避免,动态数组是Visual Basic灵活性、便捷性的重要特征,它可以有效地管理内存。在例3中还通过引入变量linshi实现了当队满时在链表中插入一个节点的操作。在链表中删除一个节点的操作与此类似。 例:队列的进队及出队操作,利用上例定义的循环链表并假设已按例2进行了初始化。Dim top1 As integer定义指向队头的指针变量Dim bottom As integer定义指向队尾的指针变量Dim linshi 变量Public Function removequeue(a1 As Integer) 出队函数If bottom = top1 Then bottom = top1队空 Debug.Print 队空 top1 = 0: bottom = 0 Else bottom = a(bottom).next bottom指针后移,为元素出队作准备 j = a(bottom).data 元素a1出队 Debug.Print 出队,b, j, bottom, jEnd IfEnd FunctionPublic Function insertqueue(ByVal a1 As Integer) 进队函数If a(top1).next = bottom Then a(top1).next = bottom队满 max=max+1 Redim Preserve a(max) as queue linshi = a(top1).next 队满,准备插入新节点 a(top1).next = max 插入新节点的指针 top1 = max top1指针指向新位置,为新元素a1进队作准备 a(top1).next = linshi 新节点插入结束 a(top1).data = a1 新元素a1进队Elsetop1 = a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年劳务派遣行业前景分析及投资机遇研究报告
- 2025北京建工新型建材有限责任公司招聘笔试模拟试题及答案解析
- 2025龙泉农商银行秋季招聘若干人考试参考题库附答案解析
- 2025浙江嘉兴市属事业单位面向普通高校毕业生退役士兵招聘2人笔试参考题库附答案解析
- 2025山东省农业科学院招聘3人考试模拟试题及答案解析
- 开展雅安市2025年度国家综合性消防救援队伍消防员招录体格检查考试备考题库及答案解析
- 2025年西安文理学院高层次及紧缺专业人才招聘(10人)考试模拟试题及答案解析
- 2025年下半年安徽交控集团所属石化公司公开招聘4人笔试模拟试题及答案解析
- 2025察布查尔县医共体总院县人民医院招聘药剂人员(1人)笔试模拟试题及答案解析
- 2025滨海投资(天津)有限公司校园招聘笔试参考题库附答案解析
- 普通心理学第六版PPT完整全套教学课件
- 员工个人职业健康监护档案
- 《护理伦理学》教学大纲
- 老年学概论(第3版)PPT完整全套教学课件
- (完整版)Hamilton汉密尔顿焦虑量表
- 检验科实验室安全应急预案
- 浙江大学高分子化学第章课件绪论
- 景观生态学课件
- 教育教学理论试题与答案
- 净化装饰与机电安装工程URS
- 丁苯橡胶乳液聚合生产工艺
评论
0/150
提交评论