數(shù)據(jù)結(jié)構(gòu)(C語言)考試重點必背_第1頁
數(shù)據(jù)結(jié)構(gòu)(C語言)考試重點必背_第2頁
數(shù)據(jù)結(jié)構(gòu)(C語言)考試重點必背_第3頁
數(shù)據(jù)結(jié)構(gòu)(C語言)考試重點必背_第4頁
數(shù)據(jù)結(jié)構(gòu)(C語言)考試重點必背_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第一章: 緒論1.1 :數(shù)據(jù)結(jié)構(gòu)課程的任務(wù)是:討論數(shù)據(jù)的各種 邏輯結(jié)構(gòu) 、在計算機中的存儲結(jié)構(gòu)以及 各種操作的算法設(shè)計。1.2:數(shù)據(jù):是客觀描述事物的數(shù)字、字符以及所有的能輸入到計算機中并能被計算機 接收的各種集合的統(tǒng)稱。數(shù)據(jù)元素:表示一個事物的一組數(shù)據(jù)稱作是一個數(shù)據(jù)元素,是數(shù)據(jù)的 基本單位 。 數(shù)據(jù)項 :是數(shù)據(jù)元素中有獨立含義的、不可分割的最小標識單位。數(shù)據(jù)結(jié)構(gòu)概念包含三個方面:數(shù)據(jù)的 邏輯結(jié)構(gòu) 、數(shù)據(jù)的存儲結(jié)構(gòu)的數(shù)據(jù)的操作。1.3 數(shù)據(jù)的 邏輯結(jié)構(gòu) 指數(shù)據(jù)元素之間的邏輯關(guān)系,用一個數(shù)據(jù)元素的集合定義在此集合 上的若干關(guān)系來表示,數(shù)據(jù)結(jié)構(gòu)可以分為三種: 線性結(jié)構(gòu) 、樹結(jié)構(gòu)和圖。1.4 :數(shù)據(jù)

2、元素及其關(guān)系在計算機中的存儲表示稱為數(shù)據(jù)的存儲結(jié)構(gòu),也稱為物理結(jié)構(gòu)。數(shù)據(jù)的存儲結(jié)構(gòu)基本形式有兩種:順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)。2.1 :算法:一個算法是一個有窮規(guī)則的集合,其規(guī)則確定一個解決某一特定類型問 題的操作序列。算法規(guī)則需滿足以下五個特性:輸入 算法有零個或多個輸入數(shù)據(jù)。輸出 算法有一個或多個輸出數(shù)據(jù),與輸入數(shù)據(jù)有某種特定關(guān)系。有窮性 算法必須在執(zhí)行又窮步之后結(jié)束。確定性 算法的每個步驟必須含義明確,無二義性??尚行?算法的每步操作必須是基本的,它們的原則上都能夠精確地進行,用筆和 紙做有窮次就可以完成。有窮性和可行性是算法最重要的兩個特征。2.2 :算法與數(shù)據(jù)結(jié)構(gòu) :算法建立數(shù)據(jù)結(jié)構(gòu)

3、之上,對數(shù)據(jù)結(jié)構(gòu)的操作需用算法來描述。算法設(shè)計依賴數(shù)據(jù)的邏輯結(jié)構(gòu),算法實現(xiàn)依賴數(shù)據(jù)結(jié)構(gòu)的存儲結(jié)構(gòu)。2.3 :算法的設(shè)計應滿足五個目標: 正確性:算法應確切的滿足應用問題的需求,這是算法設(shè)計的基本目標。健壯性:即使輸入數(shù)據(jù)不合適,算法也能做出適當?shù)奶幚恚粫е虏豢煽亟Y(jié)高時間效率:算法的執(zhí)行時間越短,時間效率越高。果。高空間效率:算法執(zhí)行時占用的 存儲空間越少,空間效率越高??勺x性:算法的可讀性有利于人們對算法的理解。2.4 :度量算法的時間效率,時間復雜度,(課本39頁)。2.5 :遞歸定義:即用一個概念本身直接或間接地定義它自己。遞歸定義有兩個條件:至少有一條初始定義是非 遞歸的,如1! =

4、1.由已知函數(shù)值逐步遞推計算出未知函數(shù)值,如用(n-1 )!定義n!。第二章:線性表1.1線性表:線性表是由n(n>=0)個類型相同的數(shù)據(jù)元素 a0,a1,a2,an組成的有限 序列,記作:Li nearList = (a0,a1,a2,-1)a n其中,元素ai可以是整數(shù)、浮點數(shù)、字符、也可以是對象。n是線性表的元素個數(shù),成為線性表長度。若 n=0,則LinearList為空表。若n>0,則a0沒有前驅(qū)元素,an-1 沒有后繼元素,ai (0<i<n-1 )有且僅有一個直接前驅(qū)元素ai-1和一個直接后繼元素ai+1。1.2線性表的順序存儲是用一組連續(xù)的內(nèi)存單元依次存放

