版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
PAGE98數(shù)據(jù)結(jié)構(gòu)試題庫及答案第一章概論一、選擇題1、研究數(shù)據(jù)結(jié)構(gòu)就是研究(D)。A.數(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)。A.空間復(fù)雜度和時間復(fù)雜度 B.正確性和簡單性C.可讀性和文檔性D.數(shù)據(jù)復(fù)雜性和程序復(fù)雜性3、具有線性結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)是(D)。A.圖 B.樹 C.廣義表 D.棧4、計算機(jī)中的算法指的是解決某一個問題的有限運(yùn)算序列,它必須具備輸入、輸出、(B)等5個特性。A.可執(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; A.O(m2) B.O(n2) C.O(m*n) D.O(m+n)6、算法是(D)。A.計算機(jī)程序 B.解決問題的計算方法 C.排序算法 D.解決問題的有限運(yùn)算序列7、某算法的語句執(zhí)行頻度為(3n+nlog2n+n2+8),其時間復(fù)雜度表示(C)。A.O(n) B.O(nlog2n) C.O(n2) D.O(log2n)8、下面程序段的時間復(fù)雜度為(C)。 i=1; while(i<=n) i=i*3;A.O(n) B.O(3n) C.O(log3n)D.O(n3) 9、數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計算的程序設(shè)計問題中計算機(jī)的數(shù)據(jù)元素以及它們之間的()和運(yùn)算等的學(xué)科。A.結(jié)構(gòu) B.關(guān)系 C.運(yùn)算 D.算法10、下面程序段的時間復(fù)雜度是()。 i=s=0; while(s<n){ i++;s+=i; }A.O(n) B.O(n2) C.O(log2n) D.O(n3)11、抽象數(shù)據(jù)類型的三個組成部分分別為()。A.數(shù)據(jù)對象、數(shù)據(jù)關(guān)系和基本操作 B.數(shù)據(jù)元素、邏輯結(jié)構(gòu)和存儲結(jié)構(gòu) C.數(shù)據(jù)項、數(shù)據(jù)元素和數(shù)據(jù)類型 D.數(shù)據(jù)元素、數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型12、通常從正確性、易讀性、健壯性、高效性等4個方面評價算法的質(zhì)量,以下解釋錯誤的是()。 A.正確性算法應(yīng)能正確地實現(xiàn)預(yù)定的功能 B.易讀性算法應(yīng)易于閱讀和理解,以便調(diào)試、修改和擴(kuò)充 C.健壯性當(dāng)環(huán)境發(fā)生變化時,算法能適當(dāng)?shù)刈龀龇磻?yīng)或進(jìn)行處理,不會產(chǎn)生不需要的運(yùn)行結(jié)果 D.高效性即達(dá)到所需要的時間性能13、下列程序段的時間復(fù)雜度為(B)。 x=n;y=0; while(x>=(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;”的時間復(fù)雜度為。2、數(shù)據(jù)結(jié)構(gòu)的四種基本類型中,樹形結(jié)構(gòu)的元素是一對多關(guān)系。三、綜合題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.數(shù)據(jù)結(jié)構(gòu)被形式地定義為(D,R),其中D是數(shù)據(jù)元素的有限集合,R是D上的關(guān)系有限集合。2.數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的存儲結(jié)構(gòu)和數(shù)據(jù)的運(yùn)算這三個方面的內(nèi)容。3.數(shù)據(jù)結(jié)構(gòu)按邏輯結(jié)構(gòu)可分為兩大類,它們分別是線性結(jié)構(gòu)和非線性結(jié)構(gòu)。4.線性結(jié)構(gòu)中元素之間存在一對一關(guān)系,樹形結(jié)構(gòu)中元素之間存在一對多關(guān)系,圖形結(jié)構(gòu)中元素之間存在多對多關(guān)系。5.在線性結(jié)構(gòu)中,第一個結(jié)點沒有前驅(qū)結(jié)點,其余每個結(jié)點有且只有1個前驅(qū)結(jié)點;最后一個結(jié)點沒有后續(xù)結(jié)點,其余每個結(jié)點有且只有1個后續(xù)結(jié)點。6.在樹形結(jié)構(gòu)中,樹根結(jié)點沒有前驅(qū)結(jié)點,其余每個結(jié)點有且只有1個前驅(qū)結(jié)點;葉子結(jié)點沒有后續(xù)結(jié)點,其余每個結(jié)點的后續(xù)結(jié)點數(shù)可以任意多個。7.在圖形結(jié)構(gòu)中,每個結(jié)點的前驅(qū)結(jié)點數(shù)和后續(xù)結(jié)點數(shù)可以任意多個。8.?dāng)?shù)據(jù)的存儲結(jié)構(gòu)可用四種基本的存儲方法表示,它們分別是順序、鏈?zhǔn)?、索引、散列?.數(shù)據(jù)的運(yùn)算最常用的有5種,它們分別是插入、刪除、修改、查找、排序。10.一個算法的效率可分為時間效率和空間效率。11.任何一個C程序都由一個主函數(shù)和若干個被調(diào)用的其它函數(shù)組成。二、單項選擇題(B)1.非線性結(jié)構(gòu)是數(shù)據(jù)元素之間存在一種:A)一對多關(guān)系B)多對多關(guān)系C)多對一關(guān)系D)一對一關(guān)系(C)2.數(shù)據(jù)結(jié)構(gòu)中,與所使用的計算機(jī)無關(guān)的是數(shù)據(jù)的結(jié)構(gòu);A)存儲B)物理C)邏輯D)物理和存儲(C)3.算法分析的目的是:A)找出數(shù)據(jù)結(jié)構(gòu)的合理性B)研究算法中的輸入和輸出的關(guān)系C)分析算法的效率以求改進(jìn)D)分析算法的易懂性和文檔性(A)4.算法分析的兩個主要方面5是:A)空間復(fù)雜性和時間復(fù)雜性B)正確性和簡明性C)可讀性和文檔性D)數(shù)據(jù)復(fù)雜性和程序復(fù)雜性(C)5.計算機(jī)算法指的是:A)計算方法B)排序方法C)解決問題的有限運(yùn)算序列D)調(diào)度方法(B)6.計算機(jī)算法必須具備輸入、輸出和等5個特性。A)可行性、可移植性和可擴(kuò)充性B)可行性、確定性和有窮性C)確定性、有窮性和穩(wěn)定性D)易讀性、穩(wěn)定性和安全性三、簡答題1.數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型兩個概念之間有區(qū)別嗎?答:簡單地說,數(shù)據(jù)結(jié)構(gòu)定義了一組按某些關(guān)系結(jié)合在一起的數(shù)組元素。數(shù)據(jù)類型不僅定義了一組帶結(jié)構(gòu)的數(shù)據(jù)元素,而且還在其上定義了一組操作。2.簡述線性結(jié)構(gòu)與非線性結(jié)構(gòu)的不同點。答:線性結(jié)構(gòu)反映結(jié)點間的邏輯關(guān)系是一對一的,非線性結(jié)構(gòu)反映結(jié)點間的邏輯關(guān)系是多對多的。四、分析下面各程序段的時間復(fù)雜度2.2.s=0;for(i=0;i<n;i++)for(j=0;j<n;j++)s+=B[i][j];sum=s;1.1.for(i=0;i<n;i++)for(j=0;j<m;j++)A[i][j]=0;3.x=0;3.x=0;for(i=1;i<n;i++)for(j=1;j<=n-i;j++)x++;4.i=1;while(i<=n)i=i*3;五、設(shè)有數(shù)據(jù)邏輯結(jié)構(gòu)S=(D,R),試按各小題所給條件畫出這些邏輯結(jié)構(gòu)的圖示,并確定其是哪種邏輯結(jié)構(gòu)。1.D={d1,d2,d3,d4}R={(d1,d2),(d2,d3),(d3,d4)}D={d1,d2,…,d9}R={(d1,d2),(d1,d3),(d3,d4),(d3,d6),(d6,d8),(d4,d5),(d6,d7),(d8,d9)}3.D={d1,d2,…,d9}R={(d1,d3),(d1,d8),(d2,d3),(d2,d4),(d2,d5),(d3,d9),(d5,d6),(d8,d9),(d9,d7),(d4,d7),(d4,d6)}第二章線性表一、選擇題1、若長度為n的線性表采用順序存儲結(jié)構(gòu),在其第i個位置插入一個新元素算法的時間復(fù)雜度()。A.O(log2n) B.O(1) C.O(n) D.O(n2)2、若一個線性表中最常用的操作是取第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.i5、非空的循環(huán)單鏈表head的尾結(jié)點p滿足()。A.p->next==head B.p->next==NULL C.p==NULL D.p==head6、鏈表不具有的特點是()。A.可隨機(jī)訪問任一元素 B.插入刪除不需要移動元素 C.不必事先估計存儲空間 D.所需空間與線性表長度成正比7、在雙向循環(huán)鏈表中,在p指針?biāo)傅慕Y(jié)點后插入一個指針q所指向的新結(jié)點,修改指針的操作是()。 A.p->next=q;q->prior=p;p->next->prior=q;q->next=q; B.p->next=q;p->next->prior=q;q->prior=p;q->next=p->next; C.q->prior=p;q->next=p->next;p->next->prior=q;p->next=q; D.q->next=p->next;q->prior=p;p->next=q;p->next=q;8、線性表采用鏈?zhǔn)酱鎯r,結(jié)點的存儲地址()。A.必須是連續(xù)的 B.必須是不連續(xù)的 C.連續(xù)與否均可 D.和頭結(jié)點的存儲地址相連續(xù)9、在一個長度為n的順序表中刪除第i個元素,需要向前移動()個元素。A.n-i B.n-i+1 C.n-i-1 D.i+110、線性表是n個()的有限序列。A.表元素 B.字符 C.數(shù)據(jù)元素 D.數(shù)據(jù)項 11、從表中任一結(jié)點出發(fā),都能掃描整個表的是()。A.單鏈表 B.順序表 C.循環(huán)鏈表 D.靜態(tài)鏈表12、在具有n個結(jié)點的單鏈表上查找值為x的元素時,其時間復(fù)雜度為()。A.O(n) B.O(1) C.O(n2) D.O(n-1)13、線性表L=(a1,a2,……,an),下列說法正確的是()。A.每個元素都有一個直接前驅(qū)和一個直接后繼 B.線性表中至少要有一個元素C.表中諸元素的排列順序必須是由小到大或由大到小 D.除第一個和最后一個元素外,其余每個元素都由一個且僅有一個直接前驅(qū)和直接后繼14、一個順序表的第一個元素的存儲地址是90,每個元素的長度為2,則第6個元素的存儲地址是()。A.98 B.100 C.102 D.10615、在線性表的下列存儲結(jié)構(gòu)中,讀取元素花費(fèi)的時間最少的是()。A.單鏈表 B.雙鏈表 C.循環(huán)鏈表 D.順序表16、在一個單鏈表中,若刪除p所指向結(jié)點的后續(xù)結(jié)點,則執(zhí)行()。A.p->next=p->next->next;B.p=p->next;p->next=p->next->next;C.p=p->next;D.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)/2 B.n C.n+1 D.(n+1)/210、循環(huán)鏈表的主要優(yōu)點是()。A.不再需要頭指針 B.已知某結(jié)點位置后能容易找到其直接前驅(qū)C.在進(jìn)行插入、刪除運(yùn)算時能保證鏈表不斷開D.在表中任一結(jié)點出發(fā)都能掃描整個鏈表 11、不帶頭結(jié)點的單鏈表head為空的判定條件是()。A.head==NULL B.head->next==NULL C.head->next==head D.head!=NULL12、在下列對順序表進(jìn)行的操作中,算法時間復(fù)雜度為O(1)的是()。 A.訪問第i個元素的前驅(qū)(1<) B.在第i個元素之后插入一個新元素() C.刪除第i個元素() D.對順序表中元素進(jìn)行排序13、已知指針p和q分別指向某單鏈表中第一個結(jié)點和最后一個結(jié)點。假設(shè)指針s指向另一個單鏈表中某個結(jié)點,則在s所指結(jié)點之后插入上述鏈表應(yīng)執(zhí)行的語句為()。A.q->next=s->next;s->next=p; B.s->next=p;q->next=s->next; C.p->next=s->next;s->next=q; D.s->next=q;p->next=s->next;14、在以下的敘述中,正確的是()。 A.線性表的順序存儲結(jié)構(gòu)優(yōu)于鏈表存儲結(jié)構(gòu) B.線性表的順序存儲結(jié)構(gòu)適用于頻繁插入/刪除數(shù)據(jù)元素的情況 C.線性表的鏈表存儲結(jié)構(gòu)適用于頻繁插入/刪除數(shù)據(jù)元素的情況 D.線性表的鏈表存儲結(jié)構(gòu)優(yōu)于順序存儲結(jié)構(gòu)15、在表長為n的順序表中,當(dāng)在任何位置刪除一個元素的概率相同時,刪除一個元素所需移動的平均個數(shù)為()。A.(n-1)/2 B.n/2 C.(n+1)/2 D.n16、在一個單鏈表中,已知q所指結(jié)點是p所指結(jié)點的前驅(qū)結(jié)點,若在q和p之間插入一個結(jié)點s,則執(zhí)行()。A.s->next=p->next;p->next=s; B.p->next=s->next;s->next=p; C.q->next=s;s->next=p; D.p->next=s;s->next=q; 17、在單鏈表中,指針p指向元素為x的結(jié)點,實現(xiàn)刪除x的后繼的語句是()。A.p=p->next; B.p->next=p->next->next; C.p->next=p; D.p=p->next->next;18、在頭指針為head且表長大于1的單循環(huán)鏈表中,指針p指向表中某個結(jié)點,若p->next->next==head,則()。A.p指向頭結(jié)點 B.p指向尾結(jié)點 C.p的直接后繼是頭結(jié)點 D.p的直接后繼是尾結(jié)點二、填空題1、設(shè)單鏈表的結(jié)點結(jié)構(gòu)為(data,next)。已知指針p指向單鏈表中的結(jié)點,q指向新結(jié)點,欲將q插入到p結(jié)點之后,則需要執(zhí)行的語句:;。答案:q->next=p->next p->next=q2、線性表的邏輯結(jié)構(gòu)是,其所含元素的個數(shù)稱為線性表的。答案:線性結(jié)構(gòu)長度3、寫出帶頭結(jié)點的雙向循環(huán)鏈表L為空表的條件。答案:L->prior==L->next==L4、帶頭結(jié)點的單鏈表head為空的條件是。答案:head->next==NULL5、在一個單鏈表中刪除p所指結(jié)點的后繼結(jié)點時,應(yīng)執(zhí)行以下操作:q=p->next;p->next=____;答案:q->next 三、判斷題1、單鏈表不是一種隨機(jī)存儲結(jié)構(gòu)。2、在具有頭結(jié)點的單鏈表中,頭指針指向鏈表的第一個數(shù)據(jù)結(jié)點。3、用循環(huán)單鏈表表示的鏈隊列中,可以不設(shè)隊頭指針,僅在隊尾設(shè)置隊尾指針。4、順序存儲方式只能用于存儲線性結(jié)構(gòu)。5、在線性表的順序存儲結(jié)構(gòu)中,邏輯上相鄰的兩個元素但是在物理位置上不一定是相鄰的。6、鏈?zhǔn)酱鎯Φ木€性表可以隨機(jī)存取。四、程序分析填空題1、函數(shù)GetElem實現(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=(2);returnOK;}答案:(1)p=p->next(2)p->data2、函數(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; (1); (2); returnOK;}/*ListInsert*/答案:(1)s->next=p->next(2)p->next=s3、函數(shù)ListDelete_sq實現(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ù)實現(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;(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); }答案:求單鏈表head的長度五、綜合題1、編寫算法,實現(xiàn)帶頭結(jié)點單鏈表的逆置算法。答案: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é)點的單向鏈表的頭指針為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é)點的單鏈表改造為一個單向循環(huán)鏈表,并分析算法的時間復(fù)雜度。答案: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é)點數(shù))為N,則該算法的時間主要花費(fèi)在查找鏈表最后一個結(jié)點上(算法中的while循環(huán)),所以該算法的時間復(fù)雜度為O(N)。5、已知head為帶頭結(jié)點的單循環(huán)鏈表的頭指針,鏈表中的數(shù)據(jù)元素依次為(a1,a2,a3,a4,…,an),A為指向空的順序表的指針。閱讀以下程序段,并回答問題:(1)寫出執(zhí)行下列程序段后的順序表A中的數(shù)據(jù)元素;(2)簡要敘述該程序段的功能。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é)點位置的元素值寫入順序表A6、設(shè)順序表va中的數(shù)據(jù)元數(shù)遞增有序。試寫一算法,將x插入到順序表的適當(dāng)位置上,以保持該表的有序性。答案: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后的線性表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)刪除順序表中重復(fù)的元素8、已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲結(jié)構(gòu)。試寫一算法,刪除表中所有大于x且小于y的元素(若表中存在這樣的元素)同時釋放被刪除結(jié)點空間。答案: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é)點的循環(huán)鏈表L中,結(jié)點的數(shù)據(jù)元素為整型,且按值遞增有序存放。給定兩個整數(shù)a和b,且a<b,編寫算法刪除鏈表L中元素值大于a且小于b的所有結(jié)點。第三章棧和隊列一、選擇題1、一個棧的輸入序列為:a,b,c,d,e,則棧的不可能輸出的序列是()。A.a,b,c,d,eB.d,e,c,b,a C.d,c,e,a,b D.e,d,c,b,a2、判斷一個循環(huán)隊列Q(最多n個元素)為滿的條件是()。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、設(shè)計一個判別表達(dá)式中括號是否配對的算法,采用()數(shù)據(jù)結(jié)構(gòu)最佳。A.順序表 B.鏈表 C.隊列 D.棧4、帶頭結(jié)點的單鏈表head為空的判定條件是()。A.head==NULL B.head->next==NULL C.head->next!=NULL D.head!=NULL5、一個棧的輸入序列為:1,2,3,4,則棧的不可能輸出的序列是()。A.1243B.2134 C.1432D.4312 E.32146、若用一個大小為6的數(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==0 C.rear==0 D.front=rear+19、一個順序棧S,其棧頂指針為top,則將元素e入棧的操作是()。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,5 C.3,5,4,2,1 D.1,3,5,2,414、判定一個順序棧S(??臻g大小為n)為空的條件是()。A.S->top==0 B.S->top!=0 C.S->top==n D.S->top!=n15、在一個鏈隊列中,front和rear分別為頭指針和尾指針,則插入一個結(jié)點s的操作為()。A.front=front->next B.s->next=rear;rear=sC.rear->next=s;rear=s; D.s->next=front;front=s;16、一個隊列的入隊序列是1,2,3,4,則隊列的出隊序列是()。 A.1,2,3,4 B.4,3,2,1 C.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=0 C.top=top+1 D.top=top-119、判斷一個循環(huán)隊列Q(空間大小為M)為空的條件是()。A.Q->front==Q->rear B.Q->rear-Q->front-1==M C.Q->front+1=Q->rear D.Q->rear+1=Q->front20、設(shè)計一個判別表達(dá)式中左右括號是否配對出現(xiàn)的算法,采用()數(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)隊列時,該隊列的最大長度為()。A.N B.N+1 C.N-1 D.N-222、隊列的刪除操作是在()。A.隊首 B.隊尾 C.隊前 D.隊后23、若讓元素1,2,3依次進(jìn)棧,則出棧次序不可能是()。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,則當(dāng)前隊列中的元素個數(shù)是()。 A.(rear-front+m)%m B.rear-front+1 C.rear-front-1 D.rear-front25、在解決計算機(jī)主機(jī)和打印機(jī)之間速度不匹配問題時,通常設(shè)置一個打印數(shù)據(jù)緩沖區(qū),主機(jī)將要輸出的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機(jī)則從該緩沖區(qū)中取走數(shù)據(jù)打印。該緩沖區(qū)應(yīng)該是一個()結(jié)構(gòu)。A.堆棧 B.隊列 C.數(shù)組 D.線性表26、棧和隊列都是()。A.鏈?zhǔn)酱鎯Φ木€性結(jié)構(gòu) B.鏈?zhǔn)酱鎯Φ姆蔷€性結(jié)構(gòu) C.限制存取點的線性結(jié)構(gòu) D.限制存取點的非線性結(jié)構(gòu)27、在一個鏈隊列中,假定front和rear分別為隊頭指針和隊尾指針,刪除一個結(jié)點的操作是()。A.front=front->next B.rear=rear->next C.rear->next=front D.front->next=rear28、隊和棧的主要區(qū)別是()。A.邏輯結(jié)構(gòu)不同 B.存儲結(jié)構(gòu)不同C.所包含的運(yùn)算個數(shù)不同 D.限定插入和刪除的位置不同二、填空題1、設(shè)棧S和隊列Q的初始狀態(tài)為空,元素e1,e2,e3,e4,e5,e6依次通過棧S,一個元素出棧后即進(jìn)入隊列Q,若6個元素出隊的序列是e2,e4,e3,e6,e5,e1,則棧的容量至少應(yīng)該是。答案:32、一個循環(huán)隊列Q的存儲空間大小為M,其隊頭和隊尾指針分別為front和rear,則循環(huán)隊列中元素的個數(shù)為:。答案:(rear-front+M)%M3、在具有n個元素的循環(huán)隊列中,隊滿時具有個元素。答案:n-14、設(shè)循環(huán)隊列的容量為70,現(xiàn)經(jīng)過一系列的入隊和出隊操作后,front為20,rear為11,則隊列中元素的個數(shù)為。答案:615、已知循環(huán)隊列的存儲空間大小為20,且當(dāng)前隊列的頭指針和尾指針的值分別為8和3,且該隊列的當(dāng)前的長度為_______。三、判斷題1、棧和隊列都是受限的線性結(jié)構(gòu)。2、在單鏈表中,要訪問某個結(jié)點,只要知道該結(jié)點的地址即可;因此,單鏈表是一種隨機(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實現(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;}3、閱讀算法f2,并回答下列問題:(1)設(shè)隊列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、假設(shè)以帶頭結(jié)點的循環(huán)鏈表表示隊列,并且只設(shè)一個指針指向隊尾結(jié)點,但不設(shè)頭指針,請寫出相應(yīng)的入隊列算法(用函數(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); 判斷??贞犃械腁DT函數(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、對于一個棧,給出輸入項A,B,C,D,如果輸入項序列為A,B,C,D,試給出全部可能的輸出序列。答案:出棧的可能序列:ABCDABDCACDBACBDADCBBACDBADCBCADBCDACBDACBADCDBADCBA第四章串一、選擇題1、設(shè)有兩個串S1和S2,求串S2在S1中首次出現(xiàn)位置的運(yùn)算稱作(C)。A.連接 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.O(nlog2m)5、空串和空格串(B)。A.相同B.不相同 C.可能相同D.無法確定6、與線性表相比,串的插入和刪除操作的特點是()。 A.通常以串整體作為操作對象 B.需要更多的輔助空間 C.算法的時間復(fù)雜度較高 D.涉及移動的元素更多7、設(shè)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、完全二叉樹某結(jié)點有右子樹,則必然有左子樹。三、填空題1、求子串在主串中首次出現(xiàn)的位置的運(yùn)算稱為模式匹配。2、設(shè)s=’I︺AM︺A︺TEACHER’,其長度是____。3、兩個串相等的充分必要條件是兩個串的長度相等且對應(yīng)位置字符相同。四、程序填空題1、函數(shù)kmp實現(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(); else return(-1);}2、函數(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.7 D.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、/r
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋼結(jié)構(gòu)構(gòu)件預(yù)制技術(shù)方案
- 醫(yī)療保險理賠流程與技巧指南
- 兒童醫(yī)院溫馨候診環(huán)境設(shè)計方案
- 中醫(yī)院床位使用率提升方案
- 小學(xué)小組討論室建設(shè)方案
- 兒童醫(yī)院抗感染措施強(qiáng)化方案
- 小學(xué)現(xiàn)代化廚房設(shè)施改造方案
- 兒童醫(yī)院兒童樂園建設(shè)方案
- 鋼結(jié)構(gòu)冷卻系統(tǒng)設(shè)計方案
- 信息安全管理體系實施與評估技術(shù)手冊
- 村級往來款管理制度
- 口腔潔牙的試題及答案
- 溫針灸治療膝關(guān)節(jié)炎
- 登高作業(yè)方案范本
- 鞋子面料知識
- 北師大版數(shù)學(xué)六年級下冊全冊教學(xué)設(shè)計及教學(xué)反思
- 行業(yè)協(xié)會發(fā)展歷史
- 酒店治安防范教育培訓(xùn)安全管理制度
- 北師大版《數(shù)學(xué)》七年級上冊知識點總結(jié)
- 物資管理實施細(xì)則
- 安全健康與自我管理學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
評論
0/150
提交評論