




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
-.z.程序復雜性3、具有線性結構的數(shù)據(jù)結構是(D)。A.圖 B.樹 C.廣義表D.棧4、計算機中的算法指的是解決*一個問題的有限運算序列,它必須具備輸入、輸出、(B)等5個特性。A.可執(zhí)行性、可移植性和可擴充性 B.可執(zhí)行性、有窮性和確定性C.確定性、有窮性和穩(wěn)定性 D.易讀性、穩(wěn)定性和確定性5、下面程序段的時間復雜度是(C)。for(i=0;i<m;i++) for(j=0;j<n;j++) a[i][j]=i*j;A.O(m2) B.O(n2) C.O(m*n) D.O(m+n)6、算法是(D)。A.計算機程序B.解決問題的計算方法 C.排序算法D.解決問題的有限運算序列7、*算法的語句執(zhí)行頻度為(3n+nlog2n+n2+8),其時間復雜度表示(C)。A.O(n) B.O(nlog2n) C.O(n2) D.O(log2n)8、下面程序段的時間復雜度為(C)。i=1; while(i<=n)i=i*3;A.O(n) B.O(3n) C.O(log3n) D.O(n3) 9、數(shù)據(jù)結構是一門研究非數(shù)值計算的程序設計問題中計算機的數(shù)據(jù)元素以及它們之間的(B)和運算等的學科。A.結構 B.關系 C.運算 D.算法10、下面程序段的時間復雜度是(C)。i=s=0; while(s<n){ i++;s+=i; }A.O(n) B.O(n2) C.O(√n) D.O(n3)11、抽象數(shù)據(jù)類型的三個組成部分分別為(A)。A.數(shù)據(jù)對象、數(shù)據(jù)關系和基本操作 B.數(shù)據(jù)元素、邏輯結構和存儲結構C.數(shù)據(jù)項、數(shù)據(jù)元素和數(shù)據(jù)類型D.數(shù)據(jù)元素、數(shù)據(jù)結構和數(shù)據(jù)類型12、通常從正確性、易讀性、健壯性、高效性等4個方面評價算法的質量,以下解釋錯誤的是(A)。A.正確性算法應能正確地實現(xiàn)預定的功能 B.易讀性算法應易于閱讀和理解,以便調試、修改和擴充 C.健壯性當環(huán)境發(fā)生變化時,算法能適當?shù)刈龀龇磻蜻M行處理,不會產生不需要的運行結果 D.高效性即達到所需要的時間性能13、下列程序段的時間復雜度為(B)。*=n;y=0; while(*>=(y+1)*(y+1))y=y+1; A.O(n) B. C. O(1) D.O(n2)二、填空題1、程序段"i=1;while(i<=n)i=i*2;”的時間復雜度為O(log2n)。2、數(shù)據(jù)結構的四種基本類型中,樹形結構的元素是一對多關系。三、綜合題1、將數(shù)量級O(1),O(N),O(N2),O(N3),O(NLOG2N),O(LOG2N),O(2N)按增長率由小到大排序。答案:O(1)<O(log2N)<O(N)<O(Nlog2N)<O(N2)<O(N3)<O(2N)第二章線性表一、選擇題1、若長度為n的線性表采用順序存儲結構,在其第i個位置插入一個新元素算法的時間復雜度(C)。A.O(log2n) B.O(1) C.O(n) D.O(n2)2、若一個線性表中最常用的操作是取第i個元素和找第i個元素的前趨元素,則采用(A)存儲方式最節(jié)省時間。A.順序表 B.單鏈表 C.雙鏈表 D.單循環(huán)鏈表3、具有線性結構的數(shù)據(jù)結構是(D)。A.圖 B.樹 C.廣義表D.棧4、在一個長度為n的順序表中,在第i個元素之前插入一個新元素時,需向后移動(B)個元素。A.n-i B.n-i+1 C.n-i-1 D.i5、非空的循環(huán)單鏈表head的尾結點p滿足(A)。A.p->ne*t==head B.p->ne*t==NULL C.p==NULL D.p==head6、鏈表不具有的特點是(A)。A.可隨機訪問任一元素 B.插入刪除不需要移動元素 C.不必事先估計存儲空間 D.所需空間與線性表長度成正比7、在雙向循環(huán)鏈表中,在p指針所指的結點后插入一個指針q所指向的新結點,修改指針的操作是(C)。 A.p->ne*t=q;q->prior=p;p->ne*t->prior=q;q->ne*t=q; B.p->ne*t=q;p->ne*t->prior=q;q->prior=p;q->ne*t=p->ne*t; C.q->prior=p;q->ne*t=p->ne*t;p->ne*t->prior=q;p->ne*t=q; D.q->ne*t=p->ne*t;q->prior=p;p->ne*t=q;p->ne*t=q;8、線性表采用鏈式存儲時,結點的存儲地址(C)。A.必須是連續(xù)的 B.必須是不連續(xù)的 C.連續(xù)與否均可 D.和頭結點的存儲地址相連續(xù)9、在一個長度為n的順序表中刪除第i個元素,需要向前移動(A)個元素。A.n-i B.n-i+1 C.n-i-1 D.i+110、線性表是n個(C)的有限序列。A.表元素 B.字符 C.數(shù)據(jù)元素 D.數(shù)據(jù)項 11、從表中任一結點出發(fā),都能掃描整個表的是(C)。A.單鏈表 B.順序表 C.循環(huán)鏈表 D.靜態(tài)鏈表12、在具有n個結點的單鏈表上查找值為*的元素時,其時間復雜度為(A)。A.O(n) B.O(1) C.O(n2) D.O(n-1)13、線性表L=(a1,a2,……,an),下列說法正確的是(D)。A.每個元素都有一個直接前驅和一個直接后繼B.線性表中至少要有一個元素C.表中諸元素的排列順序必須是由小到大或由大到小D.除第一個和最后一個元素外,其余每個元素都由一個且僅有一個直接前驅和直接后繼14、一個順序表的第一個元素的存儲地址是90,每個元素的長度為2,則第6個元素的存儲地址是(B)。A.98 B.100 C.102 D.10615、在線性表的下列存儲結構中,讀取元素花費的時間最少的是(D)。A.單鏈表B.雙鏈表 C.循環(huán)鏈表 D.順序表16、在一個單鏈表中,若刪除p所指向結點的后續(xù)結點,則執(zhí)行(A)。A.p->ne*t=p->ne*t->ne*t;B.p=p->ne*t;p->ne*t=p->ne*t->ne*t;C.p=p->ne*t;D.p=p->ne*t->ne*t;17、將長度為n的單鏈表連接在長度為m的單鏈表之后的算法的時間復雜度為(C)。A.O(1) B.O(n) C.O(m) D.O(m+n)18、線性表的順序存儲結構是一種(A)存儲結構。A.隨機存取 B.順序存取 C.索引存取 D.散列存取 19、順序表中,插入一個元素所需移動的元素平均數(shù)是(D)。A.(n-1)/2 B.n C.n+1 D.n/210、循環(huán)鏈表的主要優(yōu)點是(D)。A.不再需要頭指針B.已知*結點位置后能容易找到其直接前驅C.在進行插入、刪除運算時能保證鏈表不斷開D.在表中任一結點出發(fā)都能掃描整個鏈表11、不帶頭結點的單鏈表head為空的判定條件是(A)。A.head==NULL B.head->ne*t==NULL(帶頭結點判定條件) C.head->ne*t==head(循環(huán)鏈表判定條件)D.head!=NULL12、在下列對順序表進行的操作中,算法時間復雜度為O(1)的是(A)。A.訪問第i個元素的前驅(1<)B.在第i個元素之后插入一個新元素() C.刪除第i個元素()D.對順序表中元素進行排序13、已知指針p和q分別指向*單鏈表中第一個結點和最后一個結點。假設指針s指向另一個單鏈表中*個結點,則在s所指結點之后插入上述鏈表應執(zhí)行的語句為(A)。A.q->ne*t=s->ne*t;s->ne*t=p; B.s->ne*t=p;q->ne*t=s->ne*t; C.p->ne*t=s->ne*t;s->ne*t=q; D.s->ne*t=q;p->ne*t=s->ne*t;14、在以下的敘述中,正確的是(C)。 A.線性表的順序存儲結構優(yōu)于鏈表存儲結構B.線性表的順序存儲結構適用于頻繁插入/刪除數(shù)據(jù)元素的情況 C.線性表的鏈表存儲結構適用于頻繁插入/刪除數(shù)據(jù)元素的情況D.線性表的鏈表存儲結構優(yōu)于順序存儲結構15、在表長為n的順序表中,當在任何位置刪除一個元素的概率相同時,刪除一個元素所需移動的平均個數(shù)為(A)。A.(n-1)/2 B.n/2 C.(n+1)/2 D.n16、在一個單鏈表中,已知q所指結點是p所指結點的前驅結點,若在q和p之間插入一個結點s,則執(zhí)行(C)。A.s->ne*t=p->ne*t;p->ne*t=s;B.p->ne*t=s->ne*t;s->ne*t=p; C.q->ne*t=s;s->ne*t=p; D.p->ne*t=s;s->ne*t=q; 17、在單鏈表中,指針p指向元素為*的結點,實現(xiàn)刪除*的后繼的語句是(B)。A.p=p->ne*t; B.p->ne*t=p->ne*t->ne*t;C.p->ne*t=p; D.p=p->ne*t->ne*t;18、在頭指針為head且表長大于1的單循環(huán)鏈表中,指針p指向表中*個結點,若p->ne*t->ne*t==head,則(D)。A.p指向頭結點 B.p指向尾結點 C.p的直接后繼是頭結點 D.p的直接后繼是尾結點1、設單鏈表的結點結構為(data,ne*t)。已知指針p指向單鏈表中的結點,q指向新結點,欲將q插入到p結點之后,則需要執(zhí)行的語句:q->ne*t=p->ne*t;p->ne*t=q。二、填空題答案:q->ne*t=p->ne*t p->ne*t=q2、線性表的邏輯結構是線性結構,其所含元素的個數(shù)稱為線性表的長度。答案:線性結構長度3、寫出帶頭結點的雙向循環(huán)鏈表L為空表的條件。答案:L->prior==L->ne*t==L4、帶頭結點的單鏈表head為空的條件是。答案:head->ne*t==NULL5、在一個單鏈表中刪除p所指結點的后繼結點時,應執(zhí)行以下操作:q=p->ne*t;p->ne*t=_q->ne*t___;三、判斷題1、單鏈表不是一種隨機存儲結構。對2、在具有頭結點的單鏈表中,頭指針指向鏈表的第一個數(shù)據(jù)結點。錯3、用循環(huán)單鏈表表示的鏈隊列中,可以不設隊頭指針,僅在隊尾設置隊尾指針。對4、順序存儲方式只能用于存儲線性結構。錯5、在線性表的順序存儲結構中,邏輯上相鄰的兩個元素但是在物理位置上不一定是相鄰的。錯6、鏈式存儲的線性表可以隨機存取。錯四、程序分析填空題1、函數(shù)GetElem實現(xiàn)返回單鏈表的第i個元素,請在空格處將算法補充完整。intGetElem(LinkListL,inti,Elemtype*e){ LinkListp;intj;p=L->ne*t;j=1; while(p&&j<i){(1);++j;}if(!p||j>i)returnERROR;*e=(2);returnOK;}答案:(1)p=p->ne*t(2)p->data2、函數(shù)實現(xiàn)單鏈表的插入算法,請在空格處將算法補充完整。intListInsert(LinkListL,inti,ElemTypee){LNode*p,*s;intj;p=L;j=0; while((p!=NULL)&&(j<i-1)){ p=p->ne*t;j++; } if(p==NULL||j>i-1)returnERROR; s=(LNode*)malloc(sizeof(LNode)); s->data=e;(1);(2); returnOK;}/*ListInsert*/答案:(1)s->ne*t=p->ne*t(2)p->ne*t=s3、函數(shù)ListDelete_sq實現(xiàn)順序表刪除算法,請在空格處將算法補充完整。intListDelete_sq(Sqlist*L,inti){intk;if(i<1||i>L->length)returnERROR;for(k=i-1;k<L->length-1;k++)L->slist[k]=(1);(2);returnOK;}答案:(1)L->slist[k+1](2)--L->Length4、函數(shù)實現(xiàn)單鏈表的刪除算法,請在空格處將算法補充完整。intListDelete(LinkListL,inti,ElemType*s){LNode*p,*q;intj;p=L;j=0;while(((1))&&(j<i-1)){p=p->ne*t;j++;}if(p->ne*t==NULL||j>i-1)returnERROR;q=p->ne*t;(2);*s=q->data;free(q);returnOK;}/*listDelete*/答案:(1)p->ne*t!=NULL(2)p->ne*t=q->ne*t5、寫出算法的功能。intL(head){ node*head; intn=0; node*p; p=head; while(p!=NULL) {p=p->ne*t; n++; } return(n); }答案:求單鏈表head的長度五、綜合題1、編寫算法,實現(xiàn)帶頭結點單鏈表的逆置算法。答案:voidinvent(Lnode*head){Lnode*p,*q,*r;if(!head->ne*t)returnERROR;p=head->ne*t;q=p->ne*t;p->ne*t=NULL;while(q){r=q->ne*t;q->ne*t=p;head->ne*t=q;p=q;q=r;}}試編寫一個算法,將一個順序表逆置,并使用最少的輔助存儲空間實現(xiàn)。答案:typedefstruct{ElemType*elem;intlength;}Sqlist;Invert_list(Sqlist*L)/*將順序表進行逆置*/{inti;ElemTypet;for(i=0;i<(L->length-1)/2;i++){t=L->elem[i];L->elem[i]=L->elem[L->length-i-1];L->elem[L->length-i-1]=t;}/*for*/}/*invert_list*/2、有兩個循環(huán)鏈表,鏈頭指針分別為L1和L2,要求寫出算法將L2鏈表鏈到L1鏈表之后,且連接后仍保持循環(huán)鏈表形式。答案:voidmerge(Lnode*L1,Lnode*L2){Lnode*p,*q;while(p->ne*t!=L1)p=p->ne*t;while(q->ne*t!=L2)q=q->ne*t;q->ne*t=L1;p->ne*t=L2;}3、設一個帶頭結點的單向鏈表的頭指針為head,設計算法,將鏈表的記錄,按照data域的值遞增排序。答案:voidassending(Lnode*head){Lnode*p,*q,*r,*s;p=head->ne*t;q=p->ne*t;p->ne*t=NULL;while(q){r=q;q=q->ne*t;if(r->data<=p->data){r->ne*t=p;head->ne*t=r;p=r;}else{while(!p&&r->data>p->data){s=p;p=p->ne*t;}r->ne*t=p;s->ne*t=r;}p=head->ne*t;}}4、編寫算法,將一個頭指針為head不帶頭結點的單鏈表改造為一個單向循環(huán)鏈表,并分析算法的時間復雜度。答案:voidlinklist_c(Lnode*head){Lnode*p;p=head;if(!p)returnERROR;while(p->ne*t!=NULL)p=p->ne*t;p->ne*t=head;}設單鏈表的長度(數(shù)據(jù)結點數(shù))為N,則該算法的時間主要花費在查找鏈表最后一個結點上(算法中的while循環(huán)),所以該算法的時間復雜度為O(N)。5、已知head為帶頭結點的單循環(huán)鏈表的頭指針,鏈表中的數(shù)據(jù)元素依次為(a1,a2,a3,a4,…,an),A為指向空的順序表的指針。閱讀以下程序段,并回答問題:(1)寫出執(zhí)行下列程序段后的順序表A中的數(shù)據(jù)元素;(2)簡要敘述該程序段的功能。if(head->ne*t!=head){p=head->ne*t;A->length=0;while(p->ne*t!=head){p=p->ne*t;A->data[A->length++]=p->data;if(p->ne*t!=head)p=p->ne*t;}}答案:(1)(a2,a4,…,)(2)將循環(huán)單鏈表中偶數(shù)結點位置的元素值寫入順序表A6、設順序表va中的數(shù)據(jù)元數(shù)遞增有序。試寫一算法,將*插入到順序表的適當位置上,以保持該表的有序性。答案:voidInsert_sq(Sqlistva[],ElemType*){inti,j,n;n=length(va[]);if(*>=va[n-1])va[n]=*;else{i=0;while(*>va[i])i++;for(j=n-1;j>=I;j--)va[j+1]=va[j];va[i]=*;}n++;}試編寫一個算法,在一個遞增有序排列的單鏈表中插入一個新結點*,并保持有序。structLinknode{intdata;structLinknode*ne*t;};typedefstructLinknode*Link;Linkinsert(Linkhead){inti,e,j;Linkpointer,s;printf("\npleaseinputtheelemofyouwantinsert:");scanf("%d",&e);pointer=head;while(pointer->ne*t&&e>=pointer->ne*t->data)/*在鏈表中確定插入的位置*/pointer=pointer->ne*t;if(!pointer->ne*t){ s=(Link)malloc(sizeof(structLinknode)); s->data=e; s->ne*t=NULL; pointer->ne*t=s; }else{s=(Link)malloc(sizeof(structLinknode));s->data=e;/*為插入的結點建立關系*/s->ne*t=pointer->ne*t;pointer->ne*t=s;}/*if*/returnhead;}/*LinkList_insert*/7、假設線性表采用順序存儲結構,表中元素值為整型。閱讀算法f2,設順序表L=(3,7,3,2,1,1,8,7,3),寫出執(zhí)行算法f2后的線性表L的數(shù)據(jù)元素,并描述該算法的功能。voidf2(SeqList*L){inti,j,k;k=0;for(i=0;i<L->length;i++){for(j=0;j<k&&L->data[i]!=L->data[j];j++); if(j==k){if(k!=i)L->data[k]=L->data[i]; k++; }}L->length=k;}答案:(3,7,2,1,8)刪除順序表中重復的元素8、已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲結構。試寫一算法,刪除表中所有大于*且小于y的元素(若表中存在這樣的元素)同時釋放被刪除結點空間。答案:voidDelete_list(Lnode*head,ElemType*,ElemTypey){Lnode*p,*q;if(!head)returnERROR;p=head;q=p;while(!p){if(p->data>*)&&(p->data<y)}i++;if(p==head){head=p->ne*t;free(p);p=head;q=p;}else{q->ne*t=p->ne*t;free(p);p=q->ne*t;}else{q=p;p=p->ne*t;}}}9、在帶頭結點的循環(huán)鏈表L中,結點的數(shù)據(jù)元素為整型,且按值遞增有序存放。給定兩個整數(shù)a和b,且a<b,編寫算法刪除鏈表L中元素值大于a且小于b的所有結點。voidDelete_list(Lnode*head,ElemTypea,ElemTypeb){Lnode*p,*q;if(!head->ne*t)returnERROR;p=head->ne*t;q=p;while(p->ne*t!=head){if(p->data>*)&&(p->data<y)}i++;if(p==head){head=p->ne*t;free(p);p=head;q=p;}else{q->ne*t=p->ne*t;free(p);p=q->ne*t;}else{q=p;p=p->ne*t;}}}試編寫一個算法,將兩個元素值遞減排列的順序表合并為一個非遞增的順序表。typedefstruct{ElemType*elem;intlength;}Sqlist;Merge_list(Sqlist*A,Sqlist*B,Sqlist*C){intj=0,k=0,i=0;C->length=A->length+B->length;while(i<A->length&&j<B->length)if(A->elem[i]>B->elem[j]){C->elem[k]=A->elem[i];i++;k++;}else{C->elem[k]=B->elem[j];j++;k++;}while(i<A->length){C->elem[k]=A->elem[i];i++;k++;}while(j<B->length){C->elem[k]=B->elem[j];j++;k++;}}第三章棧和隊列一、選擇題1、一個棧的輸入序列為:a,b,c,d,e,則棧的不可能輸出的序列是(C)。A.a,b,c,d,eB.d,e,c,b,a C.d,c,e,a,bD.e,d,c,b,a2、判斷一個循環(huán)隊列Q(最多n個元素)為滿的條件是(C)。A.Q->rear==Q->front B.Q->rear==Q->front+1 C.Q->front==(Q->rear+1)%n D.Q->front==(Q->rear-1)%n3、設計一個判別表達式中括號是否配對的算法,采用(D)數(shù)據(jù)結構最佳。A.順序表 B.鏈表 C.隊列 D.棧4、帶頭結點的單鏈表head為空的判定條件是(B)。A.head==NULL B.head->ne*t==NULL C.head->ne*t!=NULL D.head!=NULL5、一個棧的輸入序列為:1,2,3,4,則棧的不可能輸出的序列是(D)。A.1243B.2134 C.1432D.4312 E.32146、若用一個大小為6的數(shù)組來實現(xiàn)循環(huán)隊列,且當rear和front的值分別為0,3。當從隊列中刪除一個元素,再加入兩個元素后,rear和front的值分別為(B)。A.1和5 B.2和4 C.4和2 D.5和17、隊列的插入操作是在(A)。A.隊尾 B.隊頭 C.隊列任意位置 D.隊頭元素后8、循環(huán)隊列的隊頭和隊尾指針分別為front和rear,則判斷循環(huán)隊列為空的條件是(A)。A.front==rear B.front==0 C.rear==0 D.front=rear+19、一個順序棧S,其棧頂指針為top,則將元素e入棧的操作是(A)。A.*S->top=e;S->top++; B.S->top++;*S->top=e; C.*S->top=e D.S->top=e;10、表達式a*(b+c)-d的后綴表達式是(B)。A.abcd+- B.abc+*d- C.abc*+d- D.-+*abcd11、將遞歸算法轉換成對應的非遞歸算法時,通常需要使用(B)來保存中間結果。A.隊列B.棧C.鏈表 D.樹12、棧的插入和刪除操作在(B)。A.棧底 B.棧頂 C.任意位置 D.指定位置13、五節(jié)車廂以編號1,2,3,4,5順序進入鐵路調度站(棧),可以得到(C)的編組。 A.3,4,5,1,2 B.2,4,1,3,5 C.3,5,4,2,1 D.1,3,5,2,414、判定一個順序棧S(??臻g大小為n)為空的條件是(A)。A.S->top==0 B.S->top!=0 C.S->top==n D.S->top!=n15、在一個鏈隊列中,front和rear分別為頭指針和尾指針,則插入一個結點s的操作為(C)。A.front=front->ne*t B.s->ne*t=rear;rear=sC.rear->ne*t=s;rear=s; D.s->ne*t=front;front=s;16、一個隊列的入隊序列是1,2,3,4,則隊列的出隊序列是(A)。 A.1,2,3,4B.4,3,2,1 C.1,4,3,2 D.3,4,1,217、依次在初始為空的隊列中插入元素a,b,c,d以后,緊接著做了兩次刪除操作,此時的隊頭元素是(C)。A.a B.b C.c D.d18、正常情況下,刪除非空的順序存儲結構的堆棧的棧頂元素,棧頂指針top的變化是(D)。A.top不變 B.top=0 C.top=top+1 D.top=top-119、判斷一個循環(huán)隊列Q(空間大小為M)為空的條件是(A)。A.Q->front==Q->rear B.Q->rear-Q->front-1==M C.Q->front+1=Q->rear D.Q->rear+1=Q->front20、設計一個判別表達式中左右括號是否配對出現(xiàn)的算法,采用(C)數(shù)據(jù)結構最佳。A.線性表的順序存儲結構 B.隊列C.棧D.線性表的鏈式存儲結構21、當用大小為N的數(shù)組存儲順序循環(huán)隊列時,該隊列的最大長度為(C)。A.N B.N+1 C.N-1 D.N-2【解析:隊列的頭指針指向的是第一個元素的前一個結點,而不是指向第一個元素,一次隊列的頭指針要占用一個結點長度?!?2、隊列的刪除操作是在(A)。A.隊首 B.隊尾 C.隊前 D.隊后23、若讓元素1,2,3依次進棧,則出棧次序不可能是(C)。A.3,2,1 B.2,1,3 C.3,1,2 D.1,3,224、循環(huán)隊列用數(shù)組A[0,m-1]存放其元素值,已知其頭尾指針分別是front和rear,則當前隊列中的元素個數(shù)是(A)。A.(rear-front+m)%m B.rear-front+1C.rear-front-1 D.rear-front25、在解決計算機主機和打印機之間速度不匹配問題時,通常設置一個打印數(shù)據(jù)緩沖區(qū),主機將要輸出的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機則從該緩沖區(qū)中取走數(shù)據(jù)打印。該緩沖區(qū)應該是一個(B)結構。A.堆棧B.隊列C.數(shù)組 D.線性表【解析:先進入緩沖區(qū)的文件先被打印,選擇先進先出的結構,即隊列?!?6、棧和隊列都是(C)。A.鏈式存儲的線性結構 B.鏈式存儲的非線性結構 C.限制存取點的線性結構 D.限制存取點的非線性結構【解析:棧是只允許在棧頂進行插入和刪除操作的線性表,隊列是只允許在隊頭進行刪除,在隊尾進行刪除操作的線性表】27、在一個鏈隊列中,假定front和rear分別為隊頭指針和隊尾指針,刪除一個結點的操作是(A)。A.front=front->ne*t B.rear=rear->ne*tC.rear->ne*t=front D.front->ne*t=rear28、隊和棧的主要區(qū)別是(D)。A.邏輯結構不同 B.存儲結構不同C.所包含的運算個數(shù)不同D.限定插入和刪除的位置不同二、填空題1、設棧S和隊列Q的初始狀態(tài)為空,元素e1,e2,e3,e4,e5,e6依次通過棧S,一個元素出棧后即進入隊列Q,若6個元素出隊的序列是e2,e4,e3,e6,e5,e1,則棧的容量至少應該是。答案:32、一個循環(huán)隊列Q的存儲空間大小為M,其隊頭和隊尾指針分別為front和rear,則循環(huán)隊列中元素的個數(shù)為。答案:(rear-front+M)%M3、在具有n個元素的循環(huán)隊列中,隊滿時具有個元素。答案:n-14、設循環(huán)隊列的容量為70,現(xiàn)經過一系列的入隊和出隊操作后,front為20,rear為11,則隊列中元素的個數(shù)為。答案:61已知循環(huán)隊列的存儲空間大小為20,且當前隊列的頭指針和尾指針的值分別為8和3,且該隊列的當前的長度為。答案:15三、判斷題1、棧和隊列都是受限的線性結構。對2、在單鏈表中,要訪問*個結點,只要知道該結點的地址即可;因此,單鏈表是一種隨機存取結構。錯3、以鏈表作為棧的存儲結構,出棧操作必須判別??盏那闆r。對四、程序分析填空題1、已知棧的基本操作函數(shù): intInitStack(SqStack*S);//構造空棧 intStackEmpty(SqStack*S);//判斷??読ntPush(SqStack*S,ElemTypee);//入棧 intPop(SqStack*S,ElemType*e);//出棧函數(shù)conversion實現(xiàn)十進制數(shù)轉換為八進制數(shù),請將函數(shù)補充完整。voidconversion(){ InitStack(S); scanf("%d”,&N); while(N){(1); N=N/8;}while((2)){ Pop(S,&e);printf("%d”,e);}}//conversion答案:(1)Push(S,N%8) (2)!StackEmpty(S)2、寫出算法的功能。intfunction(SqQueue*Q,ElemType*e){ if(Q->front==Q->rear) returnERROR; *e=Q->base[Q->front];Q->front=(Q->front+1)%MA*SIZE; returnOK;}答案:循環(huán)隊列出隊操作3、閱讀算法f2,并回答下列問題:(1)設隊列Q=(1,3,5,2,4,6)。寫出執(zhí)行算法f2后的隊列Q;(2)簡述算法f2的功能。voidf2(Queue*Q){DataTypee;if(!QueueEmpty(Q)){e=DeQueue(Q);f2(Q);EnQueue(Q,e);}}答案:(1)6,4,2,5,3,1 (2)將隊列倒置五、綜合題1、假設以帶頭結點的循環(huán)鏈表表示隊列,并且只設一個指針指向隊尾結點,但不設頭指針,請寫出相應的入隊列算法(用函數(shù)實現(xiàn))。答案:voidEnQueue(Lnode*rear,ElemTypee){Lnode*new;New=(Lnode*)malloc(sizeof(Lnode));If(!new)returnERROR;new->data=e;new->ne*t=rear->ne*t;rear->ne*t=new;rear=new;}2、已知Q是一個非空隊列,S是一個空棧。編寫算法,僅用隊列和棧的ADT函數(shù)和少量工作變量,將隊列Q的所有元素逆置。棧的ADT函數(shù)有:voidmakeEmpty(SqStacks); 置空棧voidpush(SqStacks,ElemTypee); 元素e入棧ElemTypepop(SqStacks); 出棧,返回棧頂元素intisEmpty(SqStacks); 判斷??贞犃械腁DT函數(shù)有:voidenQueue(Queueq,ElemTypee); 元素e入隊ElemTypedeQueue(Queueq); 出隊,返回隊頭元素intisEmpty(Queueq); 判斷隊空答案:voidQueueInvent(Queueq){ElemType*;makeEmpty(SqStacks);while(!isEmpty(Queueq)){*=deQueue(Queueq);push(SqStacks,ElemType*);}while(!isEmpty(SqStacks)){*=pop(SqStacks);enQueue(Queueq,ElemType*);}}3、對于一個棧,給出輸入項A,B,C,D,如果輸入項序列為A,B,C,D,試給出全部可能的輸出序列。答案:出棧的可能序列:ABCDABDCACDBACBDADCBBACDBADCBCADBCDACBDACBADCDBADCBA第四章串一、選擇題1、設有兩個串S1和S2,求串S2在S1中首次出現(xiàn)位置的運算稱作(C)。A.連接 B.求子串 C.模式匹配D.判斷子串2、已知串S=’aaab’,則ne*t數(shù)組值為(A)。A.0123 B.1123 C.1231 D.12113、串與普通的線性表相比較,它的特殊性體現(xiàn)在(C)。A.順序的存儲結構 B.鏈式存儲結構 C.數(shù)據(jù)元素是一個字符 D.數(shù)據(jù)元素任意4、設串長為n,模式串長為m,則KMP算法所需的附加空間為(A)。A.O(m)B.O(n) C.O(m*n)D.O(nlog2m)5、空串和空格串(B)。A.相同B.不相同 C.可能相同D.無法確定6、與線性表相比,串的插入和刪除操作的特點是(A)。A.通常以串整體作為操作對象 B.需要更多的輔助空間 C.算法的時間復雜度較高 D.涉及移動的元素更多7、設SUBSTR(S,i,k)是求S中從第i個字符開始的連續(xù)k個字符組成的子串的操作,則對于S=’Beijing&Nanjing’,SUBSTR(S,4,5)=(B)。A.‘ijing’ B.‘jing&’ C.‘ingNa’ D.‘ing&N’二、判斷題(對)1、造成簡單模式匹配算法BF算法執(zhí)行效率低的原因是有回溯存在。(對)2、KMP算法的最大特點是指示主串的指針不需要回溯。(對)3、完全二叉樹*結點有右子樹,則必然有左子樹。三、填空題1、求子串在主串中首次出現(xiàn)的位置的運算稱為。答案:模式匹配設s=’I︺AM︺A︺TEACHER’,其長度是。答案:14兩個串相等的充分必要條件是兩個串的長度相等且。答案:對應位置的字符也相同四、程序填空題1、函數(shù)kmp實現(xiàn)串的模式匹配,請在空格處將算法補充完整。intkmp(sqstring*s,sqstring*t,intstart,intne*t[]){ inti=start-1,j=0; while(i<s->len&&j<t->len) if(j==-1||s->data[i]==t->data[j]){ i++;j++; } elsej=ne*t[j]; if(j>=t->len) return(i-t->len); else return(-1);}2、函數(shù)實現(xiàn)串的模式匹配算法,請在空格處將算法補充完整。intinde*_bf(sqstring*s,sqstring*t,intstart){inti=start-1,j=0;while(i<s->len&&j<t->len)if(s->data[i]==t->data[j]){i++;j++;}else{i=i-j+1;j=0;}if(j>=t->len)returni-t->len+1;elsereturn-1;}}/*listDelete*/3、寫出下面算法的功能。intfunction(SqString*s1,SqString*s2){ inti; for(i=0;i<s1->length&&i<s1->length;i++) if(s->data[i]!=s2->data[i]) returns1->data[i]-s2->data[i]; returns1->length-s2->length;}答案:.串比較算法4、寫出算法的功能。intfun(sqstring*s,sqstring*t,intstart){inti=start-1,j=0;while(i<s->len&&j<t->len)if(s->data[i]==t->data[j]){i++;j++;}else{i=i-j+1;j=0;}if(j>=t->len)returni-t->len+1;elsereturn-1;}答案:串的模式匹配算法第五章數(shù)組和廣義表一、選擇題1、設廣義表L=((a,b,c)),則L的長度和深度分別為(C)。A.1和1 B.1和3 C.1和2 D.2和32、廣義表((a),a)的表尾是(B)。A.a B.(a) C.() D.((a))3、稀疏矩陣的常見壓縮存儲方法有(C)兩種。A.二維數(shù)組和三維數(shù)組 B.三元組和散列表 C.三元組和十字鏈表 D.散列表和十字鏈表4、一個非空廣義表的表頭(D)。A.不可能是子表 B.只能是子表 C.只能是原子D.可以是子表或原子5、數(shù)組A[0..5,0..6]的每個元素占5個字節(jié),將其按列優(yōu)先次序存儲在起始地址為1000的內存單元中,則元素A[5][5]的地址是(A)。A.1175 B.1180 C.1205 D.12106、廣義表G=(a,b(c,d,(e,f)),g)的長度是(A)。A.3 B.4 C.7 D.87、采用稀疏矩陣的三元組表形式進行壓縮存儲,若要完成對三元組表進行轉置,只要將行和列對換,這種說法(B)。A.正確B.錯誤 C.無法確定 D.以上均不對8、廣義表(a,b,c)的表尾是(B)。A.b,c B.(b,c)C.c D.(c)9、常對數(shù)組進行兩種基本操作是(C)。A.建立和刪除 B.索引和修改C.查找和修改 D.查找與索引10、對一些特殊矩陣采用壓縮存儲的目的主要是為了(D)。A.表達變得簡單 B.對矩陣元素的存取變得簡單 C.去掉矩陣中的多余元素D.減少不必要的存儲空間的開銷11、設有一個10階的對稱矩陣A,采用壓縮存儲方式,以行序為主存儲,a11為第一個元素,其存儲地址為1,每元素占1個地址空間,則a85的地址為(B)。A.13 B.33 C.18 D.4012、設矩陣A是一個對稱矩陣,為了節(jié)省存儲,將其下三角部分按行序存放在一維數(shù)組B[1,n(n-1)/2]中,對下三角部分中任一元素ai,j(i>=j),在一維數(shù)組B的下標位置k的值是(A)。A.i(i-1)/2+j-1 B.i(i-1)/2+j C.i(i+1)/2+j-1 D.i(i+1)/2+j13、廣義表A=((a),a)的表頭是(B)。A.a B.(a) C.b D.((a))14、稀疏矩陣一般的壓縮存儲方法有兩種,即(C)。A.二維數(shù)組和三維數(shù)組 B.三元組和散列 C.三元組和十字鏈表 D.散列和十字鏈表15、假設以三元組表表示稀疏矩陣,則與如圖所示三元組表對應的4×5的稀疏矩陣是(注:矩陣的行列下標均從1開始)(B)。A.B.C. D.16、以下有關廣義表的表述中,正確的是(A)。A.由0個或多個原子或子表構成的有限序列 B.至少有一個元素是子表 C.不能遞歸定義 D.不能為空表17、對廣義表L=((a,b),((c,d),(e,f)))執(zhí)行head(tail(head(tail(L))))操作的結果是(D)。A.的 B.e C.(e) D.(e,f)二、判斷題(錯)1、廣義表中原子個數(shù)即為廣義表的長度。(錯)2、一個稀疏矩陣采用三元組表示,若把三元組中有關行下標與列下標的值互換,并把mu和nu的值進行互換,則完成了矩陣轉置。(對)3、稀疏矩陣壓縮存儲后,必會失去隨機存取功能。(錯)4、廣義表的長度是指廣義表中括號嵌套的層數(shù)。(對)5、廣義表是一種多層次的數(shù)據(jù)結構,其元素可以是單原子也可以是子表。三、填空題1、已知二維數(shù)組A[m][n]采用行序為主方式存儲,每個元素占k個存儲單元,并且第一個元素的存儲地址是LOC(A[0][0]),則A[i][j]的地址是Loc(A[0][0])+(i*N+j)*k。2、廣義表運算式HEAD(TAIL((a,b,c),(*,y,z)))的結果是:(*,y,z)。3、二維數(shù)組,可以按照按行序為主和按列序為主兩種不同的存儲方式。4、稀疏矩陣的壓縮存儲方式有:三元組表和十字鏈表法。四、綜合題1、現(xiàn)有一個稀疏矩陣,請給出它的三元組表。答案:第六章樹一、選擇題1、二叉樹的深度為k,則二叉樹最多有(C)個結點。A.2k B.2k-1C.2k-1 D.2k-12、用順序存儲的方法,將完全二叉樹中所有結點按層逐個從左到右的順序存放在一維數(shù)組R[1..N]中,若結點R[i]有右孩子,則其右孩子是(B)。A.R[2i-1] B.R[2i+1] C.R[2i] D.R[2/i]3、設a,b為一棵二叉樹上的兩個結點,在中序遍歷時,a在b前面的條件是(B)。A.a在b的右方 B.a在b的左方C.a是b的祖先 D.a是b的子孫4、設一棵二叉樹的中序遍歷序列:badce,后序遍歷序列:bdeca,則二叉樹先序遍歷序列為(D)。A.adbce B.decab C.debac D.abcde5、在一棵具有5層的滿二叉樹中結點總數(shù)為(A)。A.31 B.32 C.33 D.166、由二叉樹的前序和后序遍歷序列(B)惟一確定這棵二叉樹。A.能 B.不能【解析:二叉樹的前序和中序遍歷序列可以唯一確定一顆二叉樹;二叉樹的中序和后序遍歷序列可以唯一確定一顆二叉樹;而二叉樹的前序和后序遍歷序列不能惟一確定一棵二叉樹】7、*二叉樹的中序序列為ABCDEFG,后序序列為BDCAFGE,則其左子樹中結點數(shù)目為(C)。A.3 B.2 C.4 D.58、若以{4,5,6,7,8}作為權值構造哈夫曼樹,則該樹的帶權路徑長度為(C)。A.67 B.68 C.69 D.709、將一棵有100個結點的完全二叉樹從根這一層開始,每一層上從左到右依次對結點進行編號,根結點的編號為1,則編號為49的結點的左孩子編號為(A)。A.98 B.99 C.50 D.4810、表達式a*(b+c)-d的后綴表達式是(B)。A.abcd+- B.abc+*d- C.abc*+d- D.-+*abcd11、對*二叉樹進行先序遍歷的結果為ABDEFC,中序遍歷的結果為DBFEAC,則后序遍歷的結果是(B)。 A.DBFEAC B.DFEBCA C.BDFECA D.BDEFAC12、樹最適合用來表示(C)。A.有序數(shù)據(jù)元素 B.無序數(shù)據(jù)元素 C.元素之間具有分支層次關系的數(shù)據(jù) D.元素之間無聯(lián)系的數(shù)據(jù)13、表達式A*(B+C)/(D-E+F)的后綴表達式是(C)。 A.A*B+C/D-E+F B.AB*C+D/E-F+ C.ABC+*DE-F+/ D.ABCDED*+/-+14、在線索二叉樹中,t所指結點沒有左子樹的充要條件是(B)。A.t->left==NULL B.t->ltag==1C.t->ltag==1&&t->left==NULL D.以上都不對15、任何一棵二叉樹的葉結點在先序、中序和后序遍歷序列中的相對次序(A)。A.不發(fā)生改變 B.發(fā)生改變 C.不能確定 D.以上都不對16、假定在一棵二叉樹中,度為2的結點數(shù)為15,度為1的結點數(shù)為30,則葉子結點數(shù)為(B)個。A.15 B.16 C.17 D.4717、在下列情況中,可稱為二叉樹的是(C)。A.每個結點至多有兩棵子樹的樹B.哈夫曼樹C.每個結點至多有兩棵子樹的有序樹D.每個結點只有一棵子樹18、用順序存儲的方法,將完全二叉樹中所有結點按層逐個從左到右的順序存放在一維數(shù)組R[1..n]中,若結點R[i]有左孩子,則其左孩子是(C)。A.R[2i-1] B.R[2i+1] C.R[2i] D.R[2/i]19、下面說法中正確的是(D)。A.度為2的樹是二叉樹B.度為2的有序樹是二叉樹 C.子樹有嚴格左右之分的樹是二叉樹 D.子樹有嚴格左右之分,且度不超過2的樹是二叉樹20、樹的先根序列等同于與該樹對應的二叉樹的(A)。A.先序序列B.中序序列C.后序序列D.層序序列 21、按照二叉樹的定義,具有3個結點的二叉樹有(C)種。A.3 B.4 C.5 D.622、由權值為3,6,7,2,5的葉子結點生成一棵哈夫曼樹,它的帶權路徑長度為(A)。A.51 B.23 C.53 D.74二、判斷題(對)1、存在這樣的二叉樹,對它采用任何次序的遍歷,結果相同。(對)2、中序遍歷一棵二叉排序樹的結點,可得到排好序的結點序列。(對)3、對于任意非空二叉樹,要設計其后序遍歷的非遞歸算法而不使用堆棧結構,最適合的方法是對該二叉樹采用三叉鏈表。(錯)4、在哈夫曼編碼中,當兩個字符出現(xiàn)的頻率相同時,其編碼也相同,對于這種情況應做特殊處理。(對)5、一個含有n個結點的完全二叉樹,它的高度是log2n+1。(對)6、完全二叉樹的*結點若無左孩子,則它必是葉結點。三、填空題1、具有n個結點的完全二叉樹的深度是log2n+1。2、哈夫曼樹是其樹的帶權路徑長度最小的二叉樹。3、在一棵二叉樹中,度為0的結點的個數(shù)是n0,度為2的結點的個數(shù)為n2,則有n0=n2+1。4、樹內各結點度的最大值稱為樹的度。四、代碼填空題1、函數(shù)InOrderTraverse(Bitreebt)實現(xiàn)二叉樹的中序遍歷,請在空格處將算法補充完整。voidInOrderTraverse(BiTreebt){ if(bt!=NULL){ InOrderTraverse(bt->lchild); printf("%c”,bt->data);InOrderTraverse(bt->rchild); } }2、函數(shù)depth實現(xiàn)返回二叉樹的高度,請在空格處將算法補充完整。 intdepth(Bitree*t){ if(t==NULL) return0;else{ hl=depth(t->lchild);hr=depth(t->rchild); if(hl>hr) returnhl+1; else returnhr+1; } }3、寫出下面算法的功能。 Bitree*function(Bitree*bt){ Bitree*t,*t1,*t2; if(bt==NULL) t=NULL; else{ t=(Bitree*)malloc(sizeof(Bitree)); t->data=bt->data; t1=function(bt->left); t2=function(bt->right); t->left=t2; t->right=t1; } return(t); }答案:交換二叉樹結點左右子樹的遞歸算法4、寫出下面算法的功能。voidfunction(Bitree*t){ if(p!=NULL){ function(p->lchild); function(p->rchild); printf("%d”,p->data);}}答案:二叉樹后序遍歷遞歸算法五、綜合題1、假設以有序對<p,c>表示從雙親結點到孩子結點的一條邊,若已知樹中邊的集合為{<a,b>,<a,d>,<a,c>,<c,e>,<c,f>,<c,g>,<c,h>,<e,i>,<e,j>,<g,k>},請回答下列問題:(1)哪個結點是根結點?a(2)哪些結點是葉子結點?b,d,i,j,f,k,h(3)哪些結點是k的祖先?g,c,a(4)哪些結點是j的兄弟?i(5)樹的深度是多少?42、假設一棵二叉樹的先序序列為EBADCFHGIKJ,中序序列為ABCDEFGHIJK,請畫出該二叉樹。【知識點:二叉樹前序序列的隱含性質:第一個一定是二叉樹的根,后面緊跟著的是其左子樹的根;二叉樹后序序列的隱含性質:最后一個一定是二叉樹的根,它的緊前一個是其右子樹的根】答案:3、假設用于通訊的電文僅由8個字母A、B、C、D、E、F、G、H組成,字母在電文中出現(xiàn)的頻率分別為:0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。請為這8個字母設計哈夫曼編碼。答案:4、已知二叉樹的先序遍歷序列為ABCDEFGH,中序遍歷序列為CBEDFAGH,畫出二叉樹。答案:二叉樹形態(tài)5、試用權集合{12,4,5,6,1,2}構造哈夫曼樹,并計算哈夫曼樹的帶權路徑長度。答案:WPL=12*1+(4+5+6)*3+(1+2)*4=12+45+12=696、已知權值集合為{5,7,2,3,6,9},要求給出哈夫曼樹,并計算帶權路徑長度WPL。答案:(1)樹形態(tài):(2)帶權路徑長度:WPL=(6+7+9)*2+5*3+(2+3)*4=44+15+20=797、已知一棵二叉樹的先序序列:ABDGJEHCFIKL;中序序列:DJGBEHACKILF。畫出二叉樹的形態(tài)。答案:8、一份電文中有6種字符:A,B,C,D,E,F,它們的出現(xiàn)頻率依次為16,5,9,3,30,1,完成問題:(1)設計一棵哈夫曼樹;(畫出其樹結構)(2)計算其帶權路徑長度WPL;答案:(1)樹形態(tài):(2)帶權路徑長度:WPL=30*1+16*2+9*3+5*4+(1+3)*5=30+32+27+20+20=1299、已知*森林的二叉樹如下所示,試畫出它所表示的森林。答案:有一分電文共使用5個字符;a,b,c,d,e,它們的出現(xiàn)頻率依次為4、7、5、2、9,試構造哈夫曼樹,并給出每個字符的哈夫曼編碼。答案:11、畫出與下圖所示的森林相對應的二叉樹,并指出森林中的葉子結點在二叉樹中具有什么特點。答案:12、如下所示的二叉樹,請寫出先序、中序、后序遍歷的序列。答案:先序:FDBACEGIHJ中序:ABCDEFGHIJ后序:ACBEDHJIGF六、編程題1、編寫求一棵二叉樹中結點總數(shù)的算法。答案:(以先序遍歷的方法為例)voidcount_preorder(Bitree*t,int*n){if(t!=NULL){*n++;count_preorder(t->lchild);count_preorder(t->lchild);}}第七章圖一、選擇題1、12、對于具有n個頂點的圖,若采用鄰接矩陣表示,則該矩陣的大小為(B)。A.n B.n2 C.n-1 D.(n-1)22、如果從無向圖的任一頂點出發(fā)進行一次深度優(yōu)先搜索即可訪問所有頂點,則該圖一定是(B)。A.完全圖 B.連通圖 C.有回路 D.一棵樹3、關鍵路徑是事件結點網絡中(A)。A.從源點到匯點的最長路徑 B.從源點到匯點的最短路徑 C.最長的回路 D.最短的回路4、下面(B)可以判斷出一個有向圖中是否有環(huán)(回路)。 A.廣度優(yōu)先遍歷 B.拓撲排序C.求最短路徑 D.求關鍵路徑5、帶權有向圖G用鄰接矩陣A存儲,則頂點i的入度等于A中(B)。A.第i行非無窮的元素之和B.第i列非無窮的元素個數(shù)之和C.第i行非無窮且非0的元素個數(shù) D.第i行與第i列非無窮且非0的元素之和6、采用鄰接表存儲的圖,其深度優(yōu)先遍歷類似于二叉樹的(B)。A.中序遍歷B.先序遍歷C.后序遍歷 D.按層次遍歷7、無向圖的鄰接矩陣是一個(A)。A.對稱矩陣 B.零矩陣 C.上三角矩陣 D.對角矩陣8、當利用大小為N的數(shù)組存儲循環(huán)隊列時,該隊列的最大長度是(B)。A.N-2 B.N-1 C.N D.N+19、鄰接表是圖的一種(B)。A.順序存儲結構B.鏈式存儲結構C.索引存儲結構D.散列存儲結構10、下面有向圖所示的拓撲排序的結果序列是(B)。A.125634 B.516234 C.123456 D.52164311、在無向圖中定義頂點vi與vj之間的路徑為從vi到vj的一個(A)。A.頂點序列B.邊序列 C.權值總和D.邊的條數(shù) 12、在有向圖的逆鄰接表中,每個頂點鄰接表著該頂點所有(A)鄰接點。A.入邊 B.出邊 C.入邊和出邊 D.不是出邊也不是入邊13、設G1=(V1,E1)和G2=(V2,E2)為兩個圖,如果V1V2,E1E2則稱(A)。A.G1是G2的子圖 B.G2是G1的子圖 C.G1是G2的連通分量 D.G2是G1的連通分量14、已知一個有向圖的鄰接矩陣表示,要刪除所有從第i個結點發(fā)出的邊,應(B)。A.將鄰接矩陣的第i行刪除 B.將鄰接矩陣的第i行元素全部置為0C.將鄰接矩陣的第i列刪除 D.將鄰接矩陣的第i列元素全部置為015、任一個有向圖的拓撲序列(D)。A.不存在 B.有一個 C.一定有多個D.有一個或多個16、在一個有向圖中,所有頂點的入度之和等于所有頂點的出度之和的(B)倍。A.1/2 B.1 C.2 D.417、下列關于圖遍歷的說法不正確的是(C)。A.連通圖的深度優(yōu)先搜索是一個遞歸過程 B.圖的廣度優(yōu)先搜索中鄰接點的尋找具有"先進先出”的特征 C.非連通圖不能用深度優(yōu)先搜索法 D.圖的遍歷要求每一頂點僅被訪問一次18、帶權有向圖G用鄰接矩陣A存儲,則頂點i的入度為A中:(D)。A.第i行非的元素之和B.第i列非的元素之和C.第i行非且非0的元素個數(shù) D.第i列非且非0的元素個數(shù)19、采用鄰接表存儲的圖的廣度優(yōu)先遍歷算法類似于二叉樹的(D)。A.先序遍歷 B.中序遍歷 C.后序遍歷 D.按層次遍歷20、一個具有n個頂點的有向圖最多有(B)條邊。A.n×(n-1)/2 B.n×(n-1)C.n×(n+1)/2 D.n221、已知一個有向圖的鄰接表存儲結構如圖所示,根據(jù)深度優(yōu)先遍歷算法,從頂點v1出發(fā),所得到的頂點序列是(C)。A.v1,v2,v3,v5,v4 B.v1,v2,v3,v4,v5C.v1,v3,v4,v5,v2 D.v1,v4,v3,v5,v222、關鍵路徑是事件結點網絡中(A)。A.從源點到匯點的最長路徑 B.從源點到匯點的最短路徑C.最長的回路 D.最短的回路23、以下說法正確的是(B)。A.連通分量是無向圖中的極小連通子圖B.強連通分量是有向圖中的極大強連通子圖C.在一個有向圖的拓撲序列中若頂點a在頂點b之前,則圖中必有一條弧<a,b>D.對有向圖G,如果以任一頂點出發(fā)進行一次深度優(yōu)先或廣度優(yōu)先搜索能訪問到每個頂點,則該圖一定是完全圖24、假設有向圖含n個頂點及e條弧,則表示該圖的鄰接表中包含的弧結點個數(shù)為(B)。A.nB.eC.2e D.n*e25、設圖的鄰接矩陣為,則該圖為(A)。A.有向圖 B.無向圖 C.強連通圖 D.完全圖26、為便于判別有向圖中是否存在回路,可借助于(D)。A.廣度優(yōu)先搜索算法 B.最小生成樹算法C.最短路徑算法D.拓撲排序算法27、任何一個無向連通圖的最小生成樹(B)種。A.只有一棵B.有一棵或多棵 C.一定有多棵 D.可能不存在28、已知一有向圖的鄰接表存儲結構如圖所示,根據(jù)有向圖的廣度優(yōu)先遍歷算法,從頂點v1出發(fā),所得到的頂點序列是(B)。112345324524^^^^^v1,v2,v3,v4,v5B.v1,v3,v2,v4,v5C.v1,v2,v3,v5,v4 D.v1,v4,v3,v5,v229、對于一個有向圖,若一個頂點的入度為k1,、出度為k2,則對應鄰接表中該頂點單鏈表中的結點數(shù)為(B)。A.k1 B.k2 C.k1+k2 D.k1-k230、一個具有8個頂點的有向圖中,所有頂點的入度之和與所有頂點的出度之和的差等于(C)。A.16 B.4 C.0 D.231、無向圖中一個頂點的度是指圖中(B)。A.通過該頂點的簡單路徑數(shù)B.與該頂點相鄰接的頂點數(shù)C.與該頂點連通的頂點數(shù) D.通過該頂點的回路數(shù)二、填空題1、n個頂點的連通圖至少有邊。答案:n-1條2、一個連通圖的生成樹是一個,它包含圖中所有頂點,但只有足以構成一棵樹的n-1條邊。答案:極小連通子圖3、一個圖的表示法是惟一的。答案:鄰接矩陣4、遍歷圖的基本方法有深度優(yōu)先搜索和廣度優(yōu)先搜索,其中是一個遞歸過程。答案:深度優(yōu)先搜索5、在無向圖G的鄰接矩陣A中,若A[i][j]等于1,則A[j][i]等于。答案:16、判定一個有向圖是否存在回路,可以利用。答案:拓撲排序已知一個圖的鄰接矩陣表示,計算第i個結點的入度的方法是。答案:第i列上非無窮元素的個數(shù)之和n個頂點的無向圖最多有邊。答案:n*(n-1)/2已知一個圖的鄰接矩陣表示,刪除所有從第i個結點出發(fā)的邊的方法是。答案:將鄰接矩陣的第i行元素全部置為0.若以鄰接矩陣表示有向圖,則鄰接矩陣上第i行中非零元素的個數(shù)即為頂點vi的。答案:出度三、判斷題1、圖的連通分量是無向圖的極小連通子圖。錯2、一個圖的廣度優(yōu)先搜索樹是惟一的。錯3、圖的深度優(yōu)先搜索序列和廣度優(yōu)先搜索序列不是惟一的。對4、鄰接表只能用于存儲有向圖,而鄰接矩陣則可存儲有向圖和無向圖。錯5、存儲圖的鄰接矩陣中,鄰接矩陣的大小不但與圖的頂點個數(shù)有關,而且與圖的邊數(shù)也有關。錯6、AOV網是一個帶權的有向圖。錯7、從源點到終點的最短路徑是唯一的。錯8、鄰接表只能用于存儲有向圖,而鄰接矩陣則可存儲有向圖和無向圖。dui9、圖的生成樹是惟一的。錯四、程序分析題1、寫出下面算法的功能。typedefstruct{intve*num,arum; charve*s[N]; intarcs[N][N];}graph;voidfuntion(inti,graph*g){
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 品牌營銷中的故事敘述技巧計劃
- 圖書館評估體系與方法試題及答案
- 急診實時監(jiān)測系統(tǒng)建設計劃
- 美術選修課程設置探討計劃
- 如何發(fā)展品牌忠誠度計劃
- 實踐出真知的教學理念計劃
- 安保團隊中的團隊合作與協(xié)作精神
- 幼兒園探索性學習活動實施方案計劃
- 2025瑞祥苑新建筑工程合同混凝土
- 國際化品牌建設的市場戰(zhàn)略
- 服裝數(shù)字化設計技術課件 3-1男襯衫款式分析
- TSCNA 0001-2024 成人體外膜肺氧合(ECMO)技術護理規(guī)范
- 2025新人教版七年級歷史下教案-第6課 隋唐時期的中外文化交流
- 中國近現(xiàn)代史綱要學習心得體會對青少年成長的影響
- 2025年安徽港航集團所屬企業(yè)招聘13人筆試參考題庫附帶答案詳解
- 倉庫管理基礎知識培訓
- 大班安全教育:不攀爬高處
- 2024年醫(yī)師定期考核考題《臨床練習》
- 法律職業(yè)倫理知到智慧樹章節(jié)測試課后答案2024年秋溫州大學
- 2025年數(shù)字安徽有限責任公司招聘筆試參考題庫含答案解析
- Unit 9 Hot Soup Lesson 1 I'm thirsty(說課稿)-2023-2024學年北師大版(三起)英語四年級下冊
評論
0/150
提交評論