5、線性表的數(shù)據(jù)元素,元素在內(nèi)存的物理存儲次序與它們在線性表中的邏輯次序相同。線性表的數(shù)據(jù)元素數(shù)據(jù)同一種 數(shù)據(jù)類型,設(shè)每個元素占用c字節(jié),a0的存儲地址為Loc (a0),貝V ai 的存儲地址 Loc (ai)為:Loc (ai) = Loc (a0) + i*c數(shù)組是順序存儲的隨機存儲結(jié)構(gòu),它占用一組連續(xù)的存儲單元,通過下標識別元素,元素地址是下標的線性函數(shù)。1.3 :順序表的插入和刪除操作要移動數(shù)據(jù)元素。平均移動次數(shù)是屬數(shù)據(jù)表長度的一半。(課本第 50頁)1.4 :線性表的鏈式存儲是用若干地址分散的存儲單元存儲數(shù)據(jù)元素,邏輯上相鄰的數(shù)據(jù)元素在物理位置上不一定相鄰,必須采用附加信息表示數(shù)據(jù)元素

6、之間的順序關(guān)系。它有兩個域組成:數(shù)據(jù)域和地址域。通常成為節(jié)點。(課本第55頁及56頁)1.5單鏈表(課本56頁)單鏈表 的遍歷:Node<E> p = head; while(p!=null)訪問 p 節(jié)點;p = p.next;單鏈表的插入和刪除操作非常簡便,只要改變節(jié)點間的鏈接關(guān)系,不需移動數(shù)據(jù)元 素。單鏈表的插入操作:1):空表插入/頭插入 2)中間插入/尾插入if(head = n ull)Node<E> q = new Node<E>(x); head = new Node<E>(x);q.n ext = p.n ext;elsep.n

7、 ext = q;Node<E> q=new Node<E>(x);中間插入或尾插入都不會改變單表q.n ext = head;的頭指針head歡迎下載12head = q;單鏈表的刪除操作: 頭刪除: head = head .n ext;中間 /尾刪除:if(p.next!=null) p.next = p.next.next;循環(huán)單鏈表:如果單鏈表最后一個節(jié)點的 next鏈保存單鏈表的頭指針head值,則該單鏈表成為環(huán)形結(jié)構(gòu),稱為循環(huán)單鏈表。(課本67)若rear是單鏈表的尾指針,則執(zhí)行(rear.next=head;)語句,使單鏈表成為一條循環(huán) 單鏈表。當hea

8、d.next=head 時,循環(huán)單鏈表為空。1.6 :雙鏈表結(jié)構(gòu):雙鏈表的每個 結(jié)點有兩個鏈域,分別指向它的前驅(qū)和后繼結(jié)點,當head.next=null時,雙鏈表為空設(shè)p指向雙鏈表中非兩端的某個結(jié)點,則成立下列關(guān)系:p=p .n ext.prev=p.prev .next雙鏈表的插入和刪除:1)插入 2)刪除q=new DLinkNode (x);q.prev=p.prev; q.n ext =p;p.prev .n ext = q;p.prev=q;p.prev .n ext = p.n ext;if(p.n ext=nu ll)(p.n ext).prev = p.prev;循環(huán)雙鏈表:

9、當 head.next=head 且head.prev=head 時,循環(huán)雙鏈表為空。第三章:棧和隊列1.1棧:棧是一種特殊的線性表,其中插入和刪除操作只允許在線性表的一端進行。允 許操作的一端稱為棧頂,不允許操作的一端稱為棧底。棧有順序棧和鏈式棧。棧中插入元素的操作稱為入棧,刪除元素的操作稱為出棧。沒有元素的中稱為空棧。棧的進出棧順序:后進先出,先進后出。(及75頁的思考題)。1.2 :隊列:隊列是一種特殊的線性表,其中插入和刪除操作分別在線性表的兩端進 行。向隊列中插入元素的過程稱為入隊,刪除元素的過程稱為出對,允許入隊的一端稱為 隊尾,允許出隊的一端稱為對頭。沒有元素的隊列稱為空隊列。隊

