请教VB如何实现链表?

seeku 2003-05-08 10:01:15
我要保存大量的,不定数量的结构类型的信息,
如果是使用C,我就会使用链表,不知道VB怎么来实现?

听说VB的数组是可变长度的,不知道怎么做的

谢谢(刚刚尝到VB快速开发的甜头,却发现。。。)
...全文
108 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
richardbao 2003-05-10
不行的,VB的数组如果缩短,只能去除最后的元素。我是老早做的 VB 链表,现在早忘了,源码也没有了,但是我当时好像是这么干的:

把元素 0 空出来做链表头,如果某元素的索引指向 0 元素,就说明这个元素是空的,可以放数据,如果不是指向 0,说明已经被使用。我当时专门有一个函数用来返回数组中第一个可以使用的元素变量。

总体效果还是差不多的,至少我认为。
回复
seeku 2003-05-09
突然想到一个问题,如果我想删除(richardbao(Richard Bao)谈到的)链表的中间的某个变量,不知道VB能否释放内存?
回复
seeku 2003-05-09
谢谢两位,尤其richardbao(Richard Bao)的算法比较妙,
只是有点古怪
呵呵
回复
richardbao 2003-05-09
忘了说,VB 里声明数组:

Dim MyArr(8) As Integer

事实上定义了 9 个变量,你可以自己试试,从 MyArr(0) 到 MyArr(8)。
回复
richardbao 2003-05-09
先告诉你 VB 数组变长要加 Preserve 才会保留数据,不要还没有弄清楚就乱骂 VB。

Dim MyArr(n) As Integer

Redim Preserve MyArr(m)

至于链表,我的方法是这样,仿照 C 的方法先定义一个类型

Type LinkTable
Data As ...
NextIndex As Long
End Type

然后建立一个数组用来放数据:

Dim LinkedData(...) As LinkTable

然后你就像 C 一样的用嘛,NextIndex 里面不要放地址指针,放数据的下标索引不就可以了?效果差不多的,就是代码看起来没有 C 那么爽而已!
回复
seeku 2003-05-08
的确要看看书,我学VB是半路出家,没有系统学习过
高一的时候学过BASIC,呵呵
回复
xayzmb 2003-05-08
自已笨不要怪别人....
呵呵
^_^
去查书吧.
回复
seeku 2003-05-08
经过测试,redim会把数组的内容清空
Dim lArr() As Long

ReDim lArr(5)
For i = 0 To 4
lArr(i) = i
Next i
ReDim lArr(8)
lArr(5) = lArr(0)
lArr(6) = lArr(3)
lArr(7) = lArr(4)
现在lArr的8个值都是0了
什么变长啊,都是骗人的
回复
MSSQL 2003-05-08
dim arr() as yourtype
.
.
.
.
.
redim arr(n)
回复
lihonggen0 2003-05-08
http://www.csdn.net/Develop/Read_Article.asp?Id=16430


循环链表以及相关操作(VB实现)
回复
seeku 2003-05-08
数组我应该搞定了,使用数组也可以完成我要的效果,只是不知道效率如何。

我的第一个问题有没有人会啊?
用VB怎么做链表?
如何表示指针变量?如果根据指针变量取得内容?
如果VB连这个都做不了,如何实现更复杂的数据结构啊?
回复
相关推荐
综教楼后的那个坑用双向链表实现 描述   在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。其中一种说法是,在很多年以前,这个坑就已经在那里了。这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。   从横截面图来看,坑底成阶梯状,由从左至右的 1..N 个的平面构成(其中 1 ≤ N ≤ 100,000),如图:    *            * :    *            * :    *            * 8    *    **      * 7    *    **      * 6    *    **      * 5    *    ********* 4 <- 高度    *    ********* 3    ************** 2    ************** 1 平面 |  1  |2|   3    | 每个平面 i 可以用两个数字来描述,即它的宽度 Wi 和高度 Hi,其中 1 ≤ Wi ≤ 1,000、1 ≤ Hi ≤ 1,000,000,而这个坑最特别的地方在于坑底每个平面的高度都是不同的。每到夏天,雨水会把坑填满,而在其它的季节,则需要通过人工灌水的方式把坑填满。灌水点设在坑底位置最低的那个平面,每分钟灌水量为一个单位(即高度和宽度均为 1)。随着水位的增长,水自然会向其它平面扩散,当水将某平面覆盖且水高达到一个单位时,就认为该平面被水覆盖了。   请你计算每个平面被水覆盖的时间。    灌水 水满后自动扩散 | | * | * * | * * * * V * * V * * * * * * .... * *~~~~~~~~~~~~* * ** * *~~~~** : * *~~~~**~~~~~~* * ** * *~~~~** : * *~~~~**~~~~~~* * ** * *~~~~**~~~~~~* *~~~~**~~~~~~* * ********* *~~~~********* *~~~~********* *~~~~********* *~~~~********* *~~~~********* ************** ************** ************** ************** ************** **************    4 分钟后    26 分钟后        50 分钟后    平面 1 被水覆盖     平面 3 被水覆盖    平面 2 被水覆盖输入   输入的第一行是一个整数 N,表示平面的数量。从第二行开始的 N 行上分别有两个整数,分别表示平面的宽度和高度。 输出   输出每个平面被水覆盖的时间。
发帖
VB基础类
创建于2007-09-28

7490

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2003-05-08 10:01
社区公告
暂无公告