數(shù)據(jù)結(jié)構(gòu)圖總結(jié)(五篇)_第1頁
數(shù)據(jù)結(jié)構(gòu)圖總結(jié)(五篇)_第2頁
數(shù)據(jù)結(jié)構(gòu)圖總結(jié)(五篇)_第3頁
數(shù)據(jù)結(jié)構(gòu)圖總結(jié)(五篇)_第4頁
數(shù)據(jù)結(jié)構(gòu)圖總結(jié)(五篇)_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——數(shù)據(jù)結(jié)構(gòu)圖總結(jié)(五篇)當(dāng)工作或?qū)W習(xí)進(jìn)行到一定階段或告一段落時,需要回過頭來對所做的工作認(rèn)真地分析研究一下,確定成績,找出問題,歸納出經(jīng)驗教訓(xùn),提高認(rèn)識,明確方向,以便進(jìn)一步做好工作,并把這些用文字表述出來,就叫做總結(jié)。怎樣寫總結(jié)才更能起到其作用呢?總結(jié)應(yīng)當(dāng)怎么寫呢?下面是我為大家?guī)淼目偨Y(jié)書優(yōu)秀范文,希望大家可以喜歡。

key)f-lchild=p;數(shù)據(jù)結(jié)構(gòu)圖總結(jié)篇三

數(shù)據(jù)結(jié)構(gòu)參考題目

一、選擇

1.假使在數(shù)據(jù)結(jié)構(gòu)中每個數(shù)據(jù)元素只可能有一個直接前驅(qū),但可以有多個直接后繼,則該結(jié)構(gòu)是()

a.棧b.隊列c.樹d.圖2.下面程序段的時間繁雜度為()for(i=0;inext=hl;b.p-next=hl;hl=p;c.p-next=hl;p=hl;d.p-next=hl-next;hl-next=p;4.兩個字符串相等的條件是()

c.都是非空串d.串的長度相等且對應(yīng)的字符一致5.若以s和x分別表示進(jìn)棧和退棧操作,則對初始狀態(tài)為空的??梢赃M(jìn)行的棧操作系列是()

xxsxsxxx6.已知一棵含50個結(jié)點(diǎn)的二叉樹中只有一個葉子結(jié)點(diǎn),則該樹中度為1的結(jié)點(diǎn)個數(shù)為()a.0b.1c.48d.497.已知用某種排序方法對關(guān)鍵字序列(51,35,93,24,13,68,56,42,77)進(jìn)行排序時,前兩趟排序的結(jié)果為

(35,51,24,13,68,56,42,77,93)

(35,24,13,51,56,42,68,77,93)所采用的排序方法是()

a.插入排序b.冒泡排序c.快速排序d.歸并排序

8.已知散列表的存儲空間為t[0..16],散列函數(shù)h(key)=key%17,并用二次探測法處理沖突。散列表中已插入以下關(guān)鍵字:t[5]=39,t[6]=57和t[7]=7,則下一個關(guān)鍵字23插入的位置是()

a.t[2]b.t[4]c.t[8]d.t[10]9.假使將矩陣an×n的每一列看成一個子表,整個矩陣看成是一個廣義表l,即l=((a11,a21,…,an1),(a12,a22,…,an2),…,(a1n,a2n,…,ann)),并且可以通過求表頭head和求表尾tail的運(yùn)算求取矩陣中的每一個元素,則求得a21的運(yùn)算是()(tail(head(l)))(head(head(l)))(head(tail(l)))(head(tail(l)))10.在一個具有n個頂點(diǎn)的有向圖中,所有頂點(diǎn)的出度之和為dout,則所有頂點(diǎn)的入度之和為()

-1+1d.n11.從規(guī)律關(guān)系來看,數(shù)據(jù)元素的直接前驅(qū)為0個或1個的數(shù)據(jù)結(jié)構(gòu)只能是()a線性結(jié)構(gòu)b.樹形結(jié)構(gòu)c.線性結(jié)構(gòu)和樹型結(jié)構(gòu)d.線性結(jié)構(gòu)和圖狀結(jié)構(gòu)

12.棧的插入和刪除操作在()進(jìn)行。

a.棧頂b.棧底c.任意位置d指定位置13.由權(quán)值分別為11,8,6,2,5的葉子結(jié)點(diǎn)生成一棵哈夫曼樹,它的帶權(quán)路徑長度為()a.24b.71c.48d.5314.一個棧的輸入序列為123,則以下序列中不可能是棧的輸出序列的是()a.231b.321c.312d.12315.關(guān)于棧和隊列的說法中正確的是()

a.棧和隊列都是線性結(jié)構(gòu)b.棧是線性結(jié)構(gòu),隊列不是線性結(jié)構(gòu)c.棧不是線性結(jié)構(gòu),隊列是線性結(jié)構(gòu)d.棧和隊列都不是線性結(jié)構(gòu)16.關(guān)于存儲一致數(shù)據(jù)元素的說法中正確的是()a.順序存儲比鏈?zhǔn)酱鎯ι僬伎臻gb.順序存儲比鏈?zhǔn)酱鎯Χ嗾伎臻g

