在Visual Basic程式設計中運用資料結構

2021-03-31 12:01:20 字數 4291 閱讀 1007

visual basic程式設計中運用資料結構

章新蘇 (

江蘇省水利科學研究所材料結構室)

摘要:本文討論了在vb程式設計中利用陣列和自定義資料型別構造鍊錶、棧和佇列等資料結構的方法。

1

.引言basic

語言擁有較高的普及率,同時在

windows

作業系統中

visual basic

以功能強、**量小,容易上手和所見即所得的視覺化介面贏得了廣大

basic

程式編制者的交口稱讚。然而,在諸如數值計算、結構計算及專案管理系統的程式設計中如何構建資料結構,並設計出相應的演算法,卻經常困擾著他們。實際上在

vb中利用陣列(尤其動態陣列)和自定義資料型別(

type statement

)完全可以描述諸如鍊錶、棧、佇列和二叉樹這樣的結構,並實現排序、查詢等運算,且機制上也非常靈活。

2.鍊錶、棧及佇列資料結構在

vb程式設計中的實現2.

1陣列和自定義資料型別所起的作用

為便於理解陣列的作用,我們引入資料場和指標場的概念,在資料場中存放陣列中各元素的值,指標場中存放該值在陣列中的位置,兩者一一對應。指標的上限指向陣列第乙個元素的位置,下限指向最末乙個元素的位置。陣列中的元素在記憶體中是連續的線性的節點序列,這種線性的資料結構是應用最廣泛,最簡單的一種資料結構。

自定義資料型別(

type statement

)可以包含多個互相關聯的不同資料型別的元素,

vb限定宣告乙個自定義資料型別必須在模組層(

module level

)進行。宣告了乙個自定義資料型別後便可以定義乙個那種型別的變數。例1

用名為queue

的自定義資料型別宣告乙個固定大小的陣列:

type queue

data as integer

』用作資料場

next as integer

』用作指標場

end type

const max=10

dim a(10) as queue

設a( i )

為陣列中的乙個元素,該元素的指標指向陣列

a(10)

第i+1

個元素,其下標為

i ,指標的值為

i 。需要指出的是資料結構不同於資料型別,也不同於資料型別宣告的物件(變數)。資料結構不僅描述資料型別的資料物件,而且要描述資料物件各元素之間的各種運算。為了弄清自定義資料型別的作用,我們規定變數

data

存放元素的值(作資料場用),變數

next

存放緊接本元素後的元素的指標。通過用自定義資料型別

queue

宣告陣列

a(10)

和對變數

next

作專門規定,可以發現,我們能將一片連續的線性分布的資料存放在記憶體中非線性的不連續的位址空間裡,卻不影響我們對其進行線性的運算操作。

像這種利用指標把各個元素鏈結起來的結構被稱為鍊錶,類似例

1定義的陣列均可作為鍊錶使用。例2

用queue

將a(10)

初始化為乙個單向鏈結表:

for i = 0 to 9

a( i ).next = i + 1

』i + 1

為下乙個元素的指標

a( i ).data=10*rnd

next i

如果再加上語句

a(10).next = 0

就構成了乙個單向迴圈鍊錶。通過改變指標的指向可以對鍊錶進行插入和刪除運算。

top1bottom

圖一、迴圈鏈結佇列示意圖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

[參考文獻

][1]

左孝凌主編

.計算機軟體基礎教程

.北京:電子工業出版社,1992

[2]charles parly

.visual basic 3.0

程式設計大全

.北京:電子工業出版社,1994

在Visual Basic 6 0中操縱XML檔案

擴充套件標記語言 xml是一種簡單的資料儲存語言,使用一系列簡單的標記描述資料,而這些標記可以用方便的方式建立,雖然 xml占用的空間比二進位制資料要占用更多的空間,但 xml極其簡單易於掌握和使用。xml與access,oracle和sql server等資料庫不同,資料庫提供了更強有力的資料儲存...

Visual Basic10個小程式設計

1 如果一行程式太長,能不能換行?vb的程式 是允許換行書寫的,只要在每次換行的最後乙個字元加上換行字元 就可以了。例如 sub picmove frm.picture2.left frm.picture1.left 加上換行符 frm.picture1.width end sub 2 如何在設計的...

Visual Basic 程式設計問題解答

1 如果一行程式太長,查閱起來很麻煩,能不能換行?vb的程式 是允許換行書寫的,只要在每次換行的最後乙個字元加上換行字元 就可以了。例如 sub picmove frm.picture2.left frm.picture1.left 加上換行符 frm.picture1.width end sub ...