在VisualBasic編程中運(yùn)用數(shù)據(jù)結(jié)構(gòu)

字號(hào):

1.引言
    Basic語(yǔ)言擁有較高的普及率,同時(shí)在Windows操作系統(tǒng)中Visual Basic以功能強(qiáng)、代碼量小,容易上手和所見(jiàn)即所得的可視化界面贏得了廣大Basic程序編制者的交口稱(chēng)贊。然而,在諸如數(shù)值計(jì)算、結(jié)構(gòu)計(jì)算及項(xiàng)目管理系統(tǒng)的編程中如何構(gòu)建數(shù)據(jù)結(jié)構(gòu),并設(shè)計(jì)出相應(yīng)的算法,卻經(jīng)常困擾著他們。實(shí)際上在VB中利用數(shù)組(尤其動(dòng)態(tài)數(shù)組)和自定義數(shù)據(jù)類(lèi)型(Type Statement)完全可以描述諸如鏈表、棧、隊(duì)列和二叉樹(shù)這樣的結(jié)構(gòu),并實(shí)現(xiàn)排序、查找等運(yùn)算,且機(jī)制上也非常靈活。
    2.鏈表、棧及隊(duì)列數(shù)據(jù)結(jié)構(gòu)在VB編程中的實(shí)現(xiàn)
    2.1數(shù)組和自定義數(shù)據(jù)類(lèi)型所起的作用
    為便于理解數(shù)組的作用,我們引入數(shù)據(jù)場(chǎng)和指針場(chǎng)的概念,在數(shù)據(jù)場(chǎng)中存放數(shù)組中各元素的值,指針場(chǎng)中存放該值在數(shù)組中的位置,兩者一一對(duì)應(yīng)。指針的上限指向數(shù)組第一個(gè)元素的位置,下限指向最末一個(gè)元素的位置。數(shù)組中的元素在內(nèi)存中是連續(xù)的線(xiàn)性的節(jié)點(diǎn)序列,這種線(xiàn)性的數(shù)據(jù)結(jié)構(gòu)是應(yīng)用最廣泛,最簡(jiǎn)單的一種數(shù)據(jù)結(jié)構(gòu)。
    自定義數(shù)據(jù)類(lèi)型(Type Statement)可以包含多個(gè)互相關(guān)聯(lián)的不同數(shù)據(jù)類(lèi)型的元素,VB限定聲明一個(gè)自定義數(shù)據(jù)類(lèi)型必須在模塊層(Module Level)進(jìn)行。聲明了一個(gè)自定義數(shù)據(jù)類(lèi)型后便可以定義一個(gè)那種類(lèi)型的變量。
    例1 用名為queue的自定義數(shù)據(jù)類(lèi)型聲明一個(gè)固定大小的數(shù)組:
    Type queue
    data As Integer '用作數(shù)據(jù)場(chǎng)
    next As Integer '用作指針場(chǎng)
    End Type
    Const max=10
    Dim a(10) As queue
    設(shè)a( i )為數(shù)組中的一個(gè)元素,該元素的指針指向數(shù)組a(10)第i+1個(gè)元素,其下標(biāo)為i ,指針的值為i 。需要指出的是數(shù)據(jù)結(jié)構(gòu)不同于數(shù)據(jù)類(lèi)型,也不同于數(shù)據(jù)類(lèi)型聲明的對(duì)象(變量)。數(shù)據(jù)結(jié)構(gòu)不僅描述數(shù)據(jù)類(lèi)型的數(shù)據(jù)對(duì)象,而且要描述數(shù)據(jù)對(duì)象各元素之間的各種運(yùn)算。為了弄清自定義數(shù)據(jù)類(lèi)型的作用,我們規(guī)定變量data存放元素的值(作數(shù)據(jù)場(chǎng)用),變量next存放緊接本元素后的元素的指針。通過(guò)用自定義數(shù)據(jù)類(lèi)型queue聲明數(shù)組a(10)和對(duì)變量next作專(zhuān)門(mén)規(guī)定,可以發(fā)現(xiàn),我們能將一片連續(xù)的線(xiàn)性分布的數(shù)據(jù)存放在內(nèi)存中非線(xiàn)性的不連續(xù)的地址空間里,卻不影響我們對(duì)其進(jìn)行線(xiàn)性的運(yùn)算操作。
    像這種利用指針把各個(gè)元素鏈接起來(lái)的結(jié)構(gòu)被稱(chēng)為鏈表,類(lèi)似例1定義的數(shù)組均可作為鏈表使用。
    例2 用queue將a(10)初始化為一個(gè)單向鏈接表:
    For i = 0 To 9
    a( i ).next = i + 1 ' i + 1為下一個(gè)元素的指針
    a( i ).data=10*rnd
    Next i
    如果再加上語(yǔ)句a(10).next = 0就構(gòu)成了一個(gè)單向循環(huán)鏈表。通過(guò)改變指針的指向可以對(duì)鏈表進(jìn)行插入和刪除運(yùn)算。