c.順序存儲和鏈?zhǔn)酱鎯Χ家笳加谜麎K存儲空間d.鏈?zhǔn)酱鎯Ρ软樞虼鎯﹄y于擴(kuò)展空間

17.已知一個單鏈表中,指針q指向指針p的前趨結(jié)點(diǎn),若在指針q所指結(jié)點(diǎn)和指針p所指結(jié)點(diǎn)之間插入指針s所指結(jié)點(diǎn),則需執(zhí)行()a.q→next=s;p→next=s;b.q→next=s;s→next=p;c.q→next=s;q→next=p;d.q→next=s;s→next=q;

18.設(shè)一組記錄的關(guān)鍵字key值為{62,50,14,27,19,35,47,56,83},散列函數(shù)為h(key)=keymod13,則它的開散列表中散列地址為1的鏈中的結(jié)點(diǎn)個數(shù)是()a.1b.2c.3d.419.執(zhí)行下面程序段時,s語句被執(zhí)行的次數(shù)為:()for(inti=1;i=n;i++)for(intj=1;j=i;j++)s;a.n*nb.n*n/2c.n(n+1)d.n(n+1)/220.在長度為n的線性表中刪除一個指針p所指結(jié)點(diǎn)的時間繁雜度是()a.o(n)b.o(1)c.o(log2n)d.o(n2)21.設(shè)一個棧的輸入序列是a,b,c,d,則所得到的輸出序列(輸入過程中允許出棧)不可能出現(xiàn)的是()

a.a,b,c,db.a,b,d,cc.d,c,b,ad.c,d,a,b22.關(guān)于串的表達(dá)中,正確的是()a.空串是只含有零個字符的串b.空串是只含有空格字符的串

c.空串是含有零個字符或含有空格字符的串

d.串是含有一個或多個字符的有窮序列

23.在具有m個單元的循環(huán)隊列中,隊頭指針為front,隊尾指針為rear,則隊滿的條件是()

a.front==rear

b.(front+1)%m==rear

+1==front

d.(rear+1)%m==front24.設(shè)有二維數(shù)組

1a[n][n]表示如下:23456,則a[i][i](0≤i≤n-1)的d.i2/2值為()

a.i*(i-1)/2b.i*(i+1)/2c.(i+2)*(i+1)/225.高度為h的完全二叉樹中,結(jié)點(diǎn)數(shù)最多為()

ha.2h-1b.2h+1c.2-1d.2h26.由m棵結(jié)點(diǎn)數(shù)為n的樹組成的森林,將其轉(zhuǎn)化為一棵二叉樹,則該二叉樹中根結(jié)點(diǎn)的右子樹上具有的結(jié)點(diǎn)個數(shù)是()

-1c.n(m-1)d.m(n-1)27.在一個具有n個頂點(diǎn)的無向圖中,每個頂點(diǎn)度的最大值為()a.nb.n-1c.n+1d.2(n-1)28.關(guān)于無向圖的鄰接矩陣的說法中正確的是()a.矩陣中非全零元素的行數(shù)等于圖中的頂點(diǎn)數(shù)

b.第i行上與第i列上非零元素總和等于頂點(diǎn)vi的度數(shù)c.矩陣中的非零元素個數(shù)等于圖的邊數(shù)

d.第i行上非零元素個數(shù)和第i列上非零元素個數(shù)一定相等

29.設(shè)一組記錄的關(guān)鍵字key值為{62,50,14,28,19,35,47,56,83},散列函數(shù)為h(key)=keymod13,則它的開散列表中散列地址為1的鏈中的結(jié)點(diǎn)個數(shù)是()a.1b.2c.3d.430.設(shè)有一組初始關(guān)鍵字值序列為(49,81,55,36,44,88),則利用快速排序的方法,以第一個關(guān)鍵字值為基準(zhǔn)得到的一次劃分為()

a.36,44,49,55,81,88b.44,36,49,55,81,88c.44,36,49,81,55,88d.44,36,49,55,88,81

二、填空題

1.數(shù)據(jù)是計算機(jī)加工處理的對象()。2.數(shù)據(jù)結(jié)構(gòu)的概念包括數(shù)據(jù)的規(guī)律結(jié)構(gòu)、數(shù)據(jù)在計算機(jī)中的存儲方式和數(shù)據(jù)的運(yùn)算三個方面()。

3.線性表是由n≥0個一致類型組成的有限序列()。4.棧是一種后進(jìn)先出的線性表()。

5.從循環(huán)鏈表的某一結(jié)點(diǎn)出發(fā),只能找到它的后繼結(jié)點(diǎn),不能找到它的前驅(qū)結(jié)點(diǎn)()。6.單鏈表設(shè)置頭結(jié)點(diǎn)的目的是為了簡化運(yùn)算()。7.樹的最大特點(diǎn)是一對多的層次結(jié)構(gòu)()。8.組成數(shù)據(jù)的基本單位稱為數(shù)據(jù)元素()。

