數據結構圖總結(五篇)_第1頁
數據結構圖總結(五篇)_第2頁
數據結構圖總結(五篇)_第3頁
數據結構圖總結(五篇)_第4頁
數據結構圖總結(五篇)_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

key)f-lchild=p;數據結構圖總結篇三

數據結構參考題目

一、選擇

1.假使在數據結構中每個數據元素只可能有一個直接前驅,但可以有多個直接后繼,則該結構是()

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.串的長度相等且對應的字符一致5.若以s和x分別表示進棧和退棧操作,則對初始狀態(tài)為空的棧可以進行的棧操作系列是()

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

(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],散列函數h(key)=key%17,并用二次探測法處理沖突。散列表中已插入以下關鍵字:t[5]=39,t[6]=57和t[7]=7,則下一個關鍵字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的運算求取矩陣中的每一個元素,則求得a21的運算是()(tail(head(l)))(head(head(l)))(head(tail(l)))(head(tail(l)))10.在一個具有n個頂點的有向圖中,所有頂點的出度之和為dout,則所有頂點的入度之和為()

-1+1d.n11.從規(guī)律關系來看,數據元素的直接前驅為0個或1個的數據結構只能是()a線性結構b.樹形結構c.線性結構和樹型結構d.線性結構和圖狀結構

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

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

a.棧和隊列都是線性結構b.棧是線性結構,隊列不是線性結構c.棧不是線性結構,隊列是線性結構d.棧和隊列都不是線性結構16.關于存儲一致數據元素的說法中正確的是()a.順序存儲比鏈式存儲少占空間b.順序存儲比鏈式存儲多占空間

c.順序存儲和鏈式存儲都要求占用整塊存儲空間d.鏈式存儲比順序存儲難于擴展空間

17.已知一個單鏈表中,指針q指向指針p的前趨結點,若在指針q所指結點和指針p所指結點之間插入指針s所指結點,則需執(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.設一組記錄的關鍵字key值為{62,50,14,27,19,35,47,56,83},散列函數為h(key)=keymod13,則它的開散列表中散列地址為1的鏈中的結點個數是()a.1b.2c.3d.419.執(zhí)行下面程序段時,s語句被執(zhí)行的次數為:()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所指結點的時間繁雜度是()a.o(n)b.o(1)c.o(log2n)d.o(n2)21.設一個棧的輸入序列是a,b,c,d,則所得到的輸出序列(輸入過程中允許出棧)不可能出現的是()

a.a,b,c,db.a,b,d,cc.d,c,b,ad.c,d,a,b22.關于串的表達中,正確的是()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.設有二維數組

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的完全二叉樹中,結點數最多為()

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

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

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

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

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

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.數據是計算機加工處理的對象()。2.數據結構的概念包括數據的規(guī)律結構、數據在計算機中的存儲方式和數據的運算三個方面()。

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

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

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

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

11.數據的存儲結構是數據的規(guī)律結構的存儲映象()。

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

13.在非線性結構中,至少存在一個元素不止一個直接前驅或不止一個直接后驅()。14.樹的最大特點是一對多的層次結構()。15.隊列的特點是先進先出()。

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

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

27.數據的規(guī)律結構可以看作是從具體問題抽象出來的數學模型()。

28.線性表的順序存儲方式是按規(guī)律次序將元素存放在一片地址連續(xù)的空間中()。29.棧是一種先進后出的線性表()。

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

三、畫圖題

1.請根據以下二元組畫出相應的數據結構

k={15,11,20,8,14,13}r={15,11,15,20,11,8,11,14,14,13}2.請根據以下二元組畫出相應的數據結構

k={a,b,c,d,e,f,g,h,i,j}r={,,,,,,,,}3.請根據以下二元組畫出相應的數據結構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.請根據以下二元組畫出相應的數據結構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)}

四、運算題

1.已知一個圖的頂點集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),設散列表為ht[0..12],散列函數為h(key)=key%13并用線性探查法解決沖突,請畫出散列表,并計算等概率狀況下查找成功的平均查找長度。

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

3.已知一個圖的頂點集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出發(fā))

____

__,___

_,___

___,__

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

前序:中序:后序:

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

五、編程題