10、列是先進先出。第四章:串1.1 :串是一種特殊的線性表,其特殊性在于線性表中的每個元素是一個字符。一個串 記為:s= “ s0s1s2 -1 ”n其中n>=O,s是串名,一對 雙引號括起來的字符序列 s0s1s2sn是串值,si (i=0 , 1 , 2 , -n-1 )為特定字符集合中的一個字符。一個串 中包含的字符個數(shù)稱為串的長度。長度為0的串稱為空串,記作 “;而由一個或多個空格字符構(gòu)成的字符串稱為空格 串。子串:由串s中任意連續(xù)字符組成的一個子序列sub稱為s的子串,s稱為sub的主串。子串的序號是指該子串的第一個字符在主串中的序號。串比較:兩個串可比較是否相等,也可比較大小。兩

11、個串(子串)相等的充要條件是兩個串(子串)的長度相同,并且各對應位置上的字符也相同。兩個串的大小由對應位置的第一個不同字符的大小決定,字符比較次序是從頭開始依 次向后。當兩個串長度不等而對應位置的字符都相同時,較長的串定義為較大”。第五章:數(shù)組和廣義表1.1 :數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)元素具有相同的數(shù)據(jù)類型。一維數(shù)組的邏輯結(jié)構(gòu)是線性表,多維數(shù)組是線性表的擴展。1.2 :一維數(shù)組:一維數(shù)組采用順序存儲結(jié)構(gòu)。一個一維數(shù)組占用一組連續(xù)的存儲單丿元。設(shè)數(shù)組第一個元素a0的存儲地址為Loc (a0),每個元素占用c字節(jié),則數(shù)組其他元素 ai 的存儲地址 Loc (ai)為: Loc (ai)= Loc

12、(a0)+i*c數(shù)組通過下標識別元素,元素地址是下標的線性函數(shù)。一個下標能夠唯一確定一個元素,所劃給的時間是 0( 1)。因此數(shù)組是隨機存取結(jié)構(gòu),這是數(shù)組最大的優(yōu)點。1.3 :多維數(shù)組的遍歷:有兩種次序:行主序和列主序。行主序:以行為主序,按行遞增訪問數(shù)組元素,訪問完第i行的所有元素之后再訪問第i+1行的元素,同一行上按列遞增訪問數(shù)組元素。aOO,aO1,aO-1), a10,a11,a1(n a(i-1)0,a(m- 1)1,a(r-1)(n-1)2)列主序:以列為主序,按列遞增訪問數(shù)組元素,訪問完第j列的所有元素之后再訪問第j+1列的元素,同一列上按列遞增訪問數(shù)組元素。多維數(shù)組的存儲結(jié)構(gòu):

13、多維數(shù)組也是由多個一維數(shù)組組合而成,組合方式有一下兩 種。靜態(tài)多維數(shù)組的順序存儲結(jié)構(gòu):可按行主序和列主序進行順序存儲。按行主序存儲時,元素 aij的地址為:Loc (aij) = Loc (a00) + (i*n+j ) *c按列主序存儲時,Loc (aij) = Loc (a00) + (j*m+i ) *c動態(tài)多維數(shù)組的存儲結(jié)構(gòu)。二維數(shù)組元素地址就是兩個下標的 線性函數(shù)。無論采用哪種存儲結(jié)構(gòu),多維數(shù)組都 是基于一維數(shù)組的,因此也只能進行賦值、取值兩種存取操作,不能進行插入,刪除 操作。樹是數(shù)據(jù)元素(結(jié)點)之間具有層次關(guān)系的非線性結(jié)構(gòu)。在樹結(jié)構(gòu)中,除根以外的結(jié)點只有一個直接前驅(qū)結(jié)點,可以有零

14、至多個直接后繼結(jié)點。根沒有前驅(qū)結(jié)點。樹是由n (n>=0 )個結(jié)點組成的有限集合(樹 中元素通常稱為結(jié)點)。N=0的樹稱為 空樹;n>0大的樹T;有一個特殊的結(jié)點稱為根結(jié)點,它只有后繼結(jié)點,沒有前驅(qū)結(jié)點。除根結(jié)點之外的其他結(jié)點分為 m (m>=0 )個互不相交的集合 T0,T1,T3.,Tm 1,其中每個集合Ti (0<=i<m )本身又是一棵樹,稱為根的子樹。樹是遞歸定義的。結(jié)點是樹大的 基本單位,若干個結(jié)點組成一棵子樹,若干棵互不相 交的子樹組成一棵樹。樹的每個結(jié)點都是該樹中某一棵子樹的根。因此,樹是由結(jié)點 組成的、結(jié)點之間具有層次關(guān)系大的非線性結(jié)構(gòu)。結(jié)點的前