9.從非循環(huán)鏈表的某一結(jié)點(diǎn)出發(fā),既能找到它的后繼結(jié)點(diǎn),又能找到它的前驅(qū)結(jié)點(diǎn)()。

10.單鏈表結(jié)點(diǎn)的指針域是用來存放其直接后繼結(jié)點(diǎn)的首地址的()

11.數(shù)據(jù)的存儲結(jié)構(gòu)是數(shù)據(jù)的規(guī)律結(jié)構(gòu)的存儲映象()。

12.用順序表來存儲線性表時,不需要另外開拓空間來保存數(shù)據(jù)元素之間的相互關(guān)系()。

13.在非線性結(jié)構(gòu)中,至少存在一個元素不止一個直接前驅(qū)或不止一個直接后驅(qū)()。14.樹的最大特點(diǎn)是一對多的層次結(jié)構(gòu)()。15.隊列的特點(diǎn)是先進(jìn)先出()。

16.由后序遍歷序列和中序遍歷序列能唯一確定一顆二叉樹()。17.數(shù)據(jù)的存儲結(jié)構(gòu)獨(dú)立于計算機(jī)()。18.線性表簡稱為〞順序表〞。()

19.對數(shù)據(jù)的任何運(yùn)算都不能改變數(shù)據(jù)原有的結(jié)構(gòu)特性()。20.從循環(huán)單鏈表的任一結(jié)點(diǎn)出發(fā),可以找到表中的所有結(jié)點(diǎn)()。21.棧是一種先進(jìn)先出的線性表()。22.鏈表的主要缺點(diǎn)是不能隨機(jī)訪問()。23.二叉樹是樹的特別形式()。24.冒泡排序法是穩(wěn)定的排序()。25.算法是對解題方法和步驟的描述()。26.算法可以用任意的符號來描述()。

27.數(shù)據(jù)的規(guī)律結(jié)構(gòu)可以看作是從具體問題抽象出來的數(shù)學(xué)模型()。

28.線性表的順序存儲方式是按規(guī)律次序?qū)⒃卮娣旁谝黄刂愤B續(xù)的空間中()。29.棧是一種先進(jìn)后出的線性表()。

30.將插入和刪除限定在表的同一端進(jìn)行的線性表是隊列()。

三、畫圖題

1.請根據(jù)以下二元組畫出相應(yīng)的數(shù)據(jù)結(jié)構(gòu)

k={15,11,20,8,14,13}r={15,11,15,20,11,8,11,14,14,13}2.請根據(jù)以下二元組畫出相應(yīng)的數(shù)據(jù)結(jié)構(gòu)

k={a,b,c,d,e,f,g,h,i,j}r={,,,,,,,,}3.請根據(jù)以下二元組畫出相應(yīng)的數(shù)據(jù)結(jié)構(gòu)k={1,2,3,4,5,6,7}r={1,2,1,3,1,4,2,1,2,4,3,5,3,6,3,7,4,1,4,5,5,1,5,3,5,4,6,5,6,7,7,3}4.請根據(jù)以下二元組畫出相應(yīng)的數(shù)據(jù)結(jié)構(gòu)k={1,2,3,4,5,6,7}r={(1,2),(1,3),(2,3),(2,4),(2,5),(3,7),(4,6),(5,6),(6,7)}

四、運(yùn)算題

1.已知一個圖的頂點(diǎn)集v和邊集h分別為:

v={0,1,2,3,4,5,6,7}

e={(0,1)8,(0,2)5,(0,3)2,(1,5)6,(2,3)25,(2,4)13,(3,5)9,(3,6)10,(4,6)4,(5,7)20};

依照克魯斯卡爾算法得到最小生成樹,拭寫出在最小生成樹中依次得到的各條邊。______,______,______,______,______,______,______。

2.一個線性表為b=(12,23,45,57,20,03,78,31,15,36),設(shè)散列表為ht[0..12],散列函數(shù)為h(key)=key%13并用線性探查法解決沖突,請畫出散列表,并計算等概率狀況下查找成功的平均查找長度。

平均查找長度:(寫出計算過程)

3.已知一個圖的頂點(diǎn)集v和邊集h分別為:

v={0,1,2,3,4,5,6,7}

e={(0,1)8,(0,2)5,(0,3)2,(1,5)6,(2,3)25,(2,4)13,(3,5)9,(3,6)10,(4,6)4,(5,7)20};

依照普里姆算法得到最小生成樹,試寫出在最小生成樹中依次得到的各條邊。(從頂點(diǎn)2出發(fā))

____

__,___

_,___

___,__

____,______,______,______。4.寫出下圖所示的二叉樹的前中后序遍歷結(jié)果:

前序:中序:后序:

5.設(shè)有一個輸入數(shù)據(jù)的序列是{46,25,78,62,12,80},試畫出從空樹起,逐個輸入各個數(shù)據(jù)而生成的二叉排序樹。