1.請編寫一個算法,實現十進制整數與二進制數的轉換。voidshi_to_er(unsignedx){2.寫出二分法查找的算法:

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

數據結構圖總結篇四

試驗:線性表的基本操作

學習把握線性表的順序存儲結構、鏈式存儲結構的設計與操作。對順序表建立、插入、刪除的基本操作,對單鏈表建立、插入、刪除的基本操作算法。

1.順序表的實踐

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

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

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

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

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

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

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

1.開啟vc++。

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

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

4.寫好代碼

5.編譯->鏈接->調試

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

試驗二:棧的表示與實現及棧的應用

(1)把握棧的順序存儲結構及其基本操作的實現。(2)把握棧后進先出的特點,并利用其特性在解決實際問題中的應用。(3)把握用遞歸算法來解決一些問題。

1.編寫程序,對于輸入的任意一個非負十進制整數,輸出與其等值的八進制數。

2.編寫遞歸程序,實現n!的求解。3.編寫遞歸程序,實現以下函數的求解。

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

4.編寫程序,實現hanoi塔問題。1.開啟vc++。

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

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

4.寫好代碼

5.編譯->鏈接->調試

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

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

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

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

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

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

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

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

4.寫好代碼

5.編譯->鏈接->調試

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

試驗四:查找與排序

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

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

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

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

4.寫好代碼

5.編譯->鏈接->調試

(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(“輸入元素個數和各元素的值:〞);

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

}試驗結果如下所示:

(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(“輸入元素個數和各元素的值:〞);

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);}試驗結果如下所示:

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

數據結構圖總結篇五

一、基本概念

1、數據元素是數據的基本單位。

2、數據項是數據不可分割的最小單位。

3、數據結構的

規(guī)律結構(抽象的,與實現無關)

物理結構(存儲結構)順序映像(順序存儲結構)位置“相鄰〞非順序映像(鏈式存儲結構)指針表示關系

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

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

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

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

5、算法設計的要求:

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

(3)健壯性:輸入非法數據時應能作適當的反應和處理。

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

二、線性表

1、線性表list:最常用且最簡單的數據結構。含有大量記錄的線性表稱為文件。

2、線性表是n個數據元素的有限序列。

線性結構的特點:①“第一個〞②“最終一個〞③前驅④后繼。

3、順序表——線性表的順序存儲結構特點

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

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

4、線性表的鏈式存儲結構1)類型定義

簡而言之,“數據+指針〞

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

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

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

缺點:大小固定;不利于增減節(jié)點;存儲空間不能充分利用;容量難擴展鏈式存儲:優(yōu)點:易于插入刪除;可動態(tài)申請空間;表容量僅受內存空間限制缺點:增加了存儲空間的開銷;不可以隨機存儲元素

三、棧與隊列

1、棧

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

棧是先進后出的線性表。

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

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

3、隊列

先進先出的線性表。隊尾入隊對頭出隊

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

4、鏈隊列

1.樹的定義

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

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

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

結點的度數:結點的非空子樹(即后綴)個數叫作結點的度數

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

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

樹的度數:樹中度數最大的結點度數叫作樹的度數樹林:是由零個或多個不相交的樹所組成的集合。3.二叉樹性質:

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

完全二叉樹:給滿二叉樹的結點編號,從上至下,從左至右,n個結點的完全二叉樹中結點在對應滿二叉樹中的編號正好是從1到n。

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

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

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

7.樹和森林

樹的存儲結構

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

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

五、圖1.

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

有向完全圖:具有n(n-1)條弧的有向圖。權:與圖的邊或弧相關的數。

頂點v的度:和v相關聯的邊的數目。

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

簡單路徑:序列中頂點不重復出現的路徑。

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

·十字鏈表:

十字鏈表是有向圖的另一種鏈式存儲結構??梢钥闯墒菍⒂邢驁D的鄰接表和逆鄰接表結合起來的一種鏈表。在十字鏈表中,對應于有向圖中每一條弧有一個結點,對應于每個頂點有一個結點。

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

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

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

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

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

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

4.生成樹和最小生成樹

每次遍歷一個連通圖將圖的邊分成遍歷所經過的邊和沒有經過的邊兩部分,將遍歷經過的邊同圖的頂點構成一個子圖,該子圖稱為生成樹。因此有dfs生成樹和bfs生成樹。

1)最小生成樹

·kruskal算法

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

-網

用頂點表示活動,邊表示活動的優(yōu)先關系的有向圖稱為aov網。

拓撲排序:對aov網絡中頂點構造拓撲有序序列的過程。拓撲排序的方法(1)在有向圖中選一個沒有前驅的頂點且輸出之(2)從圖中刪除該頂點和所有以它為尾的弧6.關鍵路徑

aoe網,關鍵路徑

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

關鍵路徑:從源點到匯點的最長的一條路徑,或者全部由關鍵活動構成的路徑。7.最短路徑

(1)迪杰斯特拉算法

求一個頂點到其他各頂點的最短路徑。

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

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

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

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

六、查找

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

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

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

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

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

二叉

溫馨提示

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

評論

0/150

提交評論