數(shù)據(jù)結(jié)構(gòu)習(xí)題答案.doc_第1頁
數(shù)據(jù)結(jié)構(gòu)習(xí)題答案.doc_第2頁
數(shù)據(jù)結(jié)構(gòu)習(xí)題答案.doc_第3頁
數(shù)據(jù)結(jié)構(gòu)習(xí)題答案.doc_第4頁
數(shù)據(jù)結(jié)構(gòu)習(xí)題答案.doc_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

習(xí)題1參考答案一、單項選擇題1. A 2. C 3. D 4. B 5. C、A 6. C、B 7. B 8. D 9. B 10. B二、填空題1. 線性結(jié)構(gòu),非線性結(jié)構(gòu)2. 集合,線性,樹,圖3. 一對一,一對多或多對多4. 時間,空間5. 前趨,一,后繼,多6. 有多個7. 一對一,一對多,多對多8. O()9. O()10. O()11. O(logn)12. 程序?qū)τ诰脑O(shè)計的典型合法數(shù)據(jù)輸入能得出符合要求的結(jié)果。13. 事后統(tǒng)計,事前估計三、算法設(shè)計題1. O() 2. O() 3. O(n) 4. O(n) 5. O(n)習(xí)題2參考答案一、單項選擇題1A 2A 3D 4C 5D 6A 7B 8B 9C 10A 11D 12B 13C 14B 15C 16C 17B 18D 19C20A二、填空題1線性 2n-i+1 3相鄰 4前移,前,后5物理存儲位置,鏈域的指針值 6前趨,后繼7順序,鏈接 8一定,不一定9線性,任何,棧頂,隊尾,隊頭10單鏈表,雙鏈表,非循環(huán)鏈表,循環(huán)鏈表11使空表和非空表統(tǒng)一;算法處理一致12O(1),O(n)13棧滿,???,m,棧底,兩個棧的棧頂在??臻g的某一位置相遇142、315O(1)三、簡答題1頭指針是指向鏈表中第一個結(jié)點(即表頭結(jié)點)的指針;在表頭結(jié)點之前附設(shè)的結(jié)點稱為頭結(jié)點;表頭結(jié)點為鏈表中存儲線性表中第一個數(shù)據(jù)元素的結(jié)點。若鏈表中附設(shè)頭結(jié)點,則不管線性表是否為空表,頭指針均不為空,否則表示空表的鏈表的頭指針為空。2線性表具有兩種存儲結(jié)構(gòu)即順序存儲結(jié)構(gòu)和鏈接存儲結(jié)構(gòu)。線性表的順序存儲結(jié)構(gòu)可以直接存取數(shù)據(jù)元素,方便靈活、效率高,但插入、刪除操作時將會引起元素的大量移動,因而降低效率:而在鏈接存儲結(jié)構(gòu)中內(nèi)存采用動態(tài)分配,利用率高,但需增設(shè)指示結(jié)點之間關(guān)系的指針域,存取數(shù)據(jù)元素不如順序存儲方便,但結(jié)點的插入、刪除操作較簡單。3應(yīng)選用鏈接存儲結(jié)構(gòu),因為鏈?zhǔn)酱鎯Y(jié)構(gòu)是用一組任意的存儲單元依次存儲線性表中的各元素,這里存儲單元可以是連續(xù)的,也可以是不連續(xù)的:這種存儲結(jié)構(gòu)對于元素的刪除或插入運(yùn)算是不需要移動元素的,只需修改指針即可,所以很容易實現(xiàn)表的容量的擴(kuò)充。4應(yīng)選用順序存儲結(jié)構(gòu),因為每個數(shù)據(jù)元素的存儲位置和線性表的起始位置相差一個和數(shù)據(jù)元素在線性表中的序號成正比的常數(shù)。因此,只要確定了其起始位置,線性表中的任一個數(shù)據(jù)元素都可隨機(jī)存取,因此,線性表的順序存儲結(jié)構(gòu)是一種隨機(jī)存取的存儲結(jié)構(gòu),而鏈表則是一種順序存取的存儲結(jié)構(gòu)。5設(shè)尾指針比設(shè)頭指針好。尾指針是指向終端結(jié)點的指針,用它來表示單循環(huán)鏈表可以使得查找鏈表的開始結(jié)點和終端結(jié)點都很方便,設(shè)一帶頭結(jié)點的單循環(huán)鏈表,其尾指針為rear,則開始結(jié)點和終端結(jié)點的位置分別是rear-next-next 和 rear, 查找時間都是O(1)。若用頭指針來表示該鏈表,則查找終端結(jié)點的時間為O(n)。6共有14種可能的出棧序列,即為:ABCD, ABDC,ACBD, ACDB,BACD,ADCB,BADC,BCAD, BCDA,BDCA,CBAD, CBDA,CDBA, DCBA7在隊列的順序存儲結(jié)構(gòu)中,設(shè)隊頭指針為front,隊尾指針為rear,隊列的容量(即存儲的空間大?。閙axnum。當(dāng)有元素要加入隊列(即入隊)時,若rear=maxnum,則會發(fā)生隊列的上溢現(xiàn)象,此時就不能將該元素加入隊列。對于隊列,還有一種“假溢出”現(xiàn)象,隊列中尚余有足夠的空間,但元素卻不能入隊,一般是由于隊列的存儲結(jié)構(gòu)或操作方式的選擇不當(dāng)所致,可以用循環(huán)隊列解決。 一般地,要解決隊列的上溢現(xiàn)象可有以下幾種方法:(1)可建立一個足夠大的存儲空間以避免溢出,但這樣做往往會造成空間使用率低,浪費(fèi)存儲空間。(2)要避免出現(xiàn)“假溢出”現(xiàn)象可用以下方法解決: 第一種:采用移動元素的方法。每當(dāng)有一個新元素入隊,就將隊列中已有的元素向隊頭移動一個位置,假定空余空間足夠。 第二種:每當(dāng)刪去一個隊頭元素,則可依次移動隊列中的元素總是使front指針指向隊列中的第一個位置。 第三種:采用循環(huán)隊列方式。將隊頭、隊尾看作是一個首尾相接的循環(huán)隊列,即用循環(huán)數(shù)組實現(xiàn),此時隊首仍在隊尾之前,作插入和刪除運(yùn)算時仍遵循“先進(jìn)先出”的原則。8該算法的功能是:將開始結(jié)點摘下鏈接到終端結(jié)點之后成為新的終端結(jié)點,而原來的第二個結(jié)點成為新的開始結(jié)點,返回新鏈表的頭指針。四、算法設(shè)計題 1算法思想為:(1)應(yīng)判斷刪除位置的合法性,當(dāng)in-1時,不允許進(jìn)行刪除操作;(2)當(dāng)i=0時,刪除第一個結(jié)點:(3)當(dāng)in時,允許進(jìn)行刪除操作,但在查找被刪除結(jié)點時,須用指針記住該結(jié)點的前趨結(jié)點。算法描述如下:delete(LinkList *q,int i) /在無頭結(jié)點的單鏈表中刪除第i個結(jié)點 LinkList *p,*s; int j; if(inext; free(s); else j=0; s=q; while(jnext;j+;if (s= =NULL) printf(Cantt delete); else p-next=s-next; free(s); 2由于在單鏈表中只給出一個頭指針,所以只能用遍歷的方法來數(shù)單鏈表中的結(jié)點個數(shù)了。算法描述如下:int ListLength ( LinkList *L ) /求帶頭結(jié)點的單鏈表的表長 int len=0; ListList *p; p=L; while ( p-next!=NULL ) p=p-next;len+; return (len);3設(shè)單循環(huán)鏈表的頭指針為head,類型為LinkList。逆置時需將每一個結(jié)點的指針域作以修改,使其原前趨結(jié)點成為后繼。如要更改q結(jié)點的指針域時,設(shè)s指向其原前趨結(jié)點,p指向其原后繼結(jié)點,則只需進(jìn)行q-next=s;操作即可,算法描述如下:void invert(LinkList *head) /逆置head指針?biāo)赶虻膯窝h(huán)鏈表linklist *p, *q, *s; q=head; p=head-next; while (p!=head) /當(dāng)表不為空時,逐個結(jié)點逆置 s=q; q=p; p=p-next; q-next=s; p-next=q; 4定義類型LinkList如下:typedef struct node int data; struct node *next,*prior;LinkList;此題可采用插入排序的方法,設(shè)p指向待插入的結(jié)點,用q搜索已由prior域鏈接的有序表找到合適位置將p結(jié)點鏈入。算法描述如下:insert (LinkList *head) LinkList *p,*s,*q; p=head-next; /p指向待插入的結(jié)點,初始時指向第一個結(jié)點 while(p!=NULL) s=head; / s指向q結(jié)點的前趨結(jié)點 q=head-prior; /q指向由prior域構(gòu)成的鏈表中待比較的結(jié)點 while(q!=NULL) & (p-dataq-data) /查找插入結(jié)點p的合適的插入位置 s=q; q=q-prior; s-prior=p; p-prior=q; /結(jié)點p插入到結(jié)點s和結(jié)點q之間 p=p-next;5算法描述如下:delete(LinkList *head, int max, int min) linklist *p, *q; if (head!=NULL) q=head; p=head-next; while(p!=NULL) & (p-datanext;while(p!=NULL) & (p-datanext; q-next=p;6算法描述如下:delete(LinkList *head, int max, int min) LinkList *p,*q; q=head; p=head-next; while (p!=NULL) if(p-datadata=max) q=p; p=p-next; else q-next=p-next;free(p);p=q-next; 7本題是對一個循環(huán)鏈隊列做插入和刪除運(yùn)算,假設(shè)不需要保留被刪結(jié)點的值和不需要回收結(jié)點,算法描述如下:(1)插入(即入隊)算法:insert(LinkList *rear, elemtype x) /設(shè)循環(huán)鏈隊列的隊尾指針為rear,x為待插入的元素 LinkList *p;p=(LinkList *)malloc(sizeof(LinkList);if(rear= =NULL) /如為空隊,建立循環(huán)鏈隊列的第一個結(jié)點 rear=p;rear-next=p; /鏈接成循環(huán)鏈表else /否則在隊尾插入p結(jié)點 p-next=rear-next;rear-next=p; rear=p;(2)刪除(即出隊)算法:delete(LinkList *rear) /設(shè)循環(huán)鏈隊列的隊尾指針為rearif (rear= =NULL) /空隊 printf(underflown); if(rear-next= =rear) /隊中只有一個結(jié)點rear=NULL;elserear-next=rear-next-next; /rear-next指向的結(jié)點為循環(huán)鏈隊列的隊頭結(jié)點8只要從終端結(jié)點開始往前找到第一個比x大(或相等)的結(jié)點數(shù)據(jù),在這個位置插入就可以了。算法描述如下:int InsertDecreaseList( SqList *L, elemtype x ) int i;if ( (*L).len= maxlen) printf(“overflow);return(0);for ( i=(*L).len ; i0 & (*L).elem i-1 x ; i-) (*L).elem i =(*L).elem i-1 ; / 比較并移動元素 (*L).elem i =x; (*L).len+;return(1);習(xí)題3參考答案一、單項選擇題1B2D3C4D5B6C7D8C9D二、填空題1. 固定長度,設(shè)置長度指針2. 兩個串的長度相等,對應(yīng)位置的字符相等3. “BCDEDE”4. 含n個字符的有限序列 (n0)5. 不含任何字符的串,僅含空格字符的字符串三、算法設(shè)計題1算法描述為:int delete(r,s,t,m) /從串的第m個字符以后刪除長度為t的子串char r ;int s,t,m; int i,j; for(i=1;i=m;i+)rs+i=ri; for(j=m+t-i;jdata!=pt-data) pt=pt-next; if(pt= =NULL) ps=NULL; else ps=ps-next;s=ps; return s; /find習(xí)題4參考答案一、單項選擇題1. A 2. A 3. A 4. B 5. BA 6. C 7. A 8. A 9. C 10. C 11. C 12. C 13. B 14. D 15.A 16.B 二、填空題1. 線性結(jié)構(gòu),順序結(jié)構(gòu),以行為主序,以列為主序2. in+j個元素位置3. 5,34.(0,2,2),(1,0,3),(2,2,-1),(2,3,5)5. n(n+1)/26. e7. 418. head(head(tail(Ls)9.(d-c+1)(d-c+1)(d-c+1)10. 913三、判斷題1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.習(xí)題5參考答案一、單項選擇題1. C 2. B 3. C 4. D 5. B 6. D 7. C 8. B 9. B 10. B 11. A 12. D 13. A 14. B 15. A二、判斷題1. 2. 3. 4. 5. 6. 7. 8. 9. 10.三、填空題1. 3,4,6,1,1,2,A,F(xiàn),G2. n+13. 完全,最大,n4. 555. 中序6. 2n,n-1,n+17. n2+18. 2k-1,2k-1,2k-19. 510. 2h-111. 單支樹,完全二叉樹12. 2i,2i+1,i/2(或i/2)13. 2n,n-1,n+114. 帶權(quán)路徑長度最小15. 結(jié)點數(shù)為0,只有一個根結(jié)點的樹16. 二叉鏈表,三叉鏈表17. 雙親結(jié)點18. 指向結(jié)點前驅(qū)和后繼信息的指針19. 1,RChild20. 孩子表示法,雙親表示法,長子兄弟表示法四、應(yīng)用題1. 解答:abcdegfhimnjki圖5-15根據(jù)給定的邊確定的樹如圖5-15所示。其中根結(jié)點為a;葉子結(jié)點有:d、m、n、j、k、f、l;c是結(jié)點g的雙親;a、c是結(jié)點g的祖先;j、k是結(jié)點g的孩子;m、n是結(jié)點e的子孫;e是結(jié)點d的兄弟;g、h是結(jié)點f的兄弟;結(jié)點b和n的層次號分別是2和5;樹的深度為5。2. 解答:度為2的樹有兩個分支,但分支沒有左右之分;一棵二叉樹也有兩個分支,但有左右之分,左右子樹不能交換。3. 解答:略4. 解答:先序序列:ABDHIEJKCFLG中序序列:HDIBJEKALFCG后序序列:HIDJKEBLFGCA5. 解答:(1)第i層上的結(jié)點數(shù)目是mi-1。(2)編號為n的結(jié)點的父結(jié)點如果存在,編號是(n-2)/m)+1。(3)編號為n的結(jié)點的第i個孩子結(jié)點如果存在,編號是(n-1)*m+i+1。(4)編號為n的結(jié)點有右兄弟的條件是(n-1)%m0。其右兄弟的編號是n+1。6. 解答:(1)先序序列和中序序列相同的二叉樹為:空樹或者任一結(jié)點均無左孩子的非空二叉樹;(2)中序序列和后序序列相同的二叉樹為:空樹或者任一結(jié)點均無右孩子的非空二叉樹;(3)先序序列和后序序列相同的二叉樹為:空樹或僅有一個結(jié)點的二叉樹。7. 解答:后序序列:ACDBGJKIHFE8. 解答:先序序列:ABCDGEIHFJK9. 解答:先根遍歷:ABCDEFGHIJKLMNO后根遍歷:BDEFCAHJIGKNOML森林轉(zhuǎn)換成二叉樹如圖5-16所示。10. 解答:構(gòu)造而成的哈夫曼樹如圖5-17所示。BGDCHKEIFJLMNOA圖5-1650 92030111614 7 7 2 5圖5-17五、算法設(shè)計題1. 解答:這個問題可以用遞歸算法,也可用非遞歸算法,下面給出的為非遞歸算法。假設(shè)該完全二叉樹的結(jié)點以層次為序,按照從上到下,同層從左到右順序編號,存放在一個一維數(shù)組R1.n中,且用一個有足夠大容量為maxlen的順序棧作輔助存儲,算法描述如下:preorder (R) /先序遍歷二叉樹Rint Rn; int root;SqStack *s; /s為一個指針棧,類型為seqstack,其中包含top域和數(shù)組datas-top= -1; /s棧置空root=1;while (roottop-1) while (roottop+;s-datas-top=root;root=2*root; if (s-top-1) /棧非空訪問,遍歷右子樹 root=s-datas-top*2+1; s-top-;2. 解答:考慮用一個順序隊que來保存遍歷過程中的各個結(jié)點,由于二叉樹以二叉鏈表存儲,所以可設(shè)que為一個指向數(shù)據(jù)類型為bitree的指針數(shù)組,最大容量為maxnum,下標(biāo)從1開始,同層結(jié)點從左到右存放。算法中的front為隊頭指針,rear為隊尾指針。levelorder (BiTree *t) /按層次遍歷二叉樹t BiTree *quemaxnum;int rear,front;if (t!=NULL) front=0; /置空隊列rear=1;que1=t;do front=front%maxsize+1; /出隊 t=quefront; printf(t-data); if (t-lchild!=NULL) /左子樹的根結(jié)點入隊 rear=rear%maxsize+1; querear=t-lchild; if (t-rchild!=NULL) /右子樹的根結(jié)點入隊 rear=rear%maxsize+1; querear=t-rchild;while (rear= =front); /隊列為空時結(jié)束3. 解答:設(shè)該線索二叉樹類型為bithptr,包含5個域:lchild,ltag,data,rchild,rtag。insert(p, s) /將s結(jié)點作為p的右子樹插入BiThrNode *p,*s; BiThrNode *q;if (p-rtag= =1) /無右子樹,則有右線索 s-rchild=p-rchild;s-rtag=1;p-rchild=s;p-rtag=0;else q=p-rchild;while(q-ltag= =0) /查找p所指結(jié)點中序后繼,即為其右子樹中最左下的結(jié)點 q=q-lchild;q-lchild=p-rchild;s-rtag=0;p-rchild=s;s-lchild=p; /將s結(jié)點的左線索指向p結(jié)點s-ltag=1;4. 解答:利用一個隊列來完成,設(shè)該隊列類型為指針類型,最大容量為maxnum。算法中的front為隊頭指針,rear為隊尾指針,若當(dāng)前隊頭結(jié)點的左、右子樹的根結(jié)點不是所求結(jié)點,則將兩子樹的根結(jié)點入隊,否則,隊頭指針?biāo)附Y(jié)點即為結(jié)點的雙親。parentjudge(t,n)BiTree *t;int n; BiTree *quemaxnum;int front,rear;BiTree *parent;parent=NULL;if (t)if (t-data= =n)printf(“no parent!”); /n是根結(jié)點,無雙親else front=0; /初始化隊列rear=1;que1=t; /根結(jié)點進(jìn)隊do front=front%maxsize+1; t=quefront; if(t-lchild-data= =n)| (t-rchild-data= =n) /結(jié)點n有雙親 parent=t; front=rear; printf(“parent”,t-data); else if (t-lchild!=NULL) /左子樹的根結(jié)點入隊 rear=rear%maxsize+1;querear=t-lchild; if (t-rchild!=NULL) /右子樹的根結(jié)點入隊 rear=rear%maxsize+1; querear=t-rchild;while(rear= =front); /隊空時結(jié)束if (parent = =NULL) printf(“結(jié)點不存在”);習(xí)題6參考答案一、單項選擇題1. A 2. D 3. D 4. C 5. B 6. B 7. B 8. A 9. C 10. D 11. C 12. D 13. A 14. B 15. B 16. C 17. A 18. A 19. B 20. D 21. A 22. C 23. B 24. A二、填空題1. 2 2. n(n-1)/2,n(n-1)3. 2,4 4. n-1 5. 鄰接矩陣,鄰接表 6. 1 7. k+1 8. 3 9. n,n 10. 2e,e 11. 出邊,入邊 12. O(n),O(e/n) 13.O(n2),O(n+e) 14. acdeb,acedb (答案不唯一)15. acfebd,acefbd (答案不唯一) 16. 深度,廣度17. n,n-1 18. 唯一19. 唯一 20. aebdcf(答案不唯一)三、應(yīng)用題1. 深度優(yōu)先搜索序列:0,1,2,8,3,4,5,6,7,9 廣度優(yōu)先搜索序列:0,1,4,2,7,3,8,6,5,92. 深度優(yōu)先搜索序列:0,4,7,5,8,3,6,1,2 廣度優(yōu)先搜索序列:0,4,3,1,7,5,6,2,83. 深度優(yōu)先搜索序列:0,2,3,5,6,1,4 廣度優(yōu)先搜索序列:0,2,3,5,6,1,44. 深度優(yōu)先搜索序列:0,3,6,4,1,5,2 廣度優(yōu)先搜索序列:0,3,2,6,5,4,1(a)V1V2V3V4V5V6V760506540457050524230V1V2V3V4V5V6V750(c)V1V2V3V4V5V6V7(b)5. 過程如圖6-16所示 V1V2V3V4V5V6V7504045504230(h)圖6-16V1V2V3V4V5V6V75040504230(g)V1V2V3V4V5V6V750405030(f)V1V2V3V4V5V6V75040(d)V1V2V3V4V5V6V7504050(e)6. 求解過程如圖6-17所示。V1V2V3V4V5V6V7(a)30V1V2V3V4V5V6V7(b)3040V1V2V3V4V5V6V7(c)304042圖6-17V1V2V3V4V5V6V7(e)3040424550V1V2V3V4V5V6V7(f)304042455050V1V2V3V4V5V6V7(d)304042457. 求解過程如下表所示。終點 從v0到各終點的D值和最短路徑的求解過程 i=1 i=2 i=3 i=4 i=5 V1 無 V2 10 (v0,v2) V3 60 (v0,v2,v3) 50 (v0,v4,v3) V4 30 (v0,v4) 30 (v0,v4) V5 100 (v0,v5) 100 (v0,v5) 90 (v0,v4,v5) 60 (v0,v4,v3,v5) Vj V2 V4 V3 V5 S v0,v2 v0,v2,v4v0,v2,v3,v4v0,v2,v3,v4,v58. 求解過程如下:事件的最早發(fā)生時間vek。 ve (1)=0 ve (2)=3 ve (3)=4 ve (4)=ve(2)+2=5 ve (5)=maxve(2)+1,ve(3)+3=7 ve (6)=ve(3)+5=9 ve (7)=maxve(4)+6,ve(5)+8=15 ve (8)=ve(5)+4=11 ve (9)=maxve(8)+10,ve(6)+2=21 ve (10)=maxve(8)+4,ve(9)+1=22 ve (11)=maxve(7)+7,ve(10)+6=28事件的最遲發(fā)生時間vlk。 vl (11)= ve (11)=28 vl (10)= vl (11)-6=22 vl (9)= vl (10)-1=21 vl (8)=min vl (10)-4, vl (9)-10=11 vl (7)= vl (11)-7=21 vl (6)= vl (9)-2=19 vl (5)=min vl (7)-8,vl (8)-4=7 vl (4)= vl (7)-6=15 vl (3)=min vl (5)-3, vl (6)-5=4 vl (2)=min vl (4)-2, vl (5)-1=6 vl (1)=minvl (2)-3, vl (3)-4=0活動ai的最早開始時間ei和最晚開始時間li。 活動a1 e (1)=ve (1)=0 l (1)=vl (2) -3 =3 活動a2 e (2)=ve (1)=0 l (2)=vl (3) - 4=0 活動a3 e (3)=ve (2)=3 l (3)=vl (4) - 2=13 活動a4 e (4)=ve (2)=3 l (4)=vl (5) - 1=6 活動a5 e (5)=ve (3)=4 l (5)=vl (5) - 3=4 活動a6 e (6)=ve (3)=4 l (6)=vl (6) - 5=14 活動a7 e (7)=ve (4)=5 l (7)=vl (7) - 6=15 活動a8 e (8)=ve (5)=7 l (8)=vl (7) - 8=13 活動a9 e (9)=ve (5)=7 l (9)=vl (8) - 4=7 活動a10 e (10)=ve (6)=9 l (10)=vl (9) - 2=19 活動a11 e (11)=ve (7)=15 l (11)=vl (11) - 7=21 活動a12 e (12)=ve (8)=11 l (12)=vl (10) - 4=18 活動a13 e (13)=ve (8)=11 l (13)=vl (9) - 10=11 活動a14 e (14)=ve (9)=21 l (14)=vl (10) -1=21 活動a15 e (15)=ve (10)=22 l (15)=vl (11) -6 =22最后,比較ei和li的值可判斷出a2,a5,a9,a13,a14,a15是關(guān)鍵活動,關(guān)鍵路徑如圖6-18所示。v1v5v3v8v11v9v1001a2=4a5=3a9=4a13=10a14=1a15=6圖6-18四、算法設(shè)計題1. int degree1(Graph & ga, int numb) /根據(jù)無向圖的鄰接矩陣求出序號為numb的頂點的度數(shù) int j,d=0; for(j=0; jga.vexnum; j+)if (ga.costnumbj!=0 & ga.costnumbj!=MAXINT)d+; return (d);2. int degree2(Graph & ga, int numb)/根據(jù)有向圖的鄰接矩陣求出序號為numb的頂點的度數(shù) int i,j,d=0; /求出頂點numb的出度 for(j=0; jga.vexnum; j+) if(ga.costnumbj!=0 & ga.costnumbj!=MAXINT) d+; /求出頂點numb的入度 for(i=0; inext; return (d);4. int degree4(GraphL & gl, int numb)/根據(jù)有向圖的鄰接表求出序號為numb的頂點的度數(shù) int d=0, i;vexnode * p=gl.adjlistnumb; while (p!=NULL) d+;p=p-next; /求出頂點numb的出度for(i=0; ivertex= =numb) d+; p=p-next;/求出頂點numb的入度 return (d); /返回頂點numb的度數(shù)習(xí)題7參考答案一、單項選擇題1. D 2. A 3. B 4. C 5. D 6. D 7. A 8. C 9. A 10. A 11. C 12. B 13. D 二、填空題1. (n+1)/2, O(n) 2. 3. 20.5, 41 4. log2(n+1),O(log2n)5. 順序 有序 6. 1,3 7. 6, 19 8. (n/s+s)/2+1 9. 11 10. 小于,大于11. 有序序列 12. 查找成功,左子樹,右子樹 13. 左子樹,右子樹 14. O(nlog2n) 15. 1 16. 5 17. 2 18. n/m 19. 3, 2 三、應(yīng)用題1. 折半查找判定樹如圖7-3所示,平均查找長度等于29/10。圖7-3中的結(jié)點與有序表中元素的對應(yīng)關(guān)系如下表所示。圖7-3109456781231234567891015263439455658637476圖7-4385225167430689054722. 二叉排序樹如圖7-4所示,平均查找長度等于32/10。3. H(K)=K % 13平均查找長度為14/10,其余解答如下。 元素 32 75 29 63 48 94 25 46 18 70 初始哈希地址 6 10 3 11 9 3 12 7 5 5 最終哈希地址 6 10 3 11 9 4 12 7 5 8 0 1 2 3 4 5 6 7 8 9 10 11 12 哈希表 29 94 18 32 46 70 48 75 63 254. H(K)=K % 11,哈希表如圖7-5所示,平均查找長度17/12。圖7-50 四、算法設(shè)計題1. 設(shè)計思路:進(jìn)入判別算法之前,pre取初值為min(小于樹中任一結(jié)點值),fail=FALSE,即認(rèn)為bt是二叉排序樹。按中序遍歷bt,并在沿向根結(jié)點,與前趨比較,若逆序,則fail為TRUE,則bt不是二叉排序樹。void bisorttree(bitree bt,keytype pre, bool &fail) /fail初值為FALSE,若非二叉序樹,則fail值TRUE if (!fail) if (bt) bisosrttree(bt-lchild,pre,fail); /判斷左子樹 if (bt-data_keydata_key; bisorttree(bt-rchild,pre,fail); /判斷右子樹 /bisorttree說明:較為直觀的方法,可套用中序遍歷非遞歸算法。2. int search_bin(SeqTable st , keytype k , int low , int high) if (lowhigh) return (0); /不成功else mid=(low+high)/2;if (k= =st.elemmid.key) return (mid) ; /成功else if (kst.elemmid.key) return (st,k,low,mid-1);else return(st,k,mid+1,high); /search-bin習(xí)題8

溫馨提示

  • 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

提交評論