五、編程題

1.請編寫一個算法,實現(xiàn)十進(jìn)制整數(shù)與二進(jìn)制數(shù)的轉(zhuǎn)換。voidshi_to_er(unsignedx){2.寫出二分法查找的算法:

intsearch_bin(keytypek,sstablest){3.請編寫一個算法,實現(xiàn)單鏈表的就地逆置(單鏈表不帶頭結(jié)點(diǎn))。linklist*invertlink(linklist*h){

數(shù)據(jù)結(jié)構(gòu)圖總結(jié)篇四

試驗:線性表的基本操作

學(xué)習(xí)把握線性表的順序存儲結(jié)構(gòu)、鏈?zhǔn)酱鎯Y(jié)構(gòu)的設(shè)計與操作。對順序表建立、插入、刪除的基本操作,對單鏈表建立、插入、刪除的基本操作算法。

1.順序表的實踐

1)建立4個元素的順序表s=sqlist[]={1,2,3,4,5},實現(xiàn)順序表建立的基本操作。

2)在sqlist[]={1,2,3,4,5}的元素4和5之間插入一個元素9,實現(xiàn)順序表插入的基本操作。

3)在sqlist[]={1,2,3,4,9,5}中刪除指定位置(i=5)上的元素9,實現(xiàn)順序表的刪除的基本操作。2.單鏈表的實踐

3.1)建立一個包括頭結(jié)點(diǎn)和4個結(jié)點(diǎn)的(5,4,2,1)的單鏈表,實現(xiàn)單鏈表建立的基本操作。

2)將該單鏈表的所有元素顯示出來。

3)在已建好的單鏈表中的指定位置(i=3)插入一個結(jié)點(diǎn)3,實現(xiàn)單鏈表插入的基本操作。

4)在一個包括頭結(jié)點(diǎn)和5個結(jié)點(diǎn)的(5,4,3,2,1)的單鏈表的指定位置(如i=2)刪除一個結(jié)點(diǎn),實現(xiàn)單鏈表刪除的基本操作。5)實現(xiàn)單鏈表的求表長操作。

1.開啟vc++。

2.建立工程:點(diǎn)file-new,選project標(biāo)簽,在列表中選win32consoleapplication,再在右邊的框里為工程起好名字,選好路徑,點(diǎn)ok-finish。至此工程建立完畢。

3.創(chuàng)立源文件或頭文件:點(diǎn)file-new,選file標(biāo)簽,在列表里選c++sourcefile。給文件起好名字,選好路徑,點(diǎn)ok。至此一個源文件就被添加到了你剛創(chuàng)立的工程之中。

4.寫好代碼

5.編譯->鏈接->調(diào)試

線性是我們學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)中,碰見的第一個數(shù)據(jù)結(jié)構(gòu)。學(xué)習(xí)線性表的重點(diǎn)把握順序表和單鏈表的各種算法和時間性能分析。線性表右兩種存儲方式即順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)。通過學(xué)習(xí)我知道了對線性表進(jìn)行建立、插入、刪除,同時單鏈表也是進(jìn)行建立、插入、刪除。而對于順序表的插入刪除運(yùn)算,其平均時間繁雜度均為0(n).通過這次的學(xué)習(xí),把握的太熟練,主要是課本上的知識點(diǎn)沒有完全的理解,回去我會多看書,理解重要的概念。總之,這次試驗我找到了自己的不足之處,以后會努力的。

試驗二:棧的表示與實現(xiàn)及棧的應(yīng)用

(1)把握棧的順序存儲結(jié)構(gòu)及其基本操作的實現(xiàn)。(2)把握棧后進(jìn)先出的特點(diǎn),并利用其特性在解決實際問題中的應(yīng)用。(3)把握用遞歸算法來解決一些問題。

1.編寫程序,對于輸入的任意一個非負(fù)十進(jìn)制整數(shù),輸出與其等值的八進(jìn)制數(shù)。

2.編寫遞歸程序,實現(xiàn)n!的求解。3.編寫遞歸程序,實現(xiàn)以下函數(shù)的求解。

n,n0,1fib(n)fib(n1)fib(n2),n1

4.編寫程序,實現(xiàn)hanoi塔問題。1.開啟vc++。

2.建立工程:點(diǎn)file-new,選project標(biāo)簽,在列表中選win32consoleapplication,再在右邊的框里為工程起好名字,選好路徑,點(diǎn)ok-finish。至此工程建立完畢。

3.創(chuàng)立源文件或頭文件:點(diǎn)file-new,選file標(biāo)簽,在列表里選c++sourcefile。給文件起好名字,選好路徑,點(diǎn)ok。至此一個源文件就被添加到了你剛創(chuàng)立的工程之中。

4.寫好代碼

5.編譯->鏈接->調(diào)試

