




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第一章概論—、選擇題1、 研究數(shù)據(jù)結(jié)構(gòu)就是研究(D)。數(shù)據(jù)的邏輯結(jié)構(gòu) B.數(shù)據(jù)的存儲結(jié)構(gòu)C.數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)D.數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)及其基本操作2、 算法分析的兩個主要方面是(A)。空間復(fù)雜度和時間復(fù)雜度 B.正確性和簡單性C.可讀性和文檔性D.數(shù)據(jù)復(fù)雜性和程序復(fù)雜性3、 具有線性結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)是(D)。圖 B.樹 C.廣義表 D.棧4、 計算機(jī)中的算法指的是解決某一個問題的有限運(yùn)算序列,它必須具備輸入、輸出、(B)等5個特性。可執(zhí)行性、可移植性和可擴(kuò)充性 B.可執(zhí)行性、有窮性和確定性C.確定性、有窮性和穩(wěn)定性 D.易讀性、穩(wěn)定性和確定性5、 下面程序段的時間復(fù)雜度是(C)。for(i=0;i<m;i++)for(j=0;j<n;j++)a[i][j]=i*j;O(m2) B.O(n2) C.O(m*n) D.O(m+n)6、 算法是(D)。計算機(jī)程序 B.解決問題的計算方法 C.排序算法D.解決問題的有限運(yùn)算序列7、 某算法的語句執(zhí)行頻度為(3n+nlog2n+n2+8),其時間復(fù)雜度表示(C)。O(n) B.O(nlogn) C.O(n2) D.O(logn)、 , , . 2 28、 下面程序段的時間復(fù)雜度為(C)。i=1;while(i<=n)i=i*3;A.O(n) B.O(3n) C.O(logn) D.O(m)3.9、 數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計算的程序設(shè)計問題中計算機(jī)的數(shù)據(jù)元素以及它們之間的(B)和運(yùn)算等的學(xué)科。A.結(jié)構(gòu)B.關(guān)系C.運(yùn)算D.算法10、 下面程序段的時間復(fù)雜度是(A)。i=s=0;while(s<n)(i++;s+=i;根號(n)}A.O(n) B.O(n2) C.O(logn) D.O(m)11、抽象數(shù)據(jù)類型的三個組成部分分別為(A)。2A.數(shù)據(jù)對象、數(shù)據(jù)關(guān)系和基本操作 B.數(shù)據(jù)元素、邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)C.數(shù)據(jù)項(xiàng)、數(shù)據(jù)元素和數(shù)據(jù)類型D.C.數(shù)據(jù)項(xiàng)、數(shù)據(jù)元素和數(shù)據(jù)類型D.數(shù)據(jù)元素、數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型12、 通常從正確性、易讀性、健壯性、高效性等4個方面評價算法的質(zhì)量,以下解釋錯誤的是(D)。正確性算法應(yīng)能正確地實(shí)現(xiàn)預(yù)定的功能易讀性算法應(yīng)易于閱讀和理解,以便調(diào)試、修改和擴(kuò)充健壯性當(dāng)環(huán)境發(fā)生變化時,算法能適當(dāng)?shù)刈龀龇磻?yīng)或進(jìn)行處理,不會產(chǎn)生不需要的運(yùn)行結(jié)果高效性即達(dá)到所需要的時間性能13、 下列程序段的時間復(fù)雜度為(B)。x=n;y=0;while(x>=(y+1)*(y+1))y=y+1;A.O(n)B.A.O(n)B.O印 C.O(1)D.O(n2)二、 填空題1、 程序段“i=1;while(i<=n)i=i*2;”的時間復(fù)雜度為。2、 數(shù)據(jù)結(jié)構(gòu)的四種基本類型中, 樹形結(jié)構(gòu) 的元素是一對多關(guān)系。三、 綜合題1、將數(shù)量級O(1),O(N),O(N2),O(N3),O(NLOGN),O(LOGN),O(2n)按增長率由小到大排序。 2 2答案:O(1)O(logN)O(N)O(NlogN)O(N2)O(N3)O(2n)2 第二章線性表一、選擇題1、 若長度為n的線性表采用順序存儲結(jié)構(gòu),在其第i個位置插入一個新元素算法的時間復(fù)雜度()。A.O(logn) B.O(1) C.O(n) D.O(w).. .,.22、 若一個線性表中最常用的操作是取第i個元素和找第i個元素的前趨元素,則采用()存儲方式最節(jié)省時間。A.順序表B.單鏈表C.雙鏈表 D.單循環(huán)鏈表3、 具有線性結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)是()。A.圖 B.樹 C.廣義表D.棧4、 在一個長度為n的順序表中,在第i個元素之前插入一個新元素時,需向后移動()個元素。A.n-i B.n-i+1 C.n-i-1 D.i非空的循環(huán)單鏈表head的尾結(jié)點(diǎn)p滿足(A.p->next==headC.p==NULL鏈表不具有的特點(diǎn)是(非空的循環(huán)單鏈表head的尾結(jié)點(diǎn)p滿足(A.p->next==headC.p==NULL鏈表不具有的特點(diǎn)是('A.可隨機(jī)訪問任一元素C.不必事先估計存儲空間在雙向循環(huán)鏈表中,在P指針?biāo)傅慕Y(jié)點(diǎn)后插入一個指針q所指向的新結(jié)點(diǎn),修改指針的操作是(5、6、7、)。)。B.D.)。p->next==NULLp==headB.插入刪除不需要移動元素D.所需空間與線性表長度成正比p->next=q;q->prior=p;p->next->prior=q;q->next=q;p->next=q;p->next->prior=q;q->prior=p;q->next=p->next;q->prior=p;q->next=p->next;p->next->prior=q;p->next=q;q->next=p->next;q->prior=p;p->next=q;p->next=q;8、 線性表采用鏈?zhǔn)酱鎯r,結(jié)點(diǎn)的存儲地址()。A.必須是連續(xù)的 B.必須是不連續(xù)的C.連續(xù)與否均可 D.和頭結(jié)點(diǎn)的存儲地址相連續(xù)9、 在一個長度為n的順序表中刪除第i個元素,需要向前移動()個元素。A.n-i B.n-i+1 C.n-i-1 D.i+110、 線性表是「個()的有限序列。A.表元素B.字符 C.數(shù)據(jù)元素 D.數(shù)據(jù)項(xiàng)11、 從表中任一結(jié)點(diǎn)出發(fā),都能掃描整個表的是()。A.單鏈表B.順序表C.循環(huán)鏈表 D.靜態(tài)鏈表12、 在具有n個結(jié)點(diǎn)的單鏈表上查找值為x的元素時,其時間復(fù)雜度為()。A.O(n) B.O(1) C.O(n2) D.O(n-1)13、 線性表L=(a1,a2, ,an),下歹U說法正確的是()。每個元素都有一個直接前驅(qū)和一個直接后繼線性表中至少要有一個元素表中諸元素的排列順序必須是由小到大或由大到小除第一個和最后一個元素外,其余每個元素都由一個且僅有一個直接前驅(qū)和直接后繼14、 一個順序表的第一個元素的存儲地址是90,每個元素的長度為2,則第6個元素的存儲地址是()。A.98 B.100C.102 D.10615、 在線性表的下列存儲結(jié)構(gòu)中,讀取元素花費(fèi)的時間最少的是()。A.單鏈表B.雙鏈表 C.循環(huán)鏈表 D.順序表16、 在一個單鏈表中,若刪除p所指向結(jié)點(diǎn)的后續(xù)結(jié)點(diǎn),則執(zhí)行()。p->next=p->next->next;p=p->next;p->next=p->next->next;p=p->next;p=p->next->next;17、 將長度為n的單鏈表連接在長度為m的單鏈表之后的算法的時間復(fù)雜度為()。A.O(1)B.O(n)C.O(m)D.O(m+n)18、 線性表的順序存儲結(jié)構(gòu)是一種()存儲結(jié)構(gòu)。A.隨機(jī)存取B.順序存取 C.索引存取 D.散列存取19、 順序表中,插入一個元素所需移動的元素平均數(shù)是()。A.(n-1)/2B.nC.n+1 D.(n+1)/210、 循環(huán)鏈表的主要優(yōu)點(diǎn)是()。A.不再需要頭指針 B.已知某結(jié)點(diǎn)位置后能容易找到其直接前驅(qū)在進(jìn)行插入、刪除運(yùn)算時能保證鏈表不斷開在表中任一結(jié)點(diǎn)出發(fā)都能掃描整個鏈表11、 不帶頭結(jié)點(diǎn)的單鏈表head為空的判定條件是(A)。A.head==NULL B.head->next==NULLC.head->next==head D.head!=NULL答案B是帶頭結(jié)點(diǎn)的12、 在下列對順序表進(jìn)行的操作中,算法時間復(fù)雜度為O(1)的是()。A.訪問第i個元素的前驅(qū)(1<in)B.在第i個元素之后插入一個新元素(1in)C.刪除第i個元素(1in) D.對順序表中元素進(jìn)行排序答案是A.假設(shè)順序表L,長度為n,求第i個節(jié)點(diǎn)L[i],直接前驅(qū)L[i-1],因此為O(1)答案B需要移動n-i+1個節(jié)點(diǎn),因此為O(n)答案C也需要移動n-i個節(jié)點(diǎn)答案D根據(jù)排序方法不同最慢O(n”2),最快O(nlogn)13、 已知指針p和q分別指向某單鏈表中第一個結(jié)點(diǎn)和最后一個結(jié)點(diǎn)。假設(shè)指針s指向另一個單鏈表中某個結(jié)點(diǎn),則在s所指結(jié)點(diǎn)之后插入上述鏈表應(yīng)執(zhí)行的語句為()。q->next=s->next;s->next=p;s->next=p;q->next=s->next;p->next=s->next;s->next=q;s->next=q;p->next=s->next;14、 在以下的敘述中,正確的是()。線性表的順序存儲結(jié)構(gòu)優(yōu)于鏈表存儲結(jié)構(gòu)線性表的順序存儲結(jié)構(gòu)適用于頻繁插入/刪除數(shù)據(jù)元素的情)兄線性表的鏈表存儲結(jié)構(gòu)適用于頻繁插入/刪除數(shù)據(jù)元素的情兄線性表的鏈表存儲結(jié)構(gòu)優(yōu)于順序存儲結(jié)構(gòu)15、 在表長為n的順序表中,當(dāng)在任何位置刪除一個元素的概率相同時,刪除一個元素所需移動的平均個數(shù)為()。A.(n-1)/2 B.n/2 C.(n+1)/2D.n16、 在一個單鏈表中,已知q所指結(jié)點(diǎn)是p所指結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn),若在q和p之間插入一個結(jié)點(diǎn)s,則執(zhí)行()。s->next=p->next;p->next=s;p->next=s->next;s->next=p;q->next=s;s->next=p;p->next=s;s->next=q;17、 在單鏈表中,指針p指向元素為x的結(jié)點(diǎn),實(shí)現(xiàn)刪除x的后繼的語句是()。A.p=p->next; B. p->next=p->next->next;p->next=p; D. p=p->next->next;18、 在頭指針為head且表長大于1的單循環(huán)鏈表中,指針p指向表中某個結(jié)點(diǎn),若p->next->next==head,則( )。A.p指向頭結(jié)點(diǎn) B.p指向尾結(jié)點(diǎn) C.p的直接后繼是頭結(jié)點(diǎn)p的直接后繼是尾結(jié)點(diǎn)二、填空題1、設(shè)單鏈表的結(jié)點(diǎn)結(jié)構(gòu)為(data,next)。已知指針p指向單鏈表中的結(jié)點(diǎn),q指向新結(jié)點(diǎn),欲將q插入到P結(jié)點(diǎn)之后,則需要執(zhí)行的語句:;。答案:q->next=p->nextp->next=q2、 線性表的邏輯結(jié)構(gòu)是,其所含元素的個數(shù)稱為線性表的。答案:線性結(jié)構(gòu)長度3、 寫出帶頭結(jié)點(diǎn)的雙向循環(huán)鏈表L為空表的條件。答案:L->prior==L->next==L4、 帶頭結(jié)點(diǎn)的單鏈表head為空的條件是 。答案:head->next==NULL5、 在一個單鏈表中刪除p所指結(jié)點(diǎn)的后繼結(jié)點(diǎn)時,應(yīng)執(zhí)行以下操作:q=p->next;p->next=_q->next ;三、 判斷題1、 單鏈表不是一種隨機(jī)存儲結(jié)構(gòu)。2、 在具有頭結(jié)點(diǎn)的單鏈表中,頭指針指向鏈表的第一個數(shù)據(jù)結(jié)點(diǎn)。3、 用循環(huán)單鏈表表示的鏈隊列中,可以不設(shè)隊頭指針,僅在隊尾設(shè)置隊尾指針。4、 順序存儲方式只能用于存儲線性結(jié)構(gòu)。5、 在線性表的順序存儲結(jié)構(gòu)中,邏輯上相鄰的兩個元素但是在物理位置上不一定是相鄰的。6、 鏈?zhǔn)酱鎯Φ木€性表可以隨機(jī)存取。X四、 程序分析填空題1、 函數(shù)GetElem實(shí)現(xiàn)返回單鏈表的第i個元素,請在空格處將算法補(bǔ)充完整。intGetElem(LinkListL,inti,Elemtype*e){LinkListp;intj;p=L->next;j=1;while(p&&j<i){(1) ;++j;}if(!p||j>i)returnERROR;*e= ;returnOK;}答案:(1)p=p->next(2)p->data2、 函數(shù)實(shí)現(xiàn)單鏈表的插入算法,請在空格處將算法補(bǔ)充完整。intListInsert(LinkListL,inti,ElemTypee)(LNode*p,*s;intj;P=L;j=0;while((p!=NULL)&&(j<i-1)){ p=p->next;j++;}if(p==NULL||j>i-1)returnERROR;s=(LNode*)malloc(sizeof(LNode));s->data=e; ; ;returnOK;}/(2) ;s=q->data;(2) ;s=q->data;free(q);returnOK;}/*listDelete*/答案:(1)p->next!=NULL(2)p->next=q->next5、 寫出算法的功能。intL(head)(node*head;intn=0;node*p;p=head;while(p!=NULL)(p=p->next;n++;}return(n);答案:(1)s->next=p->next (2)p->next=s3、 函數(shù)ListDelete_sq實(shí)現(xiàn)順序表刪除算法,請在空格處將算法補(bǔ)充完整。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ù)實(shí)現(xiàn)單鏈表的刪除算法,請在空格處將算法補(bǔ)充完整。intListDelete(LinkListL,inti,ElemType*s)(LNode*p,*q;intj;P=L;j=0;while(((1))&&(j<i-1)){p=p->next;j++;}if(p->next==NULL||j>i-1)returnERROR;q=p->next;答案:求單鏈表head的長度五、綜合題1、 編寫算法,實(shí)現(xiàn)帶頭結(jié)點(diǎn)單鏈表的逆置算法。答案:voidinvent(Lnode*head)(Lnode*p,*q;if(!head->next)returnERROR;p=head->next;q=p->next;p->next=NULL;while(q)(p=q;q=q->next;p->next=head->next;head->next=p;}}2、 有兩個循環(huán)鏈表,鏈頭指針分別為L1和L2,要求寫出算法將L2鏈表鏈到L1鏈表之后,且連接后仍保持循環(huán)鏈表形式。答案:voidmerge(Lnode*L1,Lnode*L2)(Lnode*p,*q;while(p->next!=L1)p=p->next;while(q->next!=L2)q=q->next;q->next=L1;p->next=L2;}3、 設(shè)一個帶頭結(jié)點(diǎn)的單向鏈表的頭指針為head,設(shè)計算法,將鏈表的記錄,按照data域的值遞增排序。答案:voidassending(Lnode*head)(Lnode*p,*q,*r,*s;p=head->next;q=p->next;p->next=NULL;while(q)(r=q;q=q->next;if(r->data<=p->data)(r->next=p;head->next=r;p=r;}else(while(!p&&r->data>p->data)(s=p;p=p->next;}r->next=p;s->next=r;}p=head->next;}}4、編寫算法,將一個頭指針為head不帶頭結(jié)點(diǎn)的單鏈表改造為一個單向循環(huán)鏈表,并分析算法的時間復(fù)雜度。答案:o:voidlinklist_c(Lnode*head)(Lnode*p;p=head;if(!p)returnERROR;
while(p->next!=NULL)p=p->next;p->next=head;}設(shè)單鏈表的長度(數(shù)據(jù)結(jié)點(diǎn)數(shù))為N,則該算法的時間主要花費(fèi)在查找鏈表最后一個結(jié)點(diǎn)上(算法中的while循環(huán)),所以該算法的時間復(fù)雜度為O(N)。5、已知head為帶頭結(jié)點(diǎn)的單循環(huán)鏈表的頭指針,鏈表中的數(shù)據(jù)元素依次為(al,a2,a3,a4,…,an),A為指向空的順序表的指針。閱讀以下程序段,并回答問題:寫出執(zhí)行下列程序段后的順序表A中的數(shù)據(jù)元素;簡要敘述該程序段的功能。if(head->next!=head){p=head->next;A->length=0;while(p->next!二head)(p=p->next;A->data[A->length++]=p->data;if(p->next!=head)p=p->next;}}答案.□ ■(1)(a2,a4,…,)(2)將循環(huán)單鏈表中偶數(shù)結(jié)點(diǎn)位置的元素值寫入順序表設(shè)順序表va設(shè)順序表va中的數(shù)據(jù)元數(shù)遞增有序。試寫一算法,將乂插入到順序表的適當(dāng)位置以保持該表的有序性。6、上,答案:■voidInsert_sq(Sqlistva[],ElemTypex){inti,j,n;n=length(va[]);if(x>=va[i])va[n]=x;else{i=0;while(x>va[i])i++;for(j=n-1;j>=I;j--)va[j+1]=va[j];va[i]=x;}n++;}7、 假設(shè)線性表采用順序存儲結(jié)構(gòu),表中元素值為整型。閱讀算法f2,設(shè)順序表L=(3,7,3,2,1,1,8,7,3),寫出執(zhí)行算法f2后的線性表1的數(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)刪除順序表中重復(fù)的元素8、已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲結(jié)構(gòu)。試寫一算法,刪除表中所有大于x且小于y的元素(若表中存在這樣的元素)同時釋放被刪除結(jié)點(diǎn)空間。答案.:voidDelete_list(Lnode*head,ElemTypex,ElemTypey)(Lnode*p,*q;if(!head)returnERROR;p=head;q=p;while(!p){if(p->data>x)&&(p->data<y)}i++;if(p==head){head=p->next;free(p);p=head;q=p;}else{q->next=p->next;free(p);p=q->next;}else(q=p;p=p->next;}}}9、在帶頭結(jié)點(diǎn)的循環(huán)鏈表L中,結(jié)點(diǎn)的數(shù)據(jù)元素為整型,且按值遞增有序存放。給定兩個整數(shù)a和b,且a<b,編寫算法刪除鏈表L中元素值大于a且小于b的所有結(jié)點(diǎn)。第三章棧和隊列—、選擇題1、 一個棧的輸入序列為:a,b,c,d,e,則棧的不可能輸出的序列是()。a,b,c,d,e B.d,e,c,b,aC.d,c,e,a,b D.e,d,c,b,a2、 判斷一個循環(huán)隊列。(最多口個元素)為滿的條件是()。Q->rear==Q->front B.Q->rear==Q->front+1C.Q->front==(Q->rear+1)%n D.Q->front==(Q->rear-1)%n3、 設(shè)計一個判別表達(dá)式中括號是否配對的算法,采用()數(shù)據(jù)結(jié)構(gòu)最佳。A.順序表 B.鏈表 C.隊列 D.棧4、 帶頭結(jié)點(diǎn)的單鏈表head為空的判定條件是()。A.head==NULL B.head->next==NULLC.head->next!=NULL D.head!=NULL5、 一個棧的輸入序列為:1,2,3,4,則棧的不可能輸出的序列是()。A.1243 B.2134C.1432D.4312E.32146、 若用一個大小為6的數(shù)組來實(shí)現(xiàn)循環(huán)隊列,且當(dāng)rear和front的值分別為0,3。當(dāng)從隊列中刪除一個元素,再加入兩個元素后,rear和front的值分別為()。A.1和5 B.2和4 C.4和2 D.5和17、 隊列的插入操作是在()。A.隊尾 B.隊頭 C.隊列任意位置 D.隊頭元素后8、 循環(huán)隊列的隊頭和隊尾指針分別為front和rear,則判斷循環(huán)隊列為空的條件是()。A.front==rear B.front==0C.rear==0 D.front=rear+19、 一個順序棧S,其棧頂指針為top,則將元素。入棧的操作是()。A.*S->top=e;S->top++; B.S->top++;*S->top=e;C.*S->top=e D.S->top=e;10、 表達(dá)式a*(b+c)-d的后綴表達(dá)式是()。A.abcd+- B.abc+*d-C.abc*+d-D.-+*abcd11、 將遞歸算法轉(zhuǎn)換成對應(yīng)的非遞歸算法時,通常需要使用()來保存中間結(jié)果。A.隊列 B.棧 C.鏈表 D.樹12、 棧的插入和刪除操作在()。A.棧底 B.棧頂 C.任意位置 D.指定位置13、 五節(jié)車廂以編號1,2,3,4,5順序進(jìn)入鐵路調(diào)度站(棧),可以得到()的編組。A.3,4,5,1,2 B.2,4,1,3,5C.3,5,4,2,1 D.1,3,5,2,414、 判定一個順序棧S(??臻g大小為n)為空的條件是()。A.S->top==0 B.S->top!=0C.S->top==n D.S->top!=n15、 在一個鏈隊列中,front和rear分別為頭指針和尾指針,則插入一個結(jié)點(diǎn)s的操作為()。
A.front二front->next B.s->next=rear;rear=sC.rear->next=s;rear=s;D.s->next=frontfront二s;16、 一個隊列的入隊序列是1,2,3,4,則隊列的出隊序列是()。A.1,2,3,4 B.4,3,2,1C.1,4,3,2 D.3,4,1,217、 依次在初始為空的隊列中插入元素a,b,c,d以后,緊接著做了兩次刪除操作,此時的隊頭元素是()。A.a B.b C.c D.d18、 正常情況下,刪除非空的順序存儲結(jié)構(gòu)的堆棧的棧頂元素,棧頂指針top的變化是()。A.top不變 B.top=0C.top=top+1 D.top二top-119、 判斷一個循環(huán)隊歹UQ(空間大小為M)為空的條件是(A)。A.Q->front==Q->rear B.Q->rear-Q->frontT==MC.Q->front+1=Q->rear D.Q->rear+1=Q->front20、 設(shè)計一個判別表達(dá)式中左右括號是否配對出現(xiàn)的算法,采用(C)數(shù)據(jù)結(jié)構(gòu)最佳。A.線性表的順序存儲結(jié)構(gòu) B.隊列C.棧 D.線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)21、 當(dāng)用大小為N的數(shù)組存儲順序循環(huán)隊列時,該隊列的最大長度為(C)。A.N B.N+1C.N-1D.N-222、 隊列的刪除操作是在(A)。A.隊首 B.隊尾 C.隊前 D.隊后23、 若讓元素1,2,3依次進(jìn)棧,則出棧次序不可能是(C)。A.3,2,1B.2,1,3C.3,1,2D.1,3,224、 循環(huán)隊列用數(shù)組A[0,m-1]存放其元素值,已知其頭尾指針分別是front和rear,則當(dāng)前隊列中的元素個數(shù)是(A)。A.(rear-front+m)%m B.rear-front+1C.rear-front-1D.rear-frontC.rear-front-1D.rear-front25、在解決計算機(jī)主機(jī)和打印機(jī)之間速度不匹配問題時,通常設(shè)置一個打印數(shù)據(jù)緩沖區(qū),主機(jī)將要輸出的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機(jī)則從該緩沖區(qū)中取走數(shù)據(jù)打印。該緩沖區(qū)應(yīng)該是一個(B該緩沖區(qū)應(yīng)該是一個(B)結(jié)構(gòu)。A.堆棧 B.隊列26、棧和隊列都是(C)。A.鏈?zhǔn)酱鎯Φ木€性結(jié)構(gòu)C.限制存取點(diǎn)的線性結(jié)構(gòu)數(shù)組 D.線性表鏈?zhǔn)酱鎯Φ姆蔷€性結(jié)構(gòu)限制存取點(diǎn)的非線性結(jié)構(gòu)27、在一個鏈隊列中,假定front和rear分別為隊頭指針和隊尾指針,刪除一個結(jié)點(diǎn)的操作是(A)。A.front=front->nextB.rear=rear->nextrear->next=front D.2rear->next=front D.28、隊和棧的主要區(qū)別是(D)。A.邏輯結(jié)構(gòu)不同C.所包含的運(yùn)算個數(shù)不同front->next=rear存儲結(jié)構(gòu)不同限定插入和刪除的位置不同二、填空題1、 設(shè)棧S和隊列。的初始狀態(tài)為空,元素e1,e2,e3,e4,e5,e6依次通過棧S,一個元素出棧后即進(jìn)入隊列Q,若6個元素出隊的序列是e2,e4,e3,e6,e5,e1,則棧的容量至少應(yīng)該是 O答案:32、 一個循環(huán)隊列。的存儲空間大小為M,其隊頭和隊尾指針分別為front和rear,則循環(huán)隊列中元素的個數(shù)為:O答案:(rear-front+M)%M3、 在具有n個元素的循環(huán)隊列中,隊滿時具有個元素。答案:n-14、 設(shè)循環(huán)隊列的容量為70,現(xiàn)經(jīng)過一系列的入隊和出隊操作后,front為20,rear為11,則隊列中元素的個數(shù)為O答案:615、 已知循環(huán)隊列的存儲空間大小為20,且當(dāng)前隊列的頭指針和尾指針的值分別為8和3,且該隊列的當(dāng)前的長度為15o三、判斷題1、 棧和隊列都是受限的線性結(jié)構(gòu)。2、 在單鏈表中,要訪問某個結(jié)點(diǎn),只要知道該結(jié)點(diǎn)的地址即可;因此,單鏈表是一種隨機(jī)存取結(jié)構(gòu)。3、 以鏈表作為棧的存儲結(jié)構(gòu),出棧操作必須判別??盏那?兄。四、程序分析填空題1、 已知棧的基本操作函數(shù):intInitStack(SqStack*S);//構(gòu)造空棧intStackEmpty(SqStack*S);//判斷棧空intPush(SqStack*S,ElemTypee);//入棧intPop(SqStack*S,ElemType*e);//出棧函數(shù)conversion實(shí)現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)換為八進(jìn)制數(shù),請將函數(shù)補(bǔ)充完整。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)%MAXSIZE;returnOK;}若循環(huán)隊列非空,隊頭元素出隊列且返回其值,否則返回空元素。3、閱讀算法三2,并回答下列問題:設(shè)隊列Q二(1,3,5,2,4,6)。寫出執(zhí)行算法f2后的隊列Q;簡述算法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、假設(shè)以帶頭結(jié)點(diǎn)的循環(huán)鏈表表示隊列,并且只設(shè)一個指針指向隊尾結(jié)點(diǎn),但不設(shè)頭指針,請寫出相應(yīng)的入隊列算法(用函數(shù)實(shí)現(xiàn))。答案:voidEnQueue(Lnode*rear,ElemTypee)(Lnode*new;New=(Lnode*)malloc(sizeof(Lnode));If(!new)returnERROR;new->data=e;new->next=rear->next;rear->next=new;rear=new;}2、已知Q是一個非空隊列,S是一個空棧。編寫算法,僅用隊列和棧的ADT函數(shù)和少量工作變量,將隊列Q的所有元素逆置。棧的ADT函數(shù)有:voidmakeEmpty(SqStacks);置空棧voidpush(SqStacks,ElemTypee);元素e入棧ElemTypepop(SqStacks);出棧,返回棧頂元素intisEmpty(SqStacks);判斷棧空隊列的ADT函數(shù)有: _voidenQueue(Queueq,ElemTypee);元素e入隊ElemTypedeQueue(Queueq);出隊,返回隊頭元素
intisEmpty(Queueq); 判斷隊空答案:voidQueueInvent(Queueq)(ElemTypex;makeEmpty(SqStacks);while(!isEmpty(Queueq))(x=deQueue(Queueq);push(SqStacks,ElemTypex);}while(!isEmpty(SqStacks))(x=pop(SqStacks);enQueue(Queueq,ElemTypex);}}3、對于一個棧,給出輸入項(xiàng)A,B,C,D,如果輸入項(xiàng)序列為A,B,C,D,試給出全部可能的輸出序列。4,1,4,1,2,1,1答案:出棧的可能序列:ABCDABDCACDBACBDADCBBACDBADCBCADBCDABDCACBDACBADCDBADCBA第四章串一、選擇題1、 設(shè)有兩個串S1和S2,求串S2在S1中首次出現(xiàn)位置的運(yùn)算稱作(C)。連接 B.求子串 C.模式匹配 D.判斷子串2、 已知串S=’aaab’,則next數(shù)組值為(A)。A.0123 B.1123 C.1231 D.12113、 串與普通的線性表相比較,它的特殊性體現(xiàn)在(C)。A.順序的存儲結(jié)構(gòu) B.鏈?zhǔn)酱鎯Y(jié)構(gòu) C.數(shù)據(jù)元素是一個字符 D.數(shù)據(jù)元素任意4、 設(shè)串長為n,模式串長為m,則KMP算法所需的附加空間為(A)。A.O(m) B.O(n)C.O(m*n) D.Olnlog^n)5、 空串和空格串(B)。A.相同 B.不相同 C.可能相同 D.無法確定6、 與線性表相比,串的插入和刪除操作的特點(diǎn)是(B)。A.通常以串整體作為操作對象 B.需要更多的輔助空間算法的時間復(fù)雜度較高 D.涉及移動的元素更多7、 設(shè)SUBSTR(S,i,k)是求S中從第i個字符開始的連續(xù)k個字符組成的子串的操作,則對于S=’Beijing&Nanjing’,SUBSTR(S,4,5)=(B)。A.‘ijingB.‘jing&’ C.‘ingNa’ D.A.‘ijingB.‘jing&’ C.‘ingNa’ D.‘ing&N’二、 判斷題(x)1、造成簡單模式匹配算法BF算法執(zhí)行效率低的原因是有回溯存在。(^)2、KMP算法的最大特點(diǎn)是指示主串的指針不需要回溯。(^)3、完全二叉樹某結(jié)點(diǎn)有右子樹,則必然有左子樹。三、 填空題1、 求子串在主串中首次出現(xiàn)的位置的運(yùn)算稱為 模式匹配。2、 設(shè)s=’I^AM^A^TEACHER’,其長度是—_14__。3、兩個串相等的充分必要條件是兩個串的長度相等且 對應(yīng)位置字符相同。四、程序填空題1、 函數(shù)kmp實(shí)現(xiàn)串的模式匹配,請在空格處將算法補(bǔ)充完整。intkmp(sqstring*s,sqstring*t,intstart,intnext[])(inti=start-1,j=0;while(i<s->len&&j<t->len)if(j==-1||s->data[i]==t->data[j])(i++;j++;}elsej= ;if(j>=t->len)return( );elsereturn(-1);}2、 函數(shù)實(shí)現(xiàn)串的模式匹配算法,請在空格處將算法補(bǔ)充完整。intindex_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、 設(shè)廣義表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的內(nèi)存單元中,則元素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.7D.87、 采用稀疏矩陣的三元組表形式進(jìn)行壓縮存儲,若要完成對三元組表進(jìn)行轉(zhuǎn)置,只要將行和列對換,這種說法(B)。A.正確 B.錯誤 C.無法確定 D.以上均不對8、 廣義表(a,b,c)的表尾是(B)。A.b,c B.(b,c) C.c D.(c)9、 常對數(shù)組進(jìn)行兩種基本操作是(C)。A.建立和刪除 B.索引和修改C.查找和修改 D.查找與索引10、 對一些特殊矩陣采用壓縮存儲的目的主要是為了(D)。A.表達(dá)變得簡單 B.對矩陣元素的存取變得簡單C.去掉矩陣中的多余元素 D.減少不必要的存儲空間的開銷11、 設(shè)有一個10階的對稱矩陣A,采用壓縮存儲方式,以行序?yàn)橹鞔鎯?,a11為第一個元素,其存儲地址為1,每元素占1個地址空間,則a85的地址為(B)。A.13 B.33C.18 D.4012、 設(shè)矩陣A是一個對稱矩陣,為了節(jié)省存儲,將其下三角部分按行序存放在一維數(shù)組B[1,n(n-1)/2]中,對下三角部分中任一元素ai,j(i>=j),在一維數(shù)組B的下標(biāo)位置
k的值是(B)。A.i(i-1)/2+j-1 B.i(i-1)/2+j C.i(i+1)/2+j-1i(i+1)/2+j13、 廣義表A=((a),a)的表頭是(B)。A.a B.(a) C.bD.((a))14、 稀疏矩陣一般的壓縮存儲方法有兩種,即(C)。A.二維數(shù)組和三維數(shù)組 B.三元組和散列 C.三元組和十字鏈表D.散列和十字鏈表15、假設(shè)以三元組表表示稀疏矩陣,則與如圖所示三元組表對應(yīng)的4x5的稀疏矩陣是(注:矩陣的行列下標(biāo)均從0 8 0 6 0a是(注:矩陣的行列下標(biāo)均從0 8 0 6 0a7 0 0 0 0A..0 0 0 0 05 0 4 0 00 8 0 6 0「 0 0 0 0 3C.7 0 0 0 05 0 4 0 01開始)(B)。0 8060d7 0 003B.5 0 4000 0 0000 8060D7 0000.5 0 4030 0 00012-814621725331~533416、以下有關(guān)廣義表的表述中,正確的是(A)。A.由0A.由0個或多個原子或子表構(gòu)成的有限序列表C.不能遞歸定義B.至少有一個元素是于D.不能為空表17、對廣義表L=((a,b),((c,d),(e,f)))執(zhí)行head(tail(head(tail(L))))操作的結(jié)果是(D)。A.的 B.e C.(e) D.(e,f)二、 判斷題(x)1、廣義表中原子個數(shù)即為廣義表的長度。(x)2、一個稀疏矩陣采用三元組表示,若把三元組中有關(guān)行下標(biāo)與列下標(biāo)的值互換,并把mu和nu的值進(jìn)行互換,則完成了矩陣轉(zhuǎn)置。(^)3、稀疏矩陣壓縮存儲后,必會失去隨機(jī)存取功能。(x)4、廣義表的長度是指廣義表中括號嵌套的層數(shù)。(^)5、廣義表是一種多層次的數(shù)據(jù)結(jié)構(gòu),其元素可以是單原子也可以是子表。三、 填空題1、 已知二維數(shù)組A[m][n]采用行序?yàn)橹鞣绞酱鎯?,每個元素占k個存儲單元,并且第一個元素的存儲地址是LOC(A[0][0]),則A[i][j]的地址是Loc(A[0][0])+(i*N+j)*k。2、 廣義表運(yùn)算式HEAD(TAIL((a,b,c),(x,y,z)))的結(jié)果是: (x,y,z) 。3、 二維數(shù)組,可以按照列序?yàn)橹骱托行驗(yàn)橹?兩種不同的存儲方式。4、 稀疏矩陣的壓縮存儲方式有:三元組和十字鏈表。四、 綜合題1、現(xiàn)有一個稀疏矩陣,請給出它的三元組表。0310100002100020答案.□ ■ijv12313121132233143-2第六早樹—、選擇題1、 二叉樹的深度為k,則二叉樹最多有(C)個結(jié)點(diǎn)。A.2k B.2k-i C.2k-1 D.2k-12、 用順序存儲的方法,將完全二叉樹中所有結(jié)點(diǎn)按層逐個從左到右的順序存放在一維數(shù)組R[1..N]中,若結(jié)點(diǎn)R[i]有右孩子,則其右孩子是(B)。A.R[2i-1] B.R[2i+1]C.R[2i] D.R[2/i]3、 設(shè)a,b為一棵二叉樹上的兩個結(jié)點(diǎn),在中序遍歷時,a在b前面的條件是(B)。A.a在b的右方 B.a在b的左方 C.a是b的祖先 D.a是b的子孫4、 設(shè)一棵二叉樹的中序遍歷序歹U:badce,后序遍歷序列:bdeca,則二叉樹先序遍歷序列為(D)。A.adbce B.decabC.debacD.abcde5、 在一棵具有5層的滿二叉樹中結(jié)點(diǎn)總數(shù)為(A)。A.31 B.32C.33D.166、 由二叉樹的前序和后序遍歷序列(B)惟一確定這棵二叉樹。A.能B.不能7、 某二叉樹的中序序列為ABCDEFG,后序序列為BDCAFGE,則其左子樹中結(jié)點(diǎn)數(shù)目為(C)。A.3 B.2 C.4D.58、 若以{4,5,6,7,8}作為權(quán)值構(gòu)造哈夫曼樹,則該樹的帶權(quán)路徑長度為(C)。A.67 B.68 C.69 D.709、 將一棵有100個結(jié)點(diǎn)的完全二叉樹從根這一層開始,每一層上從左到右依次對結(jié)點(diǎn)進(jìn)行編號,根結(jié)點(diǎn)的編號為1,則編號為49的結(jié)點(diǎn)的左孩子編號為(A)。A.98 B.99 C.50D.4810、 表達(dá)式a*(b+c)-d的后綴表達(dá)式是(B)。A.abcd+- B.abc+*d-C.abc*+d-D.-+*abcd11、 對某二叉樹進(jìn)行先序遍歷的結(jié)果為ABDEFC,中序遍歷的結(jié)果為DBFEAC,則后序遍歷的結(jié)果是(B)。
A.DBFEACB.DFEBCAC.BDFECAD.BDEFAC12、 樹最適合用來表示(C)。A.有序數(shù)據(jù)元素 B.無序數(shù)據(jù)元素 C.元素之間具有分支層次關(guān)系的數(shù)據(jù) D.元素之間無聯(lián)系的數(shù)據(jù)13、 表達(dá)式A*(B+C)/(D-E+F)的后綴表達(dá)式是(C)。A.A*B+C/D-E+FB.AB*C+D/E-F+C.ABC+*DE-F+/D.ABCDED*+/-+14、 在線索二叉樹中,t所指結(jié)點(diǎn)沒有左子樹的充要條件是(B)。A.t->left==NULL B.t->ltag==1C.t->ltag==1&&t->left==NULLD.以上都不對15、 任何一棵二叉樹的葉結(jié)點(diǎn)在先序、中序和后序遍歷序列中的相對次序(A)。A.不發(fā)生改變 B.發(fā)生改變 C.不能確定 D.以上都不對16、 假定在一棵二叉樹中,度為2的結(jié)點(diǎn)數(shù)為15,度為1的結(jié)點(diǎn)數(shù)為30,則葉子結(jié)點(diǎn)數(shù)為(B)個。A.15B.16C.17D.4717、 在下列情況中,可稱為二叉樹的是(B)。A.每個結(jié)點(diǎn)至多有兩棵子樹的樹 B.哈夫曼樹每個結(jié)點(diǎn)至多有兩棵子樹的有序樹 D.每個結(jié)點(diǎn)只有一棵子樹18、 用順序存儲的方法,將完全二叉樹中所有結(jié)點(diǎn)按層逐個從左到右的順序存放在一維數(shù)組R[1..n]中,若結(jié)點(diǎn)R[i]有左孩子,則其左孩子是《 )。A.R[2i-1] B.R[2i+1] C.R[2i] D.R[2/i]19、 下面說法中正確的是(D)。A.度為2的樹是二叉樹 B.度為2的有序樹是二叉樹D.子樹有嚴(yán)格左右之分,且)。D.子樹有嚴(yán)格左右之分,且)。C.后序序列 D.度不超過2的樹是二叉樹20、樹的先根序列等同于與該樹對應(yīng)的二叉樹的(AA.先序序列 B.中序序列層序序列21、按照二叉樹的定義,具有3個結(jié)點(diǎn)的二叉樹有(C)種。A.3B.4 C.5D.622、由權(quán)值為3,6,7,2,5的葉子結(jié)點(diǎn)生成一棵哈夫曼樹,它的帶權(quán)路徑長度為(A)。A.51 B.23 C.53 D.74二、 判斷題(^)1、存在這樣的二叉樹,對它采用任何次序的遍歷,結(jié)果相同。(x)2、中序遍歷一棵二叉排序樹的結(jié)點(diǎn),可得到排好序的結(jié)點(diǎn)序列。(^)3、對于任意非空二叉樹,要設(shè)計其后序遍歷的非遞歸算法而不使用堆棧結(jié)構(gòu),最適合的方法是對該二叉樹采用三叉鏈表。(x)4、在哈夫曼編碼中,當(dāng)兩個字符出現(xiàn)的頻率相同時,其編碼也相同,對于這種情況應(yīng)做特殊處理。(^)5、一個含有n個結(jié)點(diǎn)的完全二叉樹,它的高度是log^i+1。(^)6、完全二叉樹的某結(jié)點(diǎn)若無左孩子,則它必是葉結(jié)點(diǎn)。三、 填空題1、 具有n個結(jié)點(diǎn)的完全二叉樹的深度是 。2、 哈夫曼樹是其樹的帶權(quán)路徑長度 最小的二叉樹。3、 在一棵二叉樹中,度為0的結(jié)點(diǎn)的個數(shù)是n0,度為2的結(jié)點(diǎn)的個數(shù)為n2,則有n0=N2+1。4、 樹內(nèi)各結(jié)點(diǎn)度的最大值 稱為樹的度。四、代碼填空題1、 函數(shù)InOrderTraverse(Bitreebt)實(shí)現(xiàn)二叉樹的中序遍歷,請在空格處將算法補(bǔ)允完整。voidInOrderTraverse(BiTreebt)(if()(InOrderTraverse(bt->lchild);printf(“%c”,bt->data); ;}}2、 函數(shù)depth實(shí)現(xiàn)返回二叉樹的高度,請在空格處將算法補(bǔ)充完整。intdepth(Bitree*t){if(t==NULL)return0;else(hl=depth(t->lchild);hr=depth(t->rchild);if(hl>hr)returnhl+1;elsereturnhr+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);}答案:交換二叉樹結(jié)點(diǎn)左右子樹的遞歸算法
4、寫出下面算法的功能。voidfunction(Bitree*t){if(p!二NULL){function(p->lchild);function(p->rchild);printf(“%d”,p->data);}答案:二叉樹后序遍歷遞歸算法五、綜合題1、假設(shè)以有序?qū)?lt;P,c>表示從雙親結(jié)點(diǎn)到孩子結(jié)點(diǎn)的一條邊,若已知樹中邊的集合為{<a,b>,<a,d>,<a,c>,<c,e>,<c,f>,<c,g>,<c,h>,<e,i>,<e,j>,<g,k>},請回答下列問題:(1) 哪個結(jié)點(diǎn)是根結(jié)點(diǎn)?(2) 哪些結(jié)點(diǎn)是葉子結(jié)點(diǎn)?(3) 哪些結(jié)點(diǎn)是k的祖先?(4) 哪些結(jié)點(diǎn)是j的兄弟?(5) 樹的深度是多少?。2、假設(shè)一棵二叉樹的先序序列為EBADCFHGIKJ,中序序列為ABCDEFGHIJK,請畫出該二叉樹。3、假設(shè)用于通訊的電及僅由8個字胃A、B、C、D、E、F、G、H組成,字胃在電文中0.32,0.03,0.21,0.10。請為這80.32,0.03,0.21,0.10。請為這8個字胃設(shè)計哈夫曼編碼。1006213011答案: C F000101381000017100111100011006213011答案: C F00010138100001710011110001010014、已知二叉樹的先序遍歷序列為ABCDEFGH,中序遍歷序列為CBEDFAGH,畫出二叉樹。答案:二叉樹形態(tài)5、試用權(quán)集合{12,4,5,6,1,2}構(gòu)造哈夫曼樹,并計算哈夫曼樹的帶權(quán)路徑長度。答案..WPL=12*1+(4+5+6)*3+(1+2)*4=12+45+12=696、已知權(quán)值集合為{5,7,2,3,6,9},要求給出哈夫曼樹,并計算帶權(quán)路徑長度WPL。答案:(1)樹形態(tài):(2)帶權(quán)路徑長度: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,
完成問題:設(shè)計一棵哈夫曼樹;(畫出其樹結(jié)構(gòu))計算其帶權(quán)路徑長度WPL;答案:(1)樹形態(tài):13(2)帶權(quán)路徑長度:WPL=30*1+16*2+9*3+5*4+(1+3)*5=30+32+27+20+20=1299、已知某森林的二叉樹如下所示,試畫出它所表示的森林。10、 有一分電及共使用5個字符;a,b,c,d,e,它們的出現(xiàn)頻率依次為4、7、5、2、9,試構(gòu)造哈夫曼樹,并給出每個字符的哈夫曼編碼。11、 畫出與下圖所示的森林相對應(yīng)的二叉樹,并指出森林中的葉子結(jié)點(diǎn)在二叉樹中具有什么特點(diǎn)。
12、如下所示的二叉樹,請寫出先序、中序、后序遍歷的序列。12、如下所示的二叉樹,請寫出先序、中序、后序遍歷的序列。答案:先序:FDBACEGIHJ中序:ABCDEFGHIJ后序:ACBEDHJIGF六、編程題1、編寫求一棵二叉樹中結(jié)點(diǎn)總數(shù)的算法。答案:(以先序遍歷的方法為例)voidcount_preorder(Bitree*t,int*n)(if(t!=NULL)(*n++;count_preorder(t->lchild);count_preorder(t->lchild);}} —第七章圖一、選擇題1、 12、對于具有n個頂點(diǎn)的圖,若采用鄰接矩陣表示,則該矩陣的大小為()。n B.n2 C.n-1 D.(n-1)2)。2、 如果從無向圖的任一頂點(diǎn)出發(fā)進(jìn)行一次深度優(yōu)先搜索即可訪問所有頂點(diǎn),則該圖一定是()。A.完全圖 B.連通圖3A.完全圖 B.連通圖3、 關(guān)鍵路徑是事件結(jié)點(diǎn)網(wǎng)絡(luò)中(A.從源點(diǎn)到匯點(diǎn)的最長路徑C.最長的回路C.有回路D.一棵樹)。D.B.從源點(diǎn)到匯點(diǎn)的最短路徑最短的回路4、 下面()可以判斷出一個有向圖中是否有環(huán)(回路)。廣度優(yōu)先遍歷 B.拓?fù)渑判駽.求最短路徑 D.求關(guān)鍵路徑5、 帶權(quán)有向圖G用鄰接矩陣A存儲,則頂點(diǎn)1的入度等于入中()。第i行非無窮的元素之和 B.第i列非無窮的元素個數(shù)之和C.第i行非無窮且非0的元素個數(shù) D.第i行與第1列非無窮且非0的元素之和6、 采用鄰接表存儲的圖,其深度優(yōu)先遍歷類似于二叉樹的()。中序遍歷B.先序遍歷 C.后序遍歷 D.按層次遍歷7、 無向圖的鄰接矩陣是一個()。A.對稱矩陣 B.零矩陣 C.上三角矩陣 D.對角矩陣8、 當(dāng)利用大小為N的數(shù)組存儲循環(huán)隊列時,該隊列的最大長度是()。A.N-2 B.N-1 C.N D.N+19、 鄰接表是圖的一種()。A.順序存儲結(jié)構(gòu) B.鏈?zhǔn)酱鎯Y(jié)構(gòu) C.索引存儲結(jié)構(gòu)D.散列存儲結(jié)構(gòu)10、 下面有向圖所示的拓?fù)渑判虻慕Y(jié)果序列是()。A.125634 B.516234C.123456D.52164311、 在無向圖中定義頂點(diǎn)vi與vj之間的路徑為從vi到vj的一個()。A.頂點(diǎn)序列 B.邊序列C.權(quán)值總和 D.邊的條數(shù)12、 在有向圖的逆鄰接表中,每個頂點(diǎn)鄰接表鏈接著該頂點(diǎn)所有()鄰接點(diǎn)。A.入邊 B.出邊 C.入邊和出邊 D.不是出邊也不是入邊13、 設(shè)G1=(V1,E1)和G2=(V2,E2)為兩個圖,如果V1V2,E1£2則稱()。A.G1是G2的子圖 B.G2是61的子圖C.G1是G2的連通分量D.G2是G1的連通分量14、 已知一個有向圖的鄰接矩陣表示,要刪除所有從第i個結(jié)點(diǎn)發(fā)出的邊,應(yīng)()。A.將鄰接矩陣的第i行刪除 B.將鄰接矩陣的第i行元素全部置為0C.將鄰接矩陣的第碩刪除 D.將鄰接矩陣的第頊元素全部置為015、 任一個有向圖的拓?fù)湫蛄校ǎ?。A.不存在 B.有一個C.一定有多個 D.有一個或多個16、 在一個有向圖中,所有頂點(diǎn)的入度之和等于所有頂點(diǎn)的出度之和的()倍。A.1/2 B.1 C.2 D.417、 下列關(guān)于圖遍歷的說法不正確的是()。連通圖的深度優(yōu)先搜索是一個遞歸過程圖的廣度優(yōu)先搜索中鄰接點(diǎn)的尋找具有“先進(jìn)先出”的特征非連通圖不能用深度優(yōu)先搜索法
圖的遍歷要求每一頂點(diǎn)僅被訪問一次18、 帶權(quán)有向圖G用鄰接矩陣A存儲,則頂點(diǎn)底入度為A中:()。A.第i行非的元素之和 B.第1列非的元素之和C.第i行非且非0的元素個數(shù) D.第i列非且非0的元素個數(shù)19、 采用鄰接表存儲的圖的廣度優(yōu)先遍歷算法類似于二叉樹的()。A.先序遍歷 B.中序遍歷C.后序遍歷 D.按層次遍歷20、 一個具有n個頂點(diǎn)的有向圖最多有()條邊。A.nx(nT)/2 B.nx(nT) C.nx(n+1)/2 D.n221、 已知一個有向圖的鄰接表存儲結(jié)構(gòu)如圖所示,根據(jù)深度優(yōu)先遍歷算法,從頂點(diǎn)1出發(fā),所得到的頂點(diǎn)序列是()。A.v1,v2,v3,v5,v4C.v1,v3,v4,v5,v2D.2A.v1,v2,v3,v5,v4C.v1,v3,v4,v5,v2D.22、 關(guān)鍵路徑是事件結(jié)點(diǎn)網(wǎng)絡(luò)中(A.從源點(diǎn)到匯點(diǎn)的最長路徑C.最長的回路23、 以下說法正確的是()。v1,v2,v3,v4,v5v1,v4,v3,v5,v2)。從源點(diǎn)到匯點(diǎn)的最短路徑D.最短的回路連通分量是無向圖中的極小連通子圖強(qiáng)連通分量是有向圖中的極大強(qiáng)連通子圖在一個有向圖的拓?fù)湫蛄兄腥繇旤c(diǎn)a在頂點(diǎn)b之前,則圖中必有一條弧<a,b>D.對有向圖G,如果以任一頂點(diǎn)出發(fā)進(jìn)行一次深度優(yōu)先或廣度優(yōu)先搜索能訪問到每個頂點(diǎn),則該圖一定是完全圖24、假設(shè)有向圖含n個頂點(diǎn)及。條彌,則表示該圖的鄰接表中包含的弧結(jié)點(diǎn)個數(shù)為()。A.n B.eC.2eD.n*e01125、設(shè)圖的鄰接矩陣為001,則該圖為()。010A.有向圖B.無向圖 C.強(qiáng)連通圖D.完全圖26、 為便于判別有向圖中是否存在回路,可借助于()。A.廣度優(yōu)先搜索算法 B.最小生成樹算法最短路徑算法 D.拓?fù)渑判蛩惴?7、 任何一個無向連通圖的最小生成樹()種。A.只有一棵B.有一棵或多棵 C.一定有多棵D.可能不存在28、已知一有向圖的鄰接表存儲結(jié)構(gòu)如圖所示,根據(jù)有向圖的廣度優(yōu)先遍歷算法,從頂點(diǎn)v1出發(fā),所得到的頂點(diǎn)序列是()。A.v1,v2,v3,v4,v5B.v1,v3,v2,v4,v5C.v1,v2,v3,v5,v4D.v1,v4,v3,v5,v229、對于一個有向圖,若一個頂點(diǎn)的入度為k1,、出度為k2,則對應(yīng)鄰接表中該頂點(diǎn)單鏈表中的結(jié)點(diǎn)數(shù)為()。A.k1 B.k2 C.k1+k2 D.k1-k230、一個具有30、一個具有8個頂點(diǎn)的有向圖中,等于()。所有頂點(diǎn)的入度之和與所有頂點(diǎn)的出度之和的差D.2)。B.與該頂點(diǎn)相鄰接的頂點(diǎn)數(shù)D.通過該頂點(diǎn)的回路數(shù)D.2)。B.與該頂點(diǎn)相鄰接的頂點(diǎn)數(shù)D.通過該頂點(diǎn)的回路數(shù)31、無向圖中一個頂點(diǎn)的度是指圖中(A.通過該頂點(diǎn)的簡單路徑數(shù)與該頂點(diǎn)連通的頂點(diǎn)數(shù)二、填空題邊。1、 n個頂點(diǎn)的連通圖至少有邊。答案:n-1條,,它包含圖中所有頂點(diǎn),但只有2、 一個連通圖的生成樹是一個,,它包含圖中所有頂點(diǎn),但只有足以構(gòu)成一棵樹的n-1條邊。答案:極小連通子圖3、 一個圖的表示法是惟一的。答案:鄰接矩陣是一個遞歸過4、 遍歷圖的基本方法有深度優(yōu)先搜索和廣度優(yōu)先搜索,其中是一個遞歸過程。答案:深度優(yōu)先搜索5、 在無向圖G的鄰接矩陣A中,若A[i][j]等于1,則A[j][i]等于答案:16、 判定一個有向圖是否存在回路,可以利用。答案:拓?fù)渑判?、 已知一個圖的鄰接矩陣表示,計算第i個結(jié)點(diǎn)的入度的方法是 。8、 n個頂點(diǎn)的無向圖最多有邊。9、 已知一個圖的鄰接矩陣表示,刪除所有從第i個結(jié)點(diǎn)出發(fā)的邊的方法是。10、 若以鄰接矩陣表示有向圖,則鄰接矩陣上第i行中非零元素的個數(shù)即為頂點(diǎn)vi的。三、 判斷題1、 圖的連通分量是無向圖的極小連通子圖。2、 一個圖的廣度優(yōu)先搜索樹是惟一的。3、 圖的深度優(yōu)先搜索序列和廣度優(yōu)先搜索序列不是惟一的。4、 鄰接表只能用于存儲有向圖,而鄰接矩陣則可存儲有向圖和無向圖。5、 存儲圖的鄰接矩陣中,鄰接矩陣的大小不但與圖的頂點(diǎn)個數(shù)有關(guān),而且與圖的邊數(shù)也有關(guān)。6、 AOV網(wǎng)是一個帶權(quán)的有向圖。7、 從源點(diǎn)到終點(diǎn)的最短路徑是唯一的。8、 鄰接表只能用于存儲有向圖,而鄰接矩陣則可存儲有向圖和無向圖。9、 圖的生成樹是惟一的。四、 程序分析題1、寫出下面算法的功能。typedefstruct(intvexnum,arcnum;charvexs[N];intarcs[N][N];}graph;voidfuntion(inti,graph*g){intj;printf(〃node:%c\n〃,g->vexs[i]);visited[i]=TRUE;for(j=0;j<g->vexnum;j++)if((g->arcs[i][j]==1)&&(!visited[j]))function(j,g);}答案:實(shí)現(xiàn)圖的深度優(yōu)先遍歷算法五、綜合題1、已知圖G的鄰接矩陣如下所示:求從頂點(diǎn)1出發(fā)的廣度優(yōu)先搜索序列;根據(jù)prim算法,求圖G從頂點(diǎn)1出發(fā)的最小生成樹,要求表示出其每一步生成過程。(用圖或者表的方式均可)。615TOC\o"1-5"\h\z6 5 31 5 5 6 45 5 23 6 64 2 6答案:(1)廣度優(yōu)先遍歷序列:1;2,3,4;5;6(2)最小生成樹(prim算法)
2、設(shè)一個無向圖的鄰接矩陣如下圖所示:(1) 畫出該圖;(2) 畫出從頂點(diǎn)0出發(fā)的深度優(yōu)先生成樹;0111001010001101101010110011010001103、寫出下圖中全部可能的拓?fù)渑判蛐蛄小?、寫出下圖中全部可能的拓?fù)渑判蛐蛄?。答案?,5,2, 3, 6,4 1,5, 6, 2,3,4 5,1,2,3,6,45,1,6, 2, 3,4 5,6, 1, 2,3,44、AOE網(wǎng)G如下所示,求關(guān)鍵路徑。(要求標(biāo)明每個頂點(diǎn)的最早發(fā)生時間和最遲發(fā)生時間,并畫出關(guān)鍵路徑)答案:(1)最早發(fā)生時間和最遲發(fā)生時間: (2)關(guān)鍵路徑:頂點(diǎn)vevlv0頂點(diǎn)vevlv000v133v222v366v4 6v5 8685、已知有向圖G如下所示,根據(jù)迪杰斯特拉算法求頂點(diǎn)v0到其他頂點(diǎn)的最短距離。(給出求解過程)答案.□ ■終點(diǎn)從v0到各終點(diǎn)的d值和最短路徑的求解過程i=1i=2i=3i=4vl12(v0,v1)12(v0,v1)7(v0,v4,v1)v24(v0,v2)v39(v0,v3)8(v0,v2,v3)7(v0,v4,v3)7(v0,v4,v3)v45(v0,v4)5(v0,v4)vjv2v4v1v3s{v0,v2}{v0,v4}{v0,v4,v1}{v0,v4,v3}6、已知圖仔如下所示,根據(jù)Prim算法,構(gòu)造最小生成樹。(要求給出生成過程)答案:prim算法求最小生成樹如下:答案:prim算法求最小生成樹如下:v1,v2,v4,v6,v5,v3,v7,v8v1,v2,v4,v6,v5,v7,v3,v8v1,v2,v6,v4,v5,v3,v7,v8v1,v2,v6,v4,v5,v7,v3,v8v1,v6,v2,v4,v5,v3,v7,v8v1,v6,v2,v4,v5,v7,v3,v88、如下圖所示的AOE網(wǎng),求:(1)求事件的最早開始時間ve和最遲開始時間vl;事件123456789VeVl7、已知有向圖如下所示,請寫出該圖所有的拓?fù)湫蛄?。答案:拓?fù)渑判蛉缦?答案:(1)求ve和vl (2)7、已知有向圖如下所示,請寫出該圖所有的拓?fù)湫蛄?。答案:拓?fù)渑判蛉缦?答案:(1)求ve和vl (2)關(guān)鍵路徑事件—1 —2——3——4——5——6——7——8——9—ve064577161418—v_—0——6——6——8——7——10——16——14——18—******如下所示的有向圖,回答下面問題:(1)該圖是強(qiáng)連通的嗎?若不是,給出強(qiáng)連通分量。(2)請給出圖的鄰接矩陣和鄰接表表示。答案:(1)是強(qiáng)連通圖⑵鄰接矩陣和鄰接表為:01答案:(1)是強(qiáng)連通圖⑵鄰接矩陣和鄰接表為:0101001010000010V1v2v3v4v2v3v1v3v41 12 6 101 8 99、已知圖G的鄰接矩陣A=1 12 6 101 8 99、已知圖G的鄰接矩陣A=128 269 410 2 4,試畫出它所表示的圖G,并根據(jù)Prim算法求出圖的的最小生成樹(給出生成過程)。答案:o:(1)圖形態(tài):(2)prim算法求最小生成樹:10、如下圖所示的AOV網(wǎng),寫出其中三種拓?fù)渑判蛐蛄小?1、已知圖仔如下,根據(jù)克魯斯卡爾算法求圖G的一棵最小生成樹。(要求給出構(gòu)造過程)答案:kruskal算法的最小生成樹答案:kruskal算法的最小生成樹終點(diǎn)最短路徑求解過程b6(a,b)5(a,c,b)c3(a,c)d6(a,c,d)6(a,c,d)e7(a,c,e)7(a,c,e)7(a,c,e)f9(a,c,d,f)9(a,c,d,f)vjcbdefS{a,c}{a,c,b}{a,c,d}{a,c,e}{a,c,d,f}第九章查找AD4222FFADBB_/424225CFCKHE12、已知圖仔如下所示,求從頂點(diǎn)a到其余各頂點(diǎn)的最短路徑。(給出求解過程)CC:AD4222FFADBB_/424225CFCKHE12、已知圖仔如下所示,求從頂點(diǎn)a到其余各頂點(diǎn)的最短路徑。(給出求解過程)CC:B八D/'■B?2f、HHA—、選擇題1、 已知一個有序表為(11,22,33,44,55,66,77,88,99),則折半查找55需要比較(A)次。A.1 B.2 C.3D.42、 有一組關(guān)鍵字序列{13,16,6,34,32,98,73,1,27},哈希表的表長為13,哈希函數(shù)為H(key)二keyMOD13,沖突解決的辦法為鏈地址法,請構(gòu)造哈希表(用圖表示)。3、 解決哈希沖突的主要方法有()。A.數(shù)字分析法、除余法、平方取中法 B.數(shù)字分析法、除余法、線性探測法數(shù)字分析法、線性探測法、再哈希法 D.線性探測法、再哈希法、鏈地址法4、 在一棵深度為h的具有n個元素的二叉排序樹中,查找所有元素的最長查找長度為()。A.n B.log研 C.(h+1)/2D.h5、 已知表長為25的哈希表,用除留取余法,按公式H(key)=keyMODp建立哈希表,則p應(yīng)取()為宜。A.23 B.24 C.25 D.266、 設(shè)哈希表長m=14,哈希函數(shù)H(key)=keyMOD11。表中已有4個結(jié)點(diǎn):addr(15)=4,addr(38)=5,addr(61)=6,addr(84)二7其余地址為空,如用二次探測再散列處理沖突,則關(guān)鍵字為49的地址為(A)。A.8 B.3 C.5 D.97、 在散列查找中,平均查找長度主要與(C)有關(guān)。A.散列表長度 B.散列元素個數(shù) C.裝填因子處理沖突方法8、 根據(jù)一組記錄(56,42,50,64,48)依次插入結(jié)點(diǎn)生成一棵AVL樹,當(dāng)插入到值為的結(jié)點(diǎn)時需要進(jìn)行旋轉(zhuǎn)調(diào)整。9、 m階B-樹中的m是指()。A.每個結(jié)點(diǎn)至少具有山棵子樹 B.每個結(jié)點(diǎn)最多具有m棵子樹C.分支結(jié)點(diǎn)中包含的關(guān)鍵字的個數(shù) D.m階B-樹的深度10、 一個待散列的線性表%k={18,25,63,50,42,32,9},散列函數(shù)為H(k)=kMOD9,與18發(fā)生沖突的元素有()個。A.1 B.2 C.3 D.411、 在對查找表的查找過程中,若被查找的數(shù)據(jù)元素不存在,則把該數(shù)據(jù)元素插到集合中,這種方式主要適合于()。A.靜態(tài)查找表 B.動態(tài)查找表 C.靜態(tài)查找表和動態(tài)查找表D.兩種表都不適合12、 有一個有序表為{1,3,9,12,32,41,45,62,75,77,82,95,100},當(dāng)折半查找值為82的結(jié)點(diǎn)時,(B)次比較后查找成功。A.1 B.4 C.2 D.813、 在各種查找方法中,平均查找承擔(dān)與結(jié)點(diǎn)個數(shù)n無關(guān)的查找方法是(C)。A.順序查找 B.折半查找 C.哈希查找 D.分塊查找14、 下列二叉樹中,不平衡的二叉樹是(C)。.
15、對一棵二叉排序樹按(B)遍歷,可得到結(jié)點(diǎn)值從小到大的排列序列。D.層次DA.15、對一棵二叉排序樹按(B)遍歷,可得到結(jié)點(diǎn)值從小到大的排列序列。D.層次DA.先序B.中序 C.后序16、 解決散列法中出現(xiàn)的沖突問題常采用的方法是A.數(shù)字分析法、除余法、平方取中法線性探測法C.數(shù)字分析法、線性探測法、多重散列法列法、鏈地址法17、 對線性表進(jìn)行折半查找時,要求線性表必須(A.以順序方式存儲C.以順序方式存儲,且結(jié)點(diǎn)按關(guān)鍵字有序排序結(jié)點(diǎn)按關(guān)鍵字有序排序二、 填空題1、 在散歹U函數(shù)H(key)二key%p中,p應(yīng)取2、 已知有序表為(12,18,24,35,47,50,62,83,90,115,134),當(dāng)用折半查找90時,需進(jìn)行—次查找可確定成功。具有相同函數(shù)值的關(guān)鍵字對哈希函數(shù)來說稱為。在一棵二叉排序樹上實(shí)施遍歷后,其關(guān)鍵字序列是一個有序表。在散列存儲中,裝填因子a的值越大,則存取元素時發(fā)生沖突的可能性就越a值越小,則存取元素發(fā)生沖突的可能性就越一 小。三、 判斷題(x)1、折半查找只適用于有序表,包括有序的順序表和鏈表。()2、二叉排序樹的任意一棵子樹中,關(guān)鍵字最小的結(jié)點(diǎn)必?zé)o左孩子,關(guān)鍵字最大的結(jié)點(diǎn)必?zé)o右孩子。()3、哈希表的查找效率主要取決于哈希表造表時所選取的哈希函數(shù)和處理沖突的3、4、5、大)。)。B.B.數(shù)字分析法、除余法、D.線性探測法、多重散以鏈接方式存儲D.以鏈接方式存儲,且方法。()4、平衡二叉樹是指左右子樹的高度差的絕對值不大于1的二叉樹。(^)5、AVL是一棵二叉樹,其樹上任一結(jié)點(diǎn)的平衡因子的絕對值不大于1。四、綜合題1、選取哈希函數(shù)H(k)=(k)MOD11。用二次探測再散列處理沖突,試在0-10的散列地址空間中對關(guān)鍵字序列(22,41,53,46,30,13,01,67)造哈希表,并求等概率情)兄下查找成功時的平均查找長度。答案:(1)表形態(tài):TOC\o"1-5"\h\z0123456789 1022 01 46 13 30 41 531112 3 1 1(2)ASL:ASL(7)=(1*5+2*1+3*1)/7=(5+2+3)/7=10/72、設(shè)哈希表HT表長
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中職新能源課題申報書
- 廣東省課題的申報書
- 博士生人文課題申報書
- 中藥農(nóng)業(yè)課題申報書
- 甘肅黨建課題申報書范例
- 腎內(nèi)科課題申報書
- 協(xié)同育人課題申報書參考
- 文學(xué) 課題申報書
- 人工綠化合同范本
- 變更經(jīng)營范圍合同范例
- 礦山道路施工組織設(shè)計方案
- 徽派建筑PPT江西婺源
- 正弦函數(shù)的圖像與性質(zhì)優(yōu)秀課件
- 山東省任氏宗親分布村落
- 北師大版小學(xué)數(shù)學(xué)五年級下冊《有趣的折疊》說課稿
- 陜西省建設(shè)工程長安杯獎省優(yōu)質(zhì)工程結(jié)構(gòu)備案和復(fù)查的要求
- 典型示功圖分析(全)
- 水生觀賞動物鑒賞與維護(hù)課程
- ATOS阿托斯葉片泵PFE-31PFE-41PFE-51選型資料樣本
- 全國優(yōu)秀中醫(yī)臨床人才研修項(xiàng)目考試大綱
- 日語綜合教程第五冊的PPT5-1
評論
0/150
提交評論