15、驅(qū)結(jié)點稱為其父母結(jié)點,反之,結(jié)點大的后繼結(jié)點稱為其孩子結(jié)點。一棵樹 中,只有根結(jié)點沒有父母結(jié)點,其他結(jié)點有且僅有一個父母結(jié)點。擁有同一個父母結(jié)點的多個結(jié)點之間稱為兄弟結(jié)點。結(jié)點的祖先是指從根結(jié)點到其父 母結(jié)點所經(jīng)過大的所有結(jié)點。結(jié)點的后代是指該結(jié)點的所有孩子結(jié)點,以及孩子的孩子等。結(jié)點的度是結(jié)點所擁有子樹的棵數(shù)。度為0的結(jié)點稱為葉子結(jié)點,又叫終端結(jié)點;樹中除葉子結(jié)點之外的其他結(jié)點稱為分支結(jié)點,又叫非葉子結(jié)點或非終端結(jié)點。樹的度 是指樹中各結(jié)點度的最大值。結(jié)點的層次屬 性反應結(jié)點處于樹中的層次位置。約定根結(jié)點的層次為1,其他結(jié)點的層次是其父母結(jié)點的層次加1。顯然,兄弟結(jié)點的層次相同。樹的高度或深

16、度是樹中結(jié)點的最大層次樹。設(shè)樹中x結(jié)點是y結(jié)點的父母結(jié)點,有序?qū)?x,y)稱為連接這兩個結(jié)點的分支,也 稱為邊。設(shè)(X0,X1,.-Xk是由樹中結(jié)點組成的一個序列,且(Xi, Xi+1 ) ( 0<=ivk-1 )都是樹中的邊,則該序列稱為從X0到Xk-1的一條路徑。路徑長度為路徑上的邊數(shù)。在樹的定義中,結(jié)點的子樹 T0, T1.,Tm1之間沒有次序,可以交換位置,稱為無 序樹,簡稱樹。如果結(jié)點的子樹 T0,T1,Tm從左到右是有次序的,不能交換位 置,則稱該樹為有序樹。森林是m (m>=0 )棵互不相干的樹的集合。給森林加上一個根結(jié)點就變成一棵樹, 將樹的根節(jié)點刪除就變成森林。二

17、叉樹的性質(zhì)1:若根結(jié)點的層次為1,則二叉樹第i層最多有2的i-1次方(i>=1 ) 個結(jié)點。二叉樹的性質(zhì)2:在高度為k的二叉樹中,最多有 2的k次方減一個結(jié)點。二叉樹的性質(zhì)3:設(shè)一棵二叉樹的葉子結(jié)點數(shù)為n0,2度結(jié)點數(shù)為n2,則n0=n2+1。一棵高度為k的滿二叉樹是具有2的k次方減一個結(jié)點的二叉樹。滿二叉樹中每一層 的結(jié)點數(shù)目都達到最大值。對滿二叉樹的結(jié)點進行連續(xù)編號,約定根節(jié)點的序號為 0,從根節(jié)點開始,自上而下,每層自左至右編號。一棵具有n個結(jié)點高度為k的二叉樹,如果他的每個節(jié)點都與高度為k的滿二叉樹中序號為0n-1的結(jié)點對應,則這棵二叉樹為為完全二叉樹。滿二叉樹是 完全二叉樹,而

18、完全二叉樹 不一定是滿二叉樹。完全二叉樹的第1k-1層是滿二叉樹第k層不滿,并且該層所有結(jié)點必須集中在該層左邊的若干位置上。二叉樹的性質(zhì)4: 一棵具有n個結(jié)點的完全二叉樹,其高度k=log2n的絕對值+1二叉樹的性質(zhì)5: 棵具有n個結(jié)點的完全二叉樹,對序號為i的結(jié)點,有若i=0,則i為根節(jié)點,無父母結(jié)點;若 i>0,則i的父母結(jié)點的序號為(i-1)/2。若2i+1<n,貝V i的左孩子結(jié)點序號為 2i+1 ;否則i無左孩子。若2i+2<n,貝V i的右孩子結(jié)點的序號為 2i+2,否則i無右孩子。二叉樹的遍歷二叉樹的遍歷是按照一定規(guī)則和次序訪問二叉樹中的所有結(jié)點,并且每個結(jié)點僅

19、被訪 問一次。二叉樹的三種次序遍歷1:先根次序;訪問根節(jié)點,遍歷左子樹,遍歷右子樹。2 :中根次序;遍歷左子樹,訪問右子樹,遍歷右子樹。3 :后根次序;遍歷左子樹,遍歷右子樹,訪問根節(jié)點。先根次序遍歷時,最先訪問根節(jié)點;后根次序遍歷時,最后訪問根節(jié)點;中根次序遍 歷時,左子樹上的結(jié)點在根節(jié)點之前訪問,右子樹上的結(jié)點在根節(jié)點之后訪問。二叉樹的插入和刪除操作 P147二叉樹的層次遍歷 P149習題 P1676 10, 619第七章圖是由定點集合及頂點間的關(guān)系集合組成的一種數(shù)據(jù)關(guān)邊系。頂點之間的關(guān)系成為 邊。一個圖G記為G=( V,E), V是頂點A的有限集合,E是邊的有限集合。即 V=A|A屬于某

20、個數(shù)據(jù)元素集合E=(A,B)|A,B 屬于 V或 E=<A,B>|A,B 屬于 V且 Path( A,B)其中 Path(A,B)表示 從頂點A到B的一條單向通路,即 Path( A,B)是有方向的。無向圖中的邊事沒有方向,每條邊用兩個頂點的無序?qū)Ρ硎?。有向圖中的邊是有方向,每條邊用兩個頂點的有序?qū)Ρ硎尽M耆珗D指圖的邊數(shù)達到最大值。n個頂點的完全圖記為 Kn。無向完全圖Kn的邊數(shù)為n* ( n-1)/2,有向完全圖Kn的邊數(shù)為n* ( n-1 )。子圖:設(shè)圖G=(V,E),G' =(V,'若,日'包含于V且E包含于E,則稱圖G是 G的子圖。若G'是G

