科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在Visual Basic编程中运用数据结构

在Visual Basic编程中运用数据结构

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文讨论了在VB编程中利用数组和自定义数据类型构造链表、栈和队列等数据结构的方法

作者:zsx 来源:论坛 2007年10月14日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
2.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实现了当队满时在链表中插入一个节点的操作。在链表中删除一个节点的操作与此类似。

  例3队列的进队及出队操作,利用例1定义的循环链表并假设已按例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, j
 End If
End Function
Public 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进队
 Else
  top1 = a(top1).next '队不满,top1指针后移,新元素a1准备进队
  a(top1).data = a1 '新元素a1进队
  Debug.Print "进队,t,i", top1, a(top1).data
 End If
End Function

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章