通過這次的學(xué)習(xí)我把握了棧這種抽象數(shù)據(jù)類型的特點(diǎn),并能在相應(yīng)的應(yīng)用任務(wù)中正確選用它;總的來說,棧是操作受限的線性表,是限定僅在表尾進(jìn)行插入或刪除操作的線性表。因此,對棧來說,表尾端有其特別含義,稱為棧頂(top),相應(yīng)地,表頭端稱為棧底(botton);棧又稱為后進(jìn)先出(lastinfirstout)的線性表,簡稱lifo結(jié)構(gòu),由于它的修改是按后進(jìn)先出的原則進(jìn)行的。

加上這個試驗,我已經(jīng)學(xué)了線性表(順序表,單鏈表)和棧,知道它們都是線性表,而且對以后的學(xué)習(xí)有很大的作用,可以說這是學(xué)習(xí)以后知識的總要基礎(chǔ)。

試驗三:二叉樹的建立及遍歷

(1)把握利用先序序列建立二叉樹的二叉鏈表的過程。(2)把握二叉樹的先序、中序和后序遍歷算法。

1.編寫程序,實現(xiàn)二叉樹的建立,并實現(xiàn)先序、中序和后序遍歷。如:輸入先序序列abc###de###,則建立如下圖所示的二叉樹。

并顯示其先序序列為:abcde中序序列為:cbaed后序序列為:cbeda1.開啟vc++。

2.建立工程:點(diǎn)file-new,選project標(biāo)簽,在列表中選win32consoleapplication,再在右邊的框里為工程起好名字,選好路徑,點(diǎn)ok-finish。至此工程建立完畢。

3.創(chuàng)立源文件或頭文件:點(diǎn)file-new,選file標(biāo)簽,在列表里選c++sourcefile。給文件起好名字,選好路徑,點(diǎn)ok。至此一個源文件就被添加到了你剛創(chuàng)立的工程之中。

4.寫好代碼

5.編譯->鏈接->調(diào)試

這次試驗是關(guān)于二叉樹的常見操作,主要是二叉樹的建立和遍歷,在這次試驗中我按先序方式建立二叉樹的,而遍歷方式則相對要多一些,有遞歸的先序、中序、后序遍歷,和非遞歸的先序、中序、后序遍歷,此外還有層次遍歷.二叉樹高度和葉子個數(shù)的計算和遍歷相差不大,只是加些判斷條件,總體來說,本次試驗不太好做,期間出現(xiàn)了好多規(guī)律錯誤,變量初始化的問題等,不過經(jīng)過細(xì)心排查最終都一一解決了。

試驗四:查找與排序

(1)把握折半查找算法的實現(xiàn)。(2)把握冒泡排序算法的實現(xiàn)。

1.編寫折半查找程序,對以下數(shù)據(jù)查找37所在的位置。5,13,19,21,37,56,64,75,80,88,922.編寫冒泡排序程序,對以下數(shù)據(jù)進(jìn)行排序。49,38,65,97,76,13,27,491.開啟vc++。

2.建立工程:點(diǎn)file-new,選project標(biāo)簽,在列表中選win32consoleapplication,再在右邊的框里為工程起好名字,選好路徑,點(diǎn)ok-finish。至此工程建立完畢。

3.創(chuàng)立源文件或頭文件:點(diǎn)file-new,選file標(biāo)簽,在列表里選c++sourcefile。給文件起好名字,選好路徑,點(diǎn)ok。至此一個源文件就被添加到了你剛創(chuàng)立的工程之中。

4.寫好代碼

5.編譯->鏈接->調(diào)試

(1)查找算法的代碼如下所示:#include“stdio.h〞#include“malloc.h〞#defineoverflow-1#defineok1#definemaxnum100#definen10typedefintelemtype;typedefintstatus;typedefstruct{

elemtype*elem;

intlength;}sstable;statusinitlist(sstablest){inti,n;

=

(elemtype*)

malloc(elemtype));

if(!)return(overflow);

printf(“輸入元素個數(shù)和各元素的值:〞);

scanf(“%dn〞,n);

for(i=1;i=n;i++){

(maxnum*sizeof

scanf(“%d〞,[i]);}

=n;

returnok;}intseq_search(sstablest,elemtypekey){

inti;

[0]=key;

for(i=;[i]!=key;--i);

returni;}intbinarysearch(sstablest,elemtypekey){

intmid,low,high,i=1;

low=1;

high=;

while(low=high)

{

mid=(low+high)/2;

if([mid]==key)

returnmid;

elseif(keyhigh=mid-1;

else

}

return0;}voidmain(){sstablest;initlist(st);

elemtypekey;intn;printf(“key=〞);

scanf(“%d〞,key);

printf(“nn〞);

/*printf(“afterseqsearch::〞);

n=seq_search(st,key);

printf(“positionisin%dnn〞,n);*/

printf(“afterbinarysearch::〞);

n=binarysearch(st,key);

low=mid+1;if(n)printf(“positionisin%dnn〞,n);else

}試驗結(jié)果如下所示:

(2)排序算法的代碼如下所示:#include“stdio.h〞#include“malloc.h〞#defineoverflow-1#defineok1#definemaxnum100#definen10typedefintelemtype;typedefintstatus;typedefstruct{

elemtype*elem;

intlength;}sstable;statusinitlist(sstablest)printf(“notinnn〞);{inti,n;

(elemtype));