21、的真子圖。連通圖:在無向圖 G中,若從頂點 VI到Vj有路徑,則稱 Vi和Vj是聯(lián)通的。若圖G中 任意一對頂點Vi和Vj( Vi不等于Vj)都是聯(lián)通的,則稱 G為連通圖。非連通圖的極大 聯(lián)通子圖稱為該圖的聯(lián)通分量。強連通圖:在有向圖中,若在每一對頂點Vi和Vj( Vi不等于Vj)之間都存在一條從 Vi到Vj的路徑,也存在一條從 Vi到Vj的路徑,也存在一條從 Vi到Vj的路徑,則稱該圖 的強連通圖。非強連通圖的極大強連通子圖稱為該圖的強連通圖分量。圖的遍歷遍歷圖是指從圖G中任意一個頂點 V出發(fā),沿著圖中的邊前行,到達并訪問圖中的所 有頂點,且每個頂點僅被訪問一次。遍歷圖要考慮一下三個問題:指定

22、遍歷的第一個訪問頂點由于一個頂點可能與多個頂點相鄰,因此要在多個鄰接頂點之間約定一種訪問次 序。由于圖中可能存在回路,在訪問某個頂點之后,可能沿著某條路徑又回到該頂點。深度優(yōu)先搜索圖的深度優(yōu)先搜索 策略是,訪問某個頂點 v,接著尋找v的另一個未被訪問的鄰接頂點 w訪問,如此反復執(zhí)行,走過一條較長路徑到達最遠頂點;若頂點v沒有未被訪問的其他鄰接頂點,則回到前一個被訪問頂點,再尋找其他訪問路徑。圖的深度優(yōu)先搜索 遍歷算法P188聯(lián)通的無回路的無向圖,簡稱樹。樹中的懸掛點又成為樹葉,其他頂點稱為分支點。各連通分量均為樹的圖稱為森林,樹是森林。由于樹中無回路,因此樹中必定無自身環(huán)也無重邊(否則他有回路

23、)若去掉樹中的任意一條邊,則變成森林,成為非聯(lián)通圖;若給樹加上一條邊,形成圖中的一條回路, 則不是樹。P191生成樹和生成森林:一個連通無向圖的 生成樹是該圖的一個極小聯(lián)通生成子圖,它包含原圖中所有頂點( n 個)以及足以構(gòu)成一棵樹的 n-1條邊。一個非聯(lián)通的無向圖,其各連通圖分量的生成圖組成該圖的生成森林。圖的生成圖或生成森林不是唯一的,從不同頂點開始、采用不同遍歷可以得到不同的 生成樹或森林。在生成樹中,任何樹中,任何兩個頂點之間只有唯一的一條路徑。第八章折半查找算法描述P206,P207二叉排序樹及其查找:二叉排序樹或者是一棵空樹;或者是具有下列性質(zhì)的二叉樹:每個結(jié)點都有一個作為查找依據(jù)的關(guān)鍵字,所有結(jié)點的關(guān)鍵字互不相同。若一個結(jié)點的左子樹不空,則左子樹上所有結(jié)點的關(guān)鍵字均小于這個節(jié)點的關(guān)鍵字;每個結(jié)點的左右子樹也

溫馨提示

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

最新文檔

評論

0/150

提交評論