版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版第1章緒論 內(nèi)容綱要: 數(shù)據(jù)構(gòu)造研究的內(nèi)容。針對(duì)非數(shù)值計(jì)算的程序設(shè)計(jì)問題, 數(shù)據(jù)構(gòu)造涵蓋的內(nèi)容:研究計(jì)算機(jī)的操作對(duì)象以及它們之間的關(guān)系和操作線性解fY筏聚、找.隊(duì)、串、麟組)非線性給構(gòu)輛結(jié)構(gòu)圖結(jié)構(gòu)順存結(jié)構(gòu) 誠(chéng)式結(jié)構(gòu) 家索結(jié)構(gòu) 能列緒檢刪除運(yùn)算 悸改運(yùn)算 春找運(yùn)靜 排序達(dá)身根本看法:數(shù)據(jù)、數(shù)據(jù)元素、數(shù)據(jù)對(duì)象、數(shù)據(jù)構(gòu)造、數(shù)據(jù)種類、抽象數(shù)據(jù)種類 數(shù)據(jù),全部能被計(jì)算機(jī)鑒別、儲(chǔ)藏和辦理的符號(hào)的會(huì)集。數(shù)據(jù)元素 一一是數(shù)據(jù)的根本單位,擁有完滿確定的實(shí)質(zhì)意義。數(shù)據(jù)對(duì)象 擁有相同性質(zhì)的數(shù)據(jù)元素的會(huì)集,是數(shù)據(jù)的一個(gè)子集。數(shù)據(jù)構(gòu)造 是相互之間存在一種或多種特定關(guān)系的數(shù)
2、據(jù)元素的會(huì)集,表示為: Data_Structure= D, R數(shù)據(jù)種類一一是一個(gè)值的會(huì)集和定義在該值上的一組操作的總稱。抽象數(shù)據(jù)種類-一由用戶定義的一個(gè)數(shù)學(xué)模型與定義在該模型上的一組操作, 它由根本的數(shù)據(jù)種類組成。算法的定義及五個(gè)特點(diǎn)。算法是對(duì)特定問題求解步驟的一種描述,它是指令的有限序列,是一系列輸入變換為輸出的計(jì)算步驟。算法的根本特點(diǎn) :輸入、輸出、有窮性、確定性、可行性算法設(shè)計(jì)要求。正確性、可讀性、強(qiáng)壯性、效率與低儲(chǔ)藏量需求算法解析。時(shí)間復(fù)雜度、空間復(fù)雜度、牢固性 學(xué)習(xí)要點(diǎn):數(shù)據(jù)構(gòu)造的“三要素:邏輯構(gòu)造、物理儲(chǔ)藏構(gòu)造 及在 這種構(gòu)造上所定義的操作運(yùn)用計(jì)算語(yǔ)句頻度來估計(jì)算法的時(shí)間復(fù)雜度。
3、(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版第二章線性表內(nèi)容綱要:線性表的邏輯構(gòu)造定義,對(duì)線性表定義的操作。線性表的定義:用數(shù)據(jù)元素的有限序列表示is毓發(fā)夕我的Gw:是承器,上M號(hào)薪元素口印時(shí)稱為一日氏聲表中面粒盤:J線性表的儲(chǔ)藏構(gòu)造:次序儲(chǔ)藏構(gòu)造和鏈?zhǔn)絻?chǔ)藏構(gòu)造。次序儲(chǔ)藏定義:把邏輯上相鄰 的數(shù)據(jù)元素儲(chǔ)藏在物理上相鄰的儲(chǔ)藏單元中的儲(chǔ)藏構(gòu)造。不用然相鏈?zhǔn)絻?chǔ)藏構(gòu)造:其結(jié)點(diǎn)在儲(chǔ)藏器中的地址是隨意的,即邏輯上 相鄰的數(shù)據(jù)元素在物理上鄰。經(jīng)過指針來實(shí)現(xiàn)!線性表的操作在兩種儲(chǔ)藏構(gòu)造中的實(shí)現(xiàn)。數(shù)據(jù)構(gòu)造的根本運(yùn)算:更正、插入、刪除、查找、排序1)更正一一經(jīng)過數(shù)組的下標(biāo)即可接見某個(gè)特定元素弁更正之。二核心語(yǔ)
4、句:Vi=x;次序表更正操作的時(shí)間效率是0(1)2)插入一一在線性表的第i個(gè)地址前插入一個(gè)元素實(shí)現(xiàn)步驟:將第n至第i位的元素向后搬動(dòng)一個(gè)地址;將要插入的元素寫到第i個(gè)地址;表長(zhǎng)加1。注意:早先應(yīng)判斷:插入地址i可否合法?表可否已滿?應(yīng)當(dāng)吻合條件:1 & i =i; j-) aj+1=a j ;a i =x;n+;插,人時(shí)的平均搬動(dòng)次數(shù)為:n(n+1)/2 +n+1= n/2 -O(n)3)刪除一一刪除線性表的第i個(gè)地址上的元素實(shí)現(xiàn)步驟:將第i+1至第n位的元素向前搬動(dòng)一個(gè)地址;表長(zhǎng)減1。注意:早先需要判斷,刪除地址 i可否合法?應(yīng)當(dāng)吻合條件:1W i n或 i=1, n核心語(yǔ)句:for ( j
5、=i+1; j=n; j+ ) aj-1=aj;n-;(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版序表除一元素的效率:Tn)=(n-1)/2=O(n)序表插入、除算法的平均空 復(fù)度0(1)表:1用表構(gòu)來存放26個(gè)英文字母 成的性表 a, b, c, ?,z,寫出 C言程序#include#include typedef struct node char data;struct node *next;node;node *p,*q,*head;int n ;int m=sizeof(node);void build()/ 一般需要3個(gè)指量/數(shù)據(jù)元素的個(gè)數(shù)/*構(gòu)型定好此后,每個(gè)m求一次即可 *
6、/字母 表的生成。要一個(gè)個(gè)慢慢node型的度就固定了,入int i;head=(node*)malloc(m);p=head;for( i=1; idata=i+ ,a,-1; p-next=(node*)malloc(m);p=p-next ; p-data=i+ a -1;p-next=NULL ;void display()/ 字母 表的/m=sizeof(node)前面已求出因尾點(diǎn)要特別理,故i #26/第一個(gè)點(diǎn)字符a/后點(diǎn)”挖坑!指量 P指向后一個(gè)點(diǎn)最后一個(gè)元素要獨(dú)理/表尾點(diǎn)的指域要置空!p=head;while (p)/當(dāng)指 不空循限于無 點(diǎn)的情況printf(%c,p-data)
7、;p=p-next;指 不斷“藤摸瓜(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版2單鏈表的更正(或讀取思路:要更正第i個(gè)數(shù)據(jù)元素,必定重新指針起素來找到該結(jié)點(diǎn)的指針p,爾后才能:pdata=new_value讀取第i個(gè)數(shù)據(jù)元素的核心語(yǔ)句是:Linklist *find(Linklist *head ,int i) (intj=1;Linklist *p;P=head-next;While(p!=NULL)&(jnext;j+; return p; 3.單鏈表的插入T結(jié)點(diǎn)的生成承第S= (fiode*) ma I loc Gw);S-Xala=才;S-next-p-next鏈表插入的核心語(yǔ)句
8、:Step 1 : s-next=p-next;Step 2 : p-next=s ;6.單鏈表的刪除一 r-富 ,乎 next;/第一保存b的指針,靠它才能找到c;p-next=q-next; 將a、c兩結(jié)點(diǎn)相連,裁汰 b結(jié)點(diǎn);free(q);完整釋放 b結(jié)點(diǎn)空間7.雙向鏈表的插入操作:設(shè)p已指向第i元素,請(qǐng)?jiān)诘?i元素前插入元素x:ai-1的后繼從ai (指針是p)變?yōu)閤指針是s): s-next = p ; p-prior-next = s ;ai的前驅(qū)從ai-1 (指針是p-prior)變?yōu)閤 (指針是s); s-prior =p -prior ; p-prior = s ;(完滿wo
9、rd版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版8.雙向鏈表的刪除操作:p -next );設(shè)p指向第i個(gè)元素,刪除第 i個(gè)元素后繼方向:ai-1的后繼由ai (指針p)變?yōu)?ai+1(指針p -prior-next = p-next ;前驅(qū)方向:ai+1的前驅(qū)由ai (指針p)變?yōu)閍i-1 (指針 p - prior );p-next-prior = p -prior ;數(shù)組的邏輯構(gòu)造定義及儲(chǔ)藏?cái)?shù)組:由一組名字相同、下標(biāo)不相同的變量組成N維數(shù)組的特點(diǎn):n個(gè)下標(biāo),每個(gè)元素碰到n個(gè)關(guān)系拘束一個(gè)n維數(shù)組能夠看作是由假設(shè)干個(gè)n- 1維數(shù)組 組成的線性表。儲(chǔ)藏:早先約定按某種次序?qū)?shù)組元素排成一列序列,爾后將這
10、個(gè)線性序列存入儲(chǔ)藏器中在二維數(shù)組中,我們既能夠規(guī)定按行儲(chǔ)藏,也能夠規(guī)定按列儲(chǔ)藏。設(shè)一mn-般的二維數(shù)組是 Ac1.d1, c2.d2,那么行優(yōu)先儲(chǔ)藏時(shí)的地址公式為:LOC尸LOC(F )+(白尸稀罕矩陣含特別矩陣的儲(chǔ)藏及運(yùn)算。稀罕矩陣:矩陣中非零元素的個(gè)數(shù)較少一般小于5%學(xué)習(xí)要點(diǎn): 線性表的邏輯構(gòu)造,指線性表的數(shù)據(jù)元素間存在著線性關(guān)系。在次序儲(chǔ)藏構(gòu)造中,元素儲(chǔ)藏的 先后地址 反響出這種線性關(guān)系,而在鏈?zhǔn)絻?chǔ)藏構(gòu)造中,是靠指針來反響這種關(guān)系的。次序儲(chǔ)藏構(gòu)造用一維數(shù)組表示,給定下標(biāo),能夠存取相應(yīng)元素,屬于 構(gòu)。隨機(jī)存取的儲(chǔ)藏結(jié)鏈表操作中應(yīng)注意不要使鏈不測(cè)“斷開F以,假設(shè)在某結(jié)點(diǎn)前插入一個(gè)元素,或刪除
11、某元素,必定知道該元素的前驅(qū)結(jié)點(diǎn)的指針。 掌握經(jīng)過畫出結(jié)點(diǎn)圖來進(jìn)行鏈表單鏈表、循環(huán)鏈表等的生成、插入、刪除、遍歷 等操作。 數(shù)組主若是二維在以 行序/列序 為主的儲(chǔ)藏中的地址計(jì)算方法。稀罕矩陣的三元組表儲(chǔ)藏構(gòu)造。稀罕矩陣的十字鏈表儲(chǔ)藏方法。(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版補(bǔ)充要點(diǎn):.每個(gè)儲(chǔ)藏結(jié)點(diǎn)都包括兩局部:數(shù)據(jù)域和指針域(鏈域)其直接前驅(qū)結(jié)點(diǎn)的鏈域的值指示該結(jié)點(diǎn)的數(shù)據(jù)域能夠?yàn)榭?,也可存?能夠?qū)毡怼⒎强毡淼那闆r以及對(duì)首.在單鏈表中, 除了首元結(jié)點(diǎn)外,任一結(jié)點(diǎn)的儲(chǔ)藏地址由.在鏈表中設(shè)置頭結(jié)點(diǎn)有什么好處?頭結(jié)點(diǎn)即在鏈表的首元結(jié)點(diǎn)從前附設(shè)的一個(gè)結(jié)點(diǎn),表長(zhǎng)度 等附加信息, 其作用是
12、為了對(duì)鏈表進(jìn)行操作時(shí), 元結(jié)點(diǎn)進(jìn)行一致辦理,編程更方便。.怎樣表示空表?(1無頭結(jié)點(diǎn)時(shí),當(dāng)頭指針的值為空時(shí)表示空表;(2有頭結(jié)點(diǎn)時(shí),當(dāng)頭結(jié)點(diǎn)的指針域?yàn)榭諘r(shí)表示空表。.鏈表的數(shù)據(jù)元素有兩個(gè)域,不再是簡(jiǎn)單數(shù)據(jù)種類,編程時(shí)該怎樣表示?因每個(gè)結(jié)點(diǎn)最少有兩個(gè)重量,且數(shù)據(jù)種類平時(shí)不一致,所以要采用構(gòu)造數(shù)據(jù)種類。.sizeof(x)計(jì)算變量 x的長(zhǎng)度字節(jié)數(shù) ;malloc(m) 一開辟m字節(jié)長(zhǎng)度的地址空間,弁返回這段空間的首地址;free(p)釋放指針p所指變量的儲(chǔ)藏空間,即完整刪除一個(gè)變量。7.鏈表的運(yùn)算效率解析: 1查找因線性鏈表只能次序存取,即在查找時(shí)要重新指針找起,查找的時(shí)間復(fù)雜度為O(n)。2插入
13、和刪除因線性鏈表不需要搬動(dòng)元素,只要更正指針,一般情況下時(shí)間復(fù)雜度為O(1)。但是,若是要在單鏈表中進(jìn)行前插或刪除操作,由于要重新查找前驅(qū)結(jié)點(diǎn),所耗時(shí)間復(fù)雜度將是 O(n)。例:在n個(gè)結(jié)點(diǎn)的單鏈表中要?jiǎng)h除結(jié)點(diǎn)*P ,需找到它的 前驅(qū)結(jié)點(diǎn)的地址,其時(shí)間復(fù)雜度為 O n.次序儲(chǔ)藏和鏈?zhǔn)絻?chǔ)藏的差異和優(yōu)缺點(diǎn)?次序儲(chǔ)藏時(shí), 邏輯上相鄰的數(shù)據(jù)元素,其物理存放地址也相鄰。次序儲(chǔ)藏的優(yōu)點(diǎn)是儲(chǔ)藏密度大,儲(chǔ)藏空間利用率高;缺點(diǎn)是插入或刪除元素時(shí)不方便。鏈?zhǔn)絻?chǔ)藏時(shí), 相鄰數(shù)據(jù)元素可隨意存放,但所占儲(chǔ)藏空間分兩局部,一局部存放結(jié)點(diǎn)值,另一局部存放表示結(jié)點(diǎn)間關(guān)系的指針。鏈?zhǔn)絻?chǔ)藏的優(yōu)點(diǎn)是插入或刪除元素時(shí)很方便,使用靈便。
14、缺點(diǎn)是儲(chǔ)藏密度小,儲(chǔ)藏空間利用率低。次序表合適于做查找這樣的靜態(tài)操作;鏈表官于做插入、刪除這樣的動(dòng)向操作。假設(shè)線性表的長(zhǎng)度變化不大,且其主要操作是查找,那么采用次序表;假設(shè)線性表的長(zhǎng)度變化較大,且其主要操作是插入、刪除操作,那么采用鏈表。.判斷:“數(shù)組的辦理比其他復(fù)雜的構(gòu)造要簡(jiǎn)單,對(duì)嗎?:對(duì)的。由于一一數(shù)組中各元素?fù)碛幸恢碌姆N類;二 數(shù)組元素的下標(biāo)一般擁有 固定的上界和下界數(shù)組一旦被定義,它的維數(shù)和維界就不再 改變。數(shù)組的,根本操作比較簡(jiǎn) 單,除了結(jié)構(gòu)的初始化和銷毀之外,只有存取元素和更正元素值的操作。.三元素組表中的每個(gè)結(jié)點(diǎn)對(duì)應(yīng)于稀罕矩陣的一個(gè)非零元素,它包括有三個(gè)數(shù)據(jù)項(xiàng),分別 表示該元素的
15、行下標(biāo)、列下標(biāo)和元素花-一(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版.寫出右所示稀罕矩的存形式。解:介 3種存形式。法1 :用性表表示:12 9(1,2,12) , (1,3,9) , (3,1,-3) , (3,5,14),(4,3,24) , (5,2,18) ,(6,1,15) , (6,4,-7)法2:用十字表表示用途:方便稀罕矩的加減運(yùn)算法3:用二兀矩表7K:方法:每個(gè)非 0元素占用5個(gè)域value11Tl 14 13B 31T 3514土4324E521076115M 64,7稀罕矩存的缺點(diǎn):將失去隨機(jī)存取功能代:1.用數(shù)V來存放26個(gè)英文字母 成的性表a, b, c, ?,
16、z,寫出在序構(gòu)上生成和 示表的C言程 序。char V30;void build()字母線性表的生成,即建表操作int i;V0=a;for( i=1;i=n-1;i+ )Vi=Vi-1+1;void display( ) /字母線性表的顯示,即讀表操作int i;for( i=0;iM)上溢else stop+=e;次序棧出棧函數(shù)POP()status Pop( ) if(top=L) 下溢 else e=s-top;return(e);(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版 行列的定義及操作,行列的刪除在一端隊(duì)尾,而插入那么在行列的另一端隊(duì)頭。因此在兩種儲(chǔ)藏構(gòu)造中,都需要隊(duì)頭和隊(duì)
17、尾兩個(gè)指針。行列:只幸虧表的一端進(jìn)行插入運(yùn)算,在表的另一端進(jìn)行刪除運(yùn)算的線性表。鏈行列結(jié)點(diǎn)種類定義:typedef Struct QNodeQElemTypedata; / 兀素Struct QNode *next; 指向下一結(jié)點(diǎn)的指針Qnode , * QueuePtr ;鏈行列種類定義:typedef struct QueuePtrfront ; / 隊(duì)首指針QueuePtrrear ; / 隊(duì)尾指針 LinkQueue;鏈隊(duì)表示圖:空鏈隊(duì)的特點(diǎn):front=rear鏈隊(duì)會(huì)滿嗎? 一般不會(huì),由于刪除時(shí)有入隊(duì)尾部插入 :rear-next=S; rear=S;出隊(duì)頭部刪除 :front-ne
18、xt=p-next;2.次序隊(duì)次序隊(duì)種類定義:free動(dòng)作。除非內(nèi)存缺少!#define QUEUE-MAXSIZE 100/ 最大行歹 U 長(zhǎng)度typedef struct QElemType *base;行歹U 的基址intfront;隊(duì)首指針intrear;/隊(duì)尾指針g號(hào)銀植出!隊(duì)列,先涌嗎F團(tuán)在樣比現(xiàn)人眄村出隊(duì)忡d(B空隊(duì)列的特征? |匐定:Irnittn*;uSqQueue建隊(duì)核心語(yǔ)句:q . base=(QElemType *)malloc(sizeof (QElemType* QUEUE_MAXSIZE;/ 分配空間 次序隊(duì)表示圖:出凱匕七部刪除”川 L f Qf!JDt|:(完
19、滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版循環(huán)行列:隊(duì)空條件 :front = rear(初始化時(shí):front = rear )隊(duì)滿條件:front = (rear+1) % N(N=maxsize)行列長(zhǎng)度即數(shù)據(jù)元素個(gè)數(shù):L= N + rear frontN1初始化一個(gè)空行列Status InitQueue ( SqQueue &q ) / 初始化空循環(huán)行列q(q . base=(QElemType *)malloc(sizeof(QElemType * QUEUE_MAXSIZE);/ 分配空間if (!q.base) exit(OVERFLOW);/ 內(nèi)存分配失敗,退出程序q.fron
20、t =q.rear=0; / 置空行歹 U return OK; /InitQueue;2入隊(duì)操作Status EnQueue(SqQueue &q, QElemType e)/向循環(huán)行列q的隊(duì)尾參加一個(gè)元素eif ( (q.rear+1) % QUEUE_MAXSIZE = = q.front ) return ERROR ; /隊(duì)滿那么上溢,無法再入隊(duì)q.rear = ( q . rear + 1 ) % QUEUE_MAXSIZE;q.base q.rear = e; / 新元素 e 入隊(duì)return OK;/ EnQueue;3出隊(duì)操作Status DeQueue ( SqQueue
21、&q, QElemType &e) /假設(shè)行列不空,刪除循環(huán)行列 q的隊(duì)頭元素,由e返回其值,并返回 OKif ( q.front = = q.rear ) return ERROR;/ 行列空q.front=(q.front+1) % QUEUE_MAXSIZE ;e = q.base q.front ;return OK;/ DeQueue1等于隊(duì)頭鏈行列空的條件是首尾指針相等,而循環(huán)行列滿的條件的判斷,那么有隊(duì)尾 加和設(shè)標(biāo)志兩種方法。(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版補(bǔ)充要點(diǎn):.為什么要設(shè)計(jì)貨倉(cāng)?它有什么獨(dú)到用途?調(diào)用函數(shù)或子程序非它莫屬;遞歸運(yùn)算的有力工具;用于保護(hù)現(xiàn)場(chǎng)和
22、恢復(fù)現(xiàn)場(chǎng);簡(jiǎn)化了程序設(shè)計(jì)的問題。.為什么要設(shè)計(jì)行列?它有什么獨(dú)到用途?失散事件的模擬模擬事件發(fā)生的先后次序,比方 CPU芯片中的指令譯碼行列操作系統(tǒng)中的作業(yè)調(diào)換一個(gè)CPU執(zhí)行多個(gè)作業(yè);簡(jiǎn)化程序設(shè)計(jì)。.什么叫“假溢出?怎樣解決?答:在次序隊(duì)中,當(dāng)尾指針已經(jīng)到了數(shù)組的上界,不能夠再有入隊(duì)操作, 但其實(shí)數(shù)組中還有空地址,這就叫“假溢出-解決假溢出的路子采用循環(huán)行列。.在一個(gè)循環(huán)行列中,假設(shè)約定隊(duì)首指針指向隊(duì)首元素的前一個(gè)地址。那么,從循環(huán)行列中刪除一個(gè)元素時(shí),其操作是先搬動(dòng)隊(duì)首地址,后 取出元素。.線性表、棧、隊(duì)的異同點(diǎn):相同點(diǎn):邏輯構(gòu)造相同,都是線性的;都能夠用次序儲(chǔ)藏或鏈表儲(chǔ)藏;棧和行列是兩種特
23、別的線性表,即受限的線性表可是對(duì)插入、刪除運(yùn)算加以限制。不相同點(diǎn): 運(yùn)算規(guī)那么不相同:線性表為隨機(jī)存??;而棧是只贊同在一端進(jìn)行插入和刪除運(yùn)算,所以是后進(jìn)先出表LIFO ;行列是只贊同在一端進(jìn)行插入、另一端進(jìn)行刪除運(yùn)算,所以是先進(jìn)先出表FIFO o用途不相同,線性表比較通用;貨倉(cāng)用于函數(shù)調(diào)用、遞歸和簡(jiǎn)化設(shè)計(jì)等;行列用于失散 事件模擬、OS作業(yè)調(diào)換和簡(jiǎn)化設(shè)計(jì)等。(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版第四章串內(nèi)容綱要:串是數(shù)據(jù)元素為字符的線性表,串的定義及操作。串即字符串,是由零個(gè)或多個(gè)字符組成的有限序列,是數(shù)據(jù)元素為單個(gè)字符的特別線性表。串 比較:int strcmp(char *s1,
24、char *s2);求串長(zhǎng):int strlen(char *s);串聯(lián)接: char strcat(char *to,char *from)子串 T 定位: char strchr(char *s,char *c);串的儲(chǔ)藏構(gòu)造,因串是數(shù)據(jù)元素為字符的線性表,所以存在“結(jié)點(diǎn)大小的問題。模式般配算法 。串有三種機(jī)內(nèi)表示方法:J癲一空地址連續(xù)的存儲(chǔ)單元存儲(chǔ)串45的字 特庫(kù)科以昨志存喊叫一能式存儲(chǔ)南一期地址設(shè)續(xù)的存礴單元存儲(chǔ)串值的字 符序列I但在儲(chǔ)空間是在所執(zhí)行過程中動(dòng)宓的塊鼠存儲(chǔ)表示-方式存儲(chǔ)模式般配算法 :算法目的:確定主串中所含子串第一次出現(xiàn)的地址定位定位問題稱為串的模式般配,典型函數(shù)為In
25、dex(S,T,pos)BF算法的實(shí)現(xiàn)一即編寫Index(S, T, pos)函數(shù)BF算法設(shè)計(jì)思想:將主串S的第pos個(gè)字符和模式T的第1個(gè)字符比較,假設(shè)相等,連續(xù)逐個(gè)比較后續(xù)字符;假設(shè)不等,從主串S的下一字符pos+1起,重新與T第一個(gè)字符比較。直到主串S的一個(gè)連續(xù)子串字符序列與模式T相等。返回值為 S中與T般配的子序列第一個(gè)字符的序號(hào),即般配成功。否那么,般配失敗,返回值 0。Int Index_BP(SString S, SString T, int pos) /返回子串 T在主串S中第pos個(gè)字符此后的地址。假設(shè)不存在,那么函數(shù)值為0.其中,T 非空, K pos w StrLengt
26、h(S)i=pos;j=1;while ( i=S0 & jT0) return i-T0; /T 子串指針j正常到尾,說明般配成功,else return 0; /否那么屬于iS0情況,i先到尾就不正常 /Index_BP(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版補(bǔ)充要點(diǎn):.空串和空白串有無差異?答:有差異??沾∟ull String)是指長(zhǎng)度為零的串;而空白串(Blank String),是指包括一個(gè)或多個(gè)空白字符(空格鍵)的字符串.“空串是隨意串的子串;隨意串 S都是S自己的子串,除 S自己外,S的其他子串稱為S的真子串。,送例自構(gòu)s =* aia?.u*3h/j定長(zhǎng)廝序存精結(jié)構(gòu)
27、 串存儲(chǔ)黯構(gòu)堆存儲(chǔ)結(jié)構(gòu)I塊逋存儲(chǔ)晶構(gòu)操作(或運(yùn)力)老十函數(shù)的實(shí)現(xiàn)1 裝式摩颼威:模式四忻即予串定位延算即如何丈現(xiàn)1曲加武氏丁亦必)函數(shù)(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版第六章和二叉內(nèi)容綱要:是復(fù)的非性數(shù)據(jù)構(gòu),二叉的定,根本看法,。:由一個(gè)或多個(gè)(n 0)點(diǎn)成的有限會(huì)集T ,有且有一個(gè) 點(diǎn)稱 根root,*1 ,其他的點(diǎn)分m(m )0)個(gè)互不訂交的有限會(huì)集T1,T2 , ?, Tm。每個(gè)會(huì)集自己又是棵,被稱作個(gè)根的子。二叉:是nn冷個(gè)點(diǎn)的有限會(huì)集,由一個(gè)根 點(diǎn)以及兩棵互不 訂交的、分稱左子 和右子 的二叉成。P88二叉的性,存構(gòu)。1:在二叉的第 i上至多有2:深度k的二叉至多有2i
28、-1個(gè)點(diǎn)i02k-1 個(gè)點(diǎn)k0性3:于任何一棵二叉,假設(shè) 2度的點(diǎn)數(shù)有性4:擁有n個(gè)點(diǎn)的完滿二叉的深度必性5:完滿二叉,假設(shè)從上至下、從左至右號(hào),號(hào)2i ,其右孩子 號(hào)2i + 1 ;其雙的號(hào)必二叉的存構(gòu):一、序存構(gòu)n2個(gè),葉子數(shù) n0必然 n2+ 1i的點(diǎn),其左孩子號(hào)必i/2= 1根,除外。按二叉的點(diǎn)“自上而下、從左至右號(hào),用一的存元存。假設(shè)是完滿/二叉 能夠做到唯一復(fù)原。不是完滿二叉:一律完滿二叉!方法很,將各空缺上“虛點(diǎn),其內(nèi)容空缺點(diǎn):浪空;插入、除不便二、式存構(gòu)用二叉表即可方便表示。一般從根點(diǎn)開始存。IrH jhild ilja tkl t也皿點(diǎn):不浪空;插入、除方便 二叉的遍。指依照
29、某種次序 二叉的全部點(diǎn),而且每個(gè)點(diǎn)遍二叉由根、左子、右子組成,定假設(shè)限制先左后右,有三種 方案:一次,獲取一個(gè)性序列。D、L、RDLR先序遍L(zhǎng)DR中序遍L(zhǎng)RD后序遍(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版 樹的儲(chǔ)藏構(gòu)造,樹、森林的遍歷及和二叉樹的相互變換。M域小期如何轉(zhuǎn)上每時(shí)? 3一方法:加線工醺匚旋轉(zhuǎn)回憶2:二叉樹怎樣復(fù)原為樹?要點(diǎn):逆操作,把全部右孩子變?yōu)樾值?!談?wù)? :森林怎樣轉(zhuǎn)為二叉樹?法一: 各森林先各自轉(zhuǎn)為二叉樹;依次連到前一個(gè)二叉樹的右子樹上法二:森林直接變兄弟,再轉(zhuǎn)為二叉樹談?wù)?:二叉樹怎樣復(fù)原為森林?要點(diǎn):把最右邊的子樹變?yōu)樯?,其他右子樹變?yōu)樾值軜浜蜕值膬?chǔ)藏方式:
30、樹有三種常用儲(chǔ)藏方式:雙親表示法孩子表示法孩子一兄弟表示法問:樹一二叉樹的“連線一抹線一旋轉(zhuǎn)怎樣由計(jì)算機(jī)自動(dòng)實(shí)現(xiàn)?答:用“左孩子右兄弟表示法來儲(chǔ)藏即可。firstchilncxt5iblin樹、森林的遍歷:.,一 l J渾省猿外洎用1芥松.后根 博 I廣度優(yōu)先法歷長(zhǎng)層次! 儲(chǔ)藏的過程就是樹變換為二叉樹的過程!沒有中序*歷(W王黑不分左右) 先根遍歷:接見根結(jié)點(diǎn);依次先根遍歷根結(jié)點(diǎn)的每棵子樹。 后根遍歷:依次后根遍歷根結(jié)點(diǎn)的每棵子樹;接見根結(jié)點(diǎn)。談?wù)摚簶浼僭O(shè)采用“先變換,后遍歷方式,結(jié)果可否相同?.樹的先根遍歷與二叉樹的先序遍歷相同;.樹的后根遍歷相當(dāng)于二叉樹的中序遍歷;.樹沒有中序遍歷,由于子
31、樹無左右之分。森林的遍歷先序遍歷假設(shè)森林為空,返回;接見森林中第一棵樹的根結(jié)點(diǎn);先根遍歷第一棵樹的根結(jié)點(diǎn)的子樹森林;先根遍歷除去第一棵樹此后節(jié)余的樹組成的森林中序遍歷假設(shè)森林為空,返回;申根遍歷森林中第一棵樹的根結(jié)點(diǎn)的子樹森林;接見第一棵樹的根結(jié)點(diǎn);申根遍歷除去第一棵樹此后節(jié)余的樹組成的森林(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版二叉的用:哈夫曼和哈夫曼。Huffman :最二叉路徑度最短的Huffman :不等。呼Z -2電人;的 路徑度:I中全部葉子 點(diǎn)的 路徑 度之和構(gòu)造Huffman的根本思想:大的 點(diǎn)用短路徑, 小的 點(diǎn)用 路徑。構(gòu)造Huffman 的步 即 Huffman算
32、法:(1)由定的n個(gè) w1, w2, ?, wn 組成n棵二叉 的會(huì)集 F = T1, T2,? , Tn 即森林,其中每棵二叉Ti中只有一個(gè)wi的根 點(diǎn),其左右子 均空。(2)在F中取兩棵根點(diǎn) 最小的做左右子構(gòu)造一棵新的二叉,且新二叉根點(diǎn)的 等于其左右子 的根 點(diǎn) 之和。(3)在F中去兩棵,同將新獲取的二叉參加F中。(4)重復(fù)(2)和,直到F只含一棵 止??眉词荋uffman 。詳盡操作步:sgj正 對(duì)咄進(jìn)行合您除與替換 一葡胸儺既黑著礫耳最仔弁題明|赫痔愫再初始配合并(何 cL合并7)四步Fa(7)5Hi!H4 FilTHin F: (J|jSIS Hffl b,甜明的F用由扁加金,飛卜
33、a1rg Jna演 碼11:鈍血data: 找成功,return Kdata :q=p ; p=p-L_child / 向左搜 尋K p-data :q=p ;p=p-R_child /向右搜尋 /找不行功插入到二叉排序中s =(BiTree)malloc(sizeof(BiTNode);s-data=K; s -L_child=NULL; s -R_child=NULL;找不行功,生成一個(gè)新 點(diǎn) s,插入到二叉排序 葉子case t=NULL :t=s; /假設(shè)t空,插入的 點(diǎn) s作根點(diǎn)K data: q-L_child=s;/ 假設(shè) K 比葉子小,掛左K q-data: q-R_child
34、=s; /假設(shè) K 比葉子大,掛右return OK 二叉排序的除操作怎樣?分表示*P的左、右孩子指;的左 孩子;可能有三種情況:怎樣除一個(gè)點(diǎn)?假:*p表示被點(diǎn)的指;PL和PR*f表示*p的雙點(diǎn)指;弁彳般*p是*f如為崎已 涉朦此S6懸才儂1事說*門觸城值的f*扁有兩報(bào)事何&小說里夏用*p有兩棵子,怎樣行除操作?除前的中序遍序列:?. PL s p PR f然p的直接前是s , s是*p左子最右下方的點(diǎn) 希望除p后,其他元素的相 地址不。有兩種解決方法:*s的右子; 即fL=PL法1:令*p的左子*f 的左子,*p的右子接SR=PR ;法2:直接令*s代替*p / *s *p左子最右下方的 點(diǎn)
35、(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版二叉排序樹的2(1 + tin a 平衡二叉樹的定義:又稱AVL樹,即它或許是一顆空樹,或許是它的左子樹和右子樹都是平衡二叉樹,且左子樹與右子樹的深度之差的絕對(duì)值不高出1。平衡因子:一一該結(jié)點(diǎn)的左子樹的深度減去它的右子樹的深度。平衡二叉樹的特點(diǎn):任一結(jié)點(diǎn)的平衡因子只能?。?1、0或1。若是在一棵AVL樹中插入一個(gè)新結(jié)點(diǎn),就有可能造成失衡,此時(shí)必定重新調(diào)整樹的構(gòu)造,使之恢復(fù)平衡。我們稱調(diào)整平衡過程為平衡旋轉(zhuǎn)。平衡旋轉(zhuǎn)能夠歸納為四類:LL乎衡旋轉(zhuǎn):郭 修A的/子村05 &芋忖上M 人嘛餐 通上訴嘛卻爆i和要1f哪LR平衡旋轉(zhuǎn):yRR平衡旋轉(zhuǎn)h著曜幗鈕
36、上 策點(diǎn).鳴螂干事閃屆&1中加者庭息的女子柑的市子樹 上旭人造*.修*B6因子從I增加W(C)X *喻前籟感幡1r孑RL邛密整 |脖疾A第由這素械上需*型觀療M時(shí)時(shí)才皿,型吟學(xué)習(xí)要點(diǎn):查找表是稱為會(huì)集的數(shù)據(jù)構(gòu)造。因元素間關(guān)系特別松弛,其操作需借助其他數(shù)據(jù)構(gòu)造來 實(shí)現(xiàn)。本章列舉了三種方法靜態(tài)查找表,動(dòng)向查找表實(shí)現(xiàn)查找表的運(yùn)算。次序表因設(shè)置了監(jiān)察哨使查找效率大大提高。有序表的平均查找長(zhǎng)度不高出樹的深度。查找的ASL二叉排序樹的形態(tài)取決于元素的輸入次序。按中序遍歷可獲取結(jié)點(diǎn)的有序序列,應(yīng)熟練 掌握其建立、查找,插入和刪除算法。平衡二叉樹的看法,應(yīng)熟練掌握手工繪制平衡二叉樹。(完滿word版)數(shù)據(jù)構(gòu)造
37、知識(shí)點(diǎn)全面總結(jié)一精華版補(bǔ)充:.查找的過程是怎樣的?K的記錄,給定一個(gè)值 K,在含有 n個(gè)記錄的文件中進(jìn)行搜尋,搜尋一個(gè)要點(diǎn)字值等于 如找到那么輸出該記錄,否那么輸出查找不行功的信息。.對(duì)查找表常用的操作有哪些?盤問某個(gè)“特定的數(shù)據(jù)元素可否在表中;盤問某個(gè)“特定的數(shù)據(jù)元素的各種屬性;在查找表中插入一元素;從查找表中刪除一元素。.哪些查找方法?查找方法取決于表中數(shù)據(jù)的排列方式;.怎樣評(píng)估查找方法的利害?用比較次數(shù)的平均值來評(píng)估計(jì)法的利害。稱為平均查找長(zhǎng)度ASL oASL= E Pi. Ci.使用折半查找算法時(shí),要求被查文件:采用次序存貯構(gòu)造、記錄按要點(diǎn)字遞加有序.將線性表構(gòu)造成二叉排序樹的優(yōu)點(diǎn):查
38、找過程與次序構(gòu)造有序表中的折半查找相似,查找效率高;中序遍歷此二叉樹,將會(huì)獲取一個(gè)要點(diǎn)字的有序序列即實(shí)現(xiàn)了排序運(yùn)算若是查找不行功,能夠方便地將被查元素插入到二叉樹的葉子結(jié)點(diǎn)上,而且插入或刪除 時(shí)只要更正指針而不需搬動(dòng)元素。(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版第九章內(nèi)部排序內(nèi)容綱要:排序的定,排序能夠看作是 性表的一種操作排序:將一 亂無章的數(shù)據(jù)按必然的 律次排列起來。排序的分,定排序與不 定排序的定。A、B的先后次序保持不,定性一一假S兩個(gè)A和B的關(guān) 字相等,但排序后稱種排序算法是定的。插入排序直接插入、折半插入,索引表插入、希插入排序插入排序的根本思想是:插入fit廳有多種具體實(shí)
39、現(xiàn)算常:匈排半疆人錯(cuò)序中口軟穗嫌南朝笆藺喊 肺匚送插兼核癌每步將一個(gè)待排序的 象,按其關(guān)大小,插入到前面 已排好序的一 象的合適地址上,直到 象全部插入 止。言之,插入 排序,保子序列中隨 都是排好序的。1)直接插入排序在已形成的有序表中 性找,弁在合適地址插入,把原來地址上的元素向后 移。,狷寫出直接is人排序的弟間過程序列.i 131,a& 31 2?, % 1兒十6,章港磁.海嚏11:3,伉13】Q】濁門1心工,13/3期,務(wù)17$111篇任*13第:為1127,31 ,,而3f &%13, M $1 】jJL3, 5,6T9Ti:.p 0,門4311效率: 因在最壞情況下,全部元素的比
40、 次數(shù) 和0+ 1 + ?+ n-1)- O(n2) TOC o 1-5 h z 其他情況下也要考 移元素的次數(shù)。故復(fù)度O(n2)空效率:占用 1個(gè)沖元O1算法的 定性:因 25*排序后依舊在25的后邊元一定直接插入排序算法的:void InsertSort ( SqList &L ) / 序表L 作直接插入排序for ( i = 2; i =L.length; i+) /假設(shè)第一個(gè) 有序 L.r0= L.ri;j=i-1 ;先將待插入的元素放入“標(biāo)兵地址while L0 .keyLj.key) L,rj+1= L.rj;j-;/只要子表元素比 標(biāo)兵大就不斷后移L.rj+1= L.r0;直到子
41、表元素小于 標(biāo)兵,將標(biāo)兵送入當(dāng)前要插入的地址包括插入到表首(完滿word版)數(shù)據(jù)構(gòu)造知識(shí)點(diǎn)全面總結(jié)一精華版2折半插入排序既然子表有序且為次序儲(chǔ)藏構(gòu)造,那么插入時(shí)采用折半查找定可加速。優(yōu)點(diǎn):比較次數(shù)大大減少,全部元素比較次數(shù)僅為O(nlog2n)。時(shí)間效率:誠(chéng)然比較次數(shù)大大減少,痛惜搬動(dòng)次數(shù)并未減少,所以排序效率仍為O(n2)空間效率:仍為O 1牢固 性:牢固假設(shè)記錄是鏈表構(gòu)造,用直接插入排序行否?答:行,而且無需搬動(dòng)元素,時(shí)間效率更高!但請(qǐng)注意:?jiǎn)捂湵順?gòu)造無法實(shí)現(xiàn)“折半查找3表插入排序根本思想: 在次序儲(chǔ)藏構(gòu)造中,給每個(gè)記錄增開一個(gè)指針重量,在排序過程中將指針內(nèi)容逐個(gè)更正為已經(jīng)整理排序過的后繼
42、記錄地址。優(yōu)點(diǎn):在排序過程中不搬動(dòng)元素,只更正指針。此方法擁有鏈表排序和地址排序的特點(diǎn)表插入排序算法解析:無需搬動(dòng)記錄,只要更正指針值。但由于比較次數(shù)沒有減少,故時(shí)間效率仍為O(n2)空間效率必然低,由于增開了指針重量但在運(yùn)算過程中沒適用到更多的輔助單元牢固性:25和25*排序前后次序未變,牢固。注:此算法獲取的可是一個(gè)有序鏈表,查找記錄時(shí)只能滿足次序查找方式。5希爾shell排序根本思想:先將整個(gè)待排記錄序列切割成假設(shè)干子序列,分別進(jìn)行直接插入排序,待整個(gè)序列中的記錄“根本有序時(shí),再對(duì)全體記錄進(jìn)行一次直接插入排序。優(yōu)點(diǎn):讓要點(diǎn)字值小的元素能很快前移,且序列假設(shè)根本有序時(shí),再用直接插入排序辦理,時(shí)間效率會(huì)高很多。h 關(guān)鍵字序列 T= 2i ( 25*, 49,25 第謝華
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 如何運(yùn)用公共關(guān)系提升品牌形象計(jì)劃
- 提升銷售業(yè)績(jī)的年度策略計(jì)劃
- 幼兒社會(huì)性發(fā)展的培養(yǎng)策略計(jì)劃
- 醫(yī)院急診科工作流程優(yōu)化計(jì)劃
- 智能化工程驗(yàn)收管理辦法
- 代收服務(wù)費(fèi)協(xié)議書范文范文
- 投資加油站合伙人協(xié)議書范文
- 網(wǎng)約車修理合作協(xié)議書范文模板
- 高壓斷路器買賣協(xié)議書范文模板
- 七年級(jí)下冊(cè)協(xié)議書范文范文
- 第五章電能計(jì)量裝置的接線檢查第二節(jié)電量的抄讀及退補(bǔ)電量的計(jì)算
- 滬教版七年級(jí)上冊(cè)數(shù)學(xué)復(fù)習(xí)知識(shí)點(diǎn)考點(diǎn)總結(jié)歸納提綱
- 大連市住宅室內(nèi)裝修合同
- 交付標(biāo)準(zhǔn)化指導(dǎo)手冊(cè)(試行)文件
- 2022年醫(yī)院文書檔案保管期限
- 壓力容器焊接工藝
- “互聯(lián)網(wǎng)+”背景下高中地理高效課堂教學(xué)與實(shí)踐研究
- 托管教師備課系統(tǒng)(課堂PPT)
- 豐收神學(xué)醫(yī)治釋放目錄
- 公司合理化建議管理辦法_1
- 室內(nèi)管道綜合支吊架計(jì)算書
評(píng)論
0/150
提交評(píng)論