if(!)return(overflow);

printf(“輸入元素個數(shù)和各元素的值:〞);

scanf(“%dn〞,n);

for(i=1;i=n;i++){

scanf(“%d〞,[i]);}

=n;

returnok;}voidsort(sstablest){

inti,j,t;

for(i=1;ifor(j=i+1;j=;j++)

if([i][j]){t=[i];=

(elemtype*)

malloc

(maxnum*sizeof

}

}[i]=[j];[j]=t;voiddisplay(sstablest){inti;

for(i=1;i=;i++){

printf(“%d

〞,[i]);}

}voidmain(){

sstablest;initlist(st);intn;printf(“beforesort::n〞);display(st);sort(st);printf(“naftersort::n〞);display(st);}試驗結(jié)果如下所示:

通過這次試驗,我明白了程序里的折半查找和冒泡查找.其實排序可以有好多種,但是其目的應(yīng)當(dāng)都是為了能夠在海量的數(shù)據(jù)里迅速查找到你要的數(shù)據(jù)信息,折半查找是種比較快的方式,但前提是要是有序的排序才可以。對于有序表,查找時先取表中間位置的記錄關(guān)鍵字和所給關(guān)鍵字進(jìn)行比較,若相等,則查找成功;假使給定值比該記錄關(guān)鍵字大,則在后半部分繼續(xù)進(jìn)行折半查找;否則在前半部分進(jìn)行折半查找,直到查找范圍為空而查不到為止。折半查找的過程實際上死先確定待查找元素所在的區(qū)域,然后逐步縮小區(qū)域,直到查找成功或失敗為止。算法中需要用到三個變量,low表示區(qū)域下界,high表示上界,中間位置mid=(low+high)/2.而冒泡查找則是從小到大的排序.

數(shù)據(jù)結(jié)構(gòu)圖總結(jié)篇五

一、基本概念

1、數(shù)據(jù)元素是數(shù)據(jù)的基本單位。

2、數(shù)據(jù)項是數(shù)據(jù)不可分割的最小單位。

3、數(shù)據(jù)結(jié)構(gòu)的

規(guī)律結(jié)構(gòu)(抽象的,與實現(xiàn)無關(guān))

物理結(jié)構(gòu)(存儲結(jié)構(gòu))順序映像(順序存儲結(jié)構(gòu))位置“相鄰〞非順序映像(鏈?zhǔn)酱鎯Y(jié)構(gòu))指針表示關(guān)系

4、算法特性:算法具有正確性、有窮性,確定性,(可行性)、輸入,輸出正確性:能按設(shè)計要求解決具體問題,并得到正確的結(jié)果。

有窮性:任何一條指令都只能執(zhí)行有限次,即算法必需在執(zhí)行有限步后終止。確定性:算法中每條指令的含義必需明確,不允許由二義性

可行性:算法中待執(zhí)行的操作都十分基本,算法應(yīng)當(dāng)在有限時間內(nèi)執(zhí)行完畢。

輸入:一個算法的輸入可以包含零個或多個數(shù)據(jù)。輸出:算法有一個或多個輸出

5、算法設(shè)計的要求:

(1)正確性:算法應(yīng)能滿足設(shè)定的功能和要求。(2)可讀性:思路明了、層次明顯、易讀易懂。

(3)健壯性:輸入非法數(shù)據(jù)時應(yīng)能作適當(dāng)?shù)姆磻?yīng)和處理。

(4)高效性(時間繁雜度):解決問題時間越短,算法的效率就越高。(5)低存儲量(空間繁雜度):完成同一功能,占用存儲空間應(yīng)盡可能少。

二、線性表

1、線性表list:最常用且最簡單的數(shù)據(jù)結(jié)構(gòu)。含有大量記錄的線性表稱為文件。

2、線性表是n個數(shù)據(jù)元素的有限序列。

線性結(jié)構(gòu)的特點(diǎn):①“第一個〞②“最終一個〞③前驅(qū)④后繼。

3、順序表——線性表的順序存儲結(jié)構(gòu)特點(diǎn)

a)規(guī)律上相鄰的元素在物理位置上相鄰。b)隨機(jī)訪問。

2)表長為n時,線性表進(jìn)行插入和刪除操作的時間繁雜度為o(n),插入一個元素時大約移動表中的一半元素,刪除一個元素時大約移動表中的(n-1)2。

4、線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)1)類型定義

簡而言之,“數(shù)據(jù)+指針〞

2)不帶頭結(jié)點(diǎn)的空表判定為l==null帶頭結(jié)點(diǎn)的空表判定為l-next==null循環(huán)單鏈表為空的判定條件為==l線性鏈表的最終一個結(jié)點(diǎn)的指針為null頭結(jié)點(diǎn)的數(shù)據(jù)域為空,指針域指向第一個元素的指針。

5、順序表和單鏈表的比較

6、順序存儲:優(yōu)點(diǎn):存儲密度大,可隨機(jī)存儲

缺點(diǎn):大小固定;不利于增減節(jié)點(diǎn);存儲空間不能充分利用;容量難擴(kuò)展鏈?zhǔn)酱鎯Γ簝?yōu)點(diǎn):易于插入刪除;可動態(tài)申請空間;表容量僅受內(nèi)存空間限制缺點(diǎn):增加了存儲空間的開銷;不可以隨機(jī)存儲元素

三、棧與隊列

1、棧

棧:限定僅在表尾進(jìn)行插入或刪除操作的線性表。棧頂:表尾端棧底:表頭

棧是先進(jìn)后出的線性表。

插入棧頂元素稱為入棧,刪除棧頂元素稱為出棧。

類似于順序表,插入和刪除操作固定于表尾。

3、隊列

先進(jìn)先出的線性表。隊尾入隊對頭出隊

允許插入的一端叫做隊尾允許刪除的一端叫做對頭

4、鏈隊列

1.樹的定義

樹(tree):是n(n≥0)個有限數(shù)據(jù)元素的集合。在任意一棵非空樹t中:

(1)有且僅有一個特定的稱為樹根(root)的結(jié)點(diǎn),根結(jié)點(diǎn)無前趨結(jié)點(diǎn);

(2)當(dāng)n1時,除根結(jié)點(diǎn)之外的其余結(jié)點(diǎn)被分成m(m0)個互不相交的集合t1,t2,?,tm,其中每一個集合ti(1≤i≤m)本身又是一棵樹,并且稱為根的子樹。2.基本術(shù)語:

結(jié)點(diǎn)的度數(shù):結(jié)點(diǎn)的非空子樹(即后綴)個數(shù)叫作結(jié)點(diǎn)的度數(shù)

樹葉、分支結(jié)點(diǎn):左(右)子樹均為空二叉樹的結(jié)點(diǎn)稱作樹葉否則稱作分支結(jié)點(diǎn)。

結(jié)點(diǎn)的層數(shù):規(guī)定根的層數(shù)是0,其余結(jié)點(diǎn)的層數(shù)等于其父結(jié)點(diǎn)的層數(shù)加1孩子和雙親:樹的深度:

樹的度數(shù):樹中度數(shù)最大的結(jié)點(diǎn)度數(shù)叫作樹的度數(shù)樹林:是由零個或多個不相交的樹所組成的集合。3.二叉樹性質(zhì):

1)二叉樹的第i層上至多有2i-1個結(jié)點(diǎn)。2)深度為k的二叉樹至多有2k-1個結(jié)點(diǎn)。滿二叉樹:深度為k,有2k-1個結(jié)點(diǎn)。

完全二叉樹:給滿二叉樹的結(jié)點(diǎn)編號,從上至下,從左至右,n個結(jié)點(diǎn)的完全二叉樹中結(jié)點(diǎn)在對應(yīng)滿二叉樹中的編號正好是從1到n。

3)葉子結(jié)點(diǎn)n0,度為2的結(jié)點(diǎn)為n2,則n0=n2+1??紤]結(jié)點(diǎn)個數(shù):n=n0+n1+n2考慮分支個數(shù):n-1=2n2+n1可得n0=n2+1

5.遍歷二叉樹(先序dlr、中序ldr、后序lrd)方法與c語言描述

由二叉樹的遞歸定義可知,一棵二叉樹由根結(jié)點(diǎn)(d)、根結(jié)點(diǎn)的左子樹(l)和根結(jié)點(diǎn)的右子樹(r)三部分組成。因此,只要依次遍歷這三部分,就可以遍歷整個二叉樹。一般有三種方法:先序(前序)遍歷dlr(根左右)、中序遍歷ldr(左根右)、后序遍歷lrd(左右根)。

7.樹和森林

樹的存儲結(jié)構(gòu)

雙親表示法,孩子表示法,孩子兄弟表示法。特點(diǎn):雙親表示法簡單求得雙親,但不簡單求得孩子;孩子表示法簡單求得孩子,但求雙親麻煩;兩者可以結(jié)合起來使用。孩子兄弟表示法,簡單求得孩子和兄弟,求雙親麻煩,也可以增加指向雙親的指針來解決。

赫夫曼編碼(前綴碼)向左分支為0,向右分支為1,從根到葉子的路徑構(gòu)成葉子的前綴編碼。

五、圖1.

完全圖:有12n(n-1)條變得無向圖

有向完全圖:具有n(n-1)條弧的有向圖。權(quán):與圖的邊或弧相關(guān)的數(shù)。

頂點(diǎn)v的度:和v相關(guān)聯(lián)的邊的數(shù)目。

入度:以頂點(diǎn)v為頭的弧的數(shù)目出度:以頂點(diǎn)v為尾的弧的數(shù)目回路或環(huán):第一個頂點(diǎn)和最終一個頂點(diǎn)一致的路徑。

簡單路徑:序列中頂點(diǎn)不重復(fù)出現(xiàn)的路徑。

邊(弧)多則需要存儲空間多。

·十字鏈表:

十字鏈表是有向圖的另一種鏈?zhǔn)酱鎯Y(jié)構(gòu)。可以看成是將有向圖的鄰接表和逆鄰接表結(jié)合起來的一種鏈表。在十字鏈表中,對應(yīng)于有向圖中每一條弧有一個結(jié)點(diǎn),對應(yīng)于每個頂點(diǎn)有一個結(jié)點(diǎn)。

·鄰接多重表3.圖的遍歷

1)深度優(yōu)先(dfs)探尋

訪問方式:從圖中某頂點(diǎn)v出發(fā):a)訪問頂點(diǎn)v;

b)從v的未被訪問的鄰接點(diǎn)出發(fā),繼續(xù)對圖進(jìn)行深度優(yōu)先遍歷,若從某點(diǎn)出發(fā)所有鄰接點(diǎn)都已訪問過,退回前一個點(diǎn)繼續(xù)上述過程,若退回開始點(diǎn),終止。2)廣度(寬度,bfs)優(yōu)先探尋a)訪問頂點(diǎn)v;

b)訪問同v相鄰的所有未被訪問的鄰接點(diǎn)w1,w2,?wk;

c)依次從這些鄰接點(diǎn)出發(fā),訪問它們的所有未被訪問的鄰接點(diǎn);依此類推,直到圖中所有訪問過的頂點(diǎn)的鄰接點(diǎn)都被訪問;

4.生成樹和最小生成樹

每次遍歷一個連通圖將圖的邊分成遍歷所經(jīng)過的邊和沒有經(jīng)過的邊兩部分,將遍歷經(jīng)過的邊同圖的頂點(diǎn)構(gòu)成一個子圖,該子圖稱為生成樹。因此有dfs生成樹和bfs生成樹。

1)最小生成樹

·kruskal算法

一句話,“不構(gòu)成環(huán)的狀況下,每次選取最小邊〞。

-網(wǎng)

用頂點(diǎn)表示活動,邊表示活動的優(yōu)先關(guān)系的有向圖稱為aov網(wǎng)。

拓?fù)渑判颍簩ov網(wǎng)絡(luò)中頂點(diǎn)構(gòu)造拓?fù)溆行蛐蛄械倪^程。拓?fù)渑判虻姆椒?1)在有向圖中選一個沒有前驅(qū)的頂點(diǎn)且輸出之(2)從圖中刪除該頂點(diǎn)和所有以它為尾的弧6.關(guān)鍵路徑

aoe網(wǎng),關(guān)鍵路徑

aoe網(wǎng)(activityonedge)——帶權(quán)的有向無環(huán)圖,其中頂點(diǎn)表示事件,弧表示活動,權(quán)表示活動持續(xù)時間。在工程上常用來表示工程進(jìn)度計劃。

關(guān)鍵路徑:從源點(diǎn)到匯點(diǎn)的最長的一條路徑,或者全部由關(guān)鍵活動構(gòu)成的路徑。7.最短路徑

(1)迪杰斯特拉算法

求一個頂點(diǎn)到其他各頂點(diǎn)的最短路徑。

算法:(a)初始化:用起點(diǎn)v到該頂點(diǎn)w的直接邊(弧)初始化最短路徑,否則設(shè)為∞;

(b)從未求得最短路徑的終點(diǎn)中選擇路徑長度最小的終點(diǎn)u:即求得v到u的最短路徑;

(c)修改最短路徑:計算u的鄰接點(diǎn)的最短路徑,若(v,?,u)+(u,w)(v,?,w),則以(v,?,u,w)代替。

(d)重復(fù)(b)-(c),直到求得v到其余所有頂點(diǎn)的最短路徑。特點(diǎn):總是依照從小到大的順序求得最短路徑。

六、查找

1.查找分為:靜態(tài)查找表、動態(tài)查找表、哈希查找表2.靜態(tài)查找表:對查找表只作查找操作的查找表。動態(tài)查找表:查找過程中同時插入表中不含的元素,或者刪除查找表中已有的元素的操作的查找表。

3.順序查找:順序查找又稱線性查找,是最基本的查找方法之一。順序查找既適用于順序表,也適用于鏈表。

4.二分法(折半)查找:是一種效率較高的查找方法,但前提是表中元素必需按關(guān)鍵字有序(按關(guān)鍵字遞增或遞減)排列。

5.索引順序表查找又稱分塊查找。分塊查找:塊內(nèi)無序、塊間有序、如何分塊效率最高

6.動態(tài)查找表:二叉排序樹查找:二叉排序樹的生成

二叉

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論