數(shù)據(jù)結(jié)構(gòu)試題集包含答案及解析-完整版_第1頁
數(shù)據(jù)結(jié)構(gòu)試題集包含答案及解析-完整版_第2頁
數(shù)據(jù)結(jié)構(gòu)試題集包含答案及解析-完整版_第3頁
數(shù)據(jù)結(jié)構(gòu)試題集包含答案及解析-完整版_第4頁
數(shù)據(jù)結(jié)構(gòu)試題集包含答案及解析-完整版_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

..第一章概論一、選擇題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.空間復雜度和時間復雜度 B.正確性和簡單性 C.可讀性和文檔性D.數(shù)據(jù)復雜性和程序復雜性3、具有線性結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)是〔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ù)結(jié)構(gòu)是一門研究非數(shù)值計算的程序設計問題中計算機的數(shù)據(jù)元素以及它們之間的〔B和運算等的學科。A.結(jié)構(gòu) B.關系 C.運算 D.算法10、下面程序段的時間復雜度是〔A。i=s=0; while<s<n>{ i++;s+=i;根號〔n}A.O<n> B.O<n2> C.O<log2n> D.O<n3>11、抽象數(shù)據(jù)類型的三個組成部分分別為〔A。A.數(shù)據(jù)對象、數(shù)據(jù)關系和基本操作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ì)量,以下解釋錯誤的是〔D。A.正確性算法應能正確地實現(xiàn)預定的功能B.易讀性算法應易于閱讀和理解,以便調(diào)試、修改和擴充C.健壯性當環(huán)境發(fā)生變化時,算法能適當?shù)刈龀龇磻蜻M行處理,不會產(chǎn)生不需要的運行結(jié)果D.高效性即達到所需要的時間性能13、下列程序段的時間復雜度為〔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;"的時間復雜度為。2、數(shù)據(jù)結(jié)構(gòu)的四種基本類型中,樹形結(jié)構(gòu)的元素是一對多關系。三、綜合題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的線性表采用順序存儲結(jié)構(gòu),在其第i個位置插入一個新元素算法的時間復雜度〔。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-iB.n-i+1 C.n-i-1 D.i5、非空的循環(huán)單鏈表head的尾結(jié)點p滿足〔。A.p->next==head B.p->next==NULLC.p==NULL D.p==head6、鏈表不具有的特點是〔。A.可隨機訪問任一元素 B.插入刪除不需要移動元素 C.不必事先估計存儲空間 D.所需空間與線性表長度成正比7、在雙向循環(huán)鏈表中,在p指針所指的結(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、線性表采用鏈式存儲時,結(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的元素時,其時間復雜度為〔。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.98B.100 C.102 D.10615、在線性表的下列存儲結(jié)構(gòu)中,讀取元素花費的時間最少的是〔。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的單鏈表之后的算法的時間復雜度為〔。A.O<1> B.O<n> C.O<m>D.O<m+n>18、線性表的順序存儲結(jié)構(gòu)是一種〔存儲結(jié)構(gòu)。A.隨機存取B.順序存取 C.索引存取 D.散列存取 19、順序表中,插入一個元素所需移動的元素平均數(shù)是〔。A.<n-1>/2 B.n C.n+1D.<n+1>/210、循環(huán)鏈表的主要優(yōu)點是〔。A.不再需要頭指針B.已知某結(jié)點位置后能容易找到其直接前驅(qū)C.在進行插入、刪除運算時能保證鏈表不斷開D.在表中任一結(jié)點出發(fā)都能掃描整個鏈表11、不帶頭結(jié)點的單鏈表head為空的判定條件是〔A。A.head==NULLB.head->next==NULLC.head->next==headD.head!=NULL答案B是帶頭結(jié)點的12、在下列對順序表進行的操作中,算法時間復雜度為O<1>的是〔。A.訪問第i個元素的前驅(qū)〔1<B.在第i個元素之后插入一個新元素<>C.刪除第i個元素<>D.對順序表中元素進行排序答案是A.假設順序表L,長度為n,求第i個節(jié)點L[i],直接前驅(qū)L[i-1],因此為O〔1答案B需要移動n-i+1個節(jié)點,因此為O<n>答案C也需要移動n-i個節(jié)點答案D根據(jù)排序方法不同最慢O<n^2>,最快O<nlogn>13、已知指針p和q分別指向某單鏈表中第一個結(jié)點和最后一個結(jié)點。假設指針s指向另一個單鏈表中某個結(jié)點,則在s所指結(jié)點之后插入上述鏈表應執(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的順序表中,當在任何位置刪除一個元素的概率相同時,刪除一個元素所需移動的平均個數(shù)為〔。A.<n-1>/2B.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、設單鏈表的結(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é)點時,應執(zhí)行以下操作:q=p->next;p->next=_q->next___;三、判斷題1、單鏈表不是一種隨機存儲結(jié)構(gòu)。2、在具有頭結(jié)點的單鏈表中,頭指針指向鏈表的第一個數(shù)據(jù)結(jié)點。3、用循環(huán)單鏈表表示的鏈隊列中,可以不設隊頭指針,僅在隊尾設置隊尾指針。4、順序存儲方式只能用于存儲線性結(jié)構(gòu)。5、在線性表的順序存儲結(jié)構(gòu)中,邏輯上相鄰的兩個元素但是在物理位置上不一定是相鄰的。6、鏈式存儲的線性表可以隨機存取。X四、程序分析填空題1、函數(shù)GetElem實現(xiàn)返回單鏈表的第i個元素,請在空格處將算法補充完整。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)單鏈表的插入算法,請在空格處將算法補充完整。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)順序表刪除算法,請在空格處將算法補充完整。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;}答案:〔1L->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->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、設一個帶頭結(jié)點的單向鏈表的頭指針為head,設計算法,將鏈表的記錄,按照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)鏈表,并分析算法的時間復雜度。答案:voidlinklist_c<Lnode*head>{Lnode*p;p=head;if<!p>returnERROR;while<p->next!=NULL>p=p->next;p->next=head;}設單鏈表的長度〔數(shù)據(jù)結(jié)點數(shù)為N,則該算法的時間主要花費在查找鏈表最后一個結(jié)點上〔算法中的while循環(huán),所以該算法的時間復雜度為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、設順序表va中的數(shù)據(jù)元數(shù)遞增有序。試寫一算法,將x插入到順序表的適當位置上,以保持該表的有序性。答案: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、假設線性表采用順序存儲結(jié)構(gòu),表中元素值為整型。閱讀算法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、已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲結(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,aC.d,c,e,a,bD.e,d,c,b,a2、判斷一個循環(huán)隊列Q〔最多n個元素為滿的條件是〔。A.Q->rear==Q->frontB.Q->rear==Q->front+1C.Q->front==<Q->rear+1>%nD.Q->front==<Q->rear-1>%n3、設計一個判別表達式中括號是否配對的算法,采用〔數(shù)據(jù)結(jié)構(gòu)最佳。A.順序表 B.鏈表C.隊列D.棧4、帶頭結(jié)點的單鏈表head為空的判定條件是〔。A.head==NULLB.head->next==NULLC.head->next!=NULL D.head!=NULL5、一個棧的輸入序列為:1,2,3,4,則棧的不可能輸出的序列是〔。A.1243B.2134C.1432D.4312 E.32146、若用一個大小為6的數(shù)組來實現(xiàn)循環(huán)隊列,且當rear和front的值分別為0,3。當從隊列中刪除一個元素,再加入兩個元素后,rear和front的值分別為〔。A.1和5B.2和4C.4和2D.5和17、隊列的插入操作是在〔。A.隊尾 B.隊頭 C.隊列任意位置 D.隊頭元素后8、循環(huán)隊列的隊頭和隊尾指針分別為front和rear,則判斷循環(huán)隊列為空的條件是〔。A.front==rear B.front==0C.rear==0D.front=rear+19、一個順序棧S,其棧頂指針為top,則將元素e入棧的操作是〔。A.*S->top=e;S->top++;B.S->top++;*S->top=e;C.*S->top=eD.S->top=e;10、表達式a*<b+c>-d的后綴表達式是〔。A.abcd+-B.abc+*d- C.abc*+d- D.-+*abcd11、將遞歸算法轉(zhuǎn)換成對應的非遞歸算法時,通常需要使用〔來保存中間結(jié)果。A.隊列B.棧C.鏈表D.樹12、棧的插入和刪除操作在〔。A.棧底B.棧頂 C.任意位置 D.指定位置13、五節(jié)車廂以編號1,2,3,4,5順序進入鐵路調(diào)度站〔棧,可以得到〔的編組。 A.3,4,5,1,2 B.2,4,1,3,5 C.3,5,4,2,1D.1,3,5,2,414、判定一個順序棧S〔??臻g大小為n為空的條件是〔。A.S->top==0 B.S->top!=0C.S->top==nD.S->top!=n15、在一個鏈隊列中,front和rear分別為頭指針和尾指針,則插入一個結(jié)點s的操作為〔。A.front=front->nextB.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,4B.4,3,2,1 C.1,4,3,2D.3,4,1,217、依次在初始為空的隊列中插入元素a,b,c,d以后,緊接著做了兩次刪除操作,此時的隊頭元素是〔。A.a B.bC.cD.d18、正常情況下,刪除非空的順序存儲結(jié)構(gòu)的堆棧的棧頂元素,棧頂指針top的變化是〔。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==MC.Q->front+1=Q->rearD.Q->rear+1=Q->front20、設計一個判別表達式中左右括號是否配對出現(xiàn)的算法,采用〔C數(shù)據(jù)結(jié)構(gòu)最佳。A.線性表的順序存儲結(jié)構(gòu) B.隊列 C.棧D.線性表的鏈式存儲結(jié)構(gòu)21、當用大小為N的數(shù)組存儲順序循環(huán)隊列時,該隊列的最大長度為〔C。A.N B.N+1 C.N-1 D.N-222、隊列的刪除操作是在〔A。A.隊首 B.隊尾 C.隊前 D.隊后23、若讓元素1,2,3依次進棧,則出棧次序不可能是〔C。A.3,2,1 B.2,1,3C.3,1,2D.1,3,224、循環(huán)隊列用數(shù)組A[0,m-1]存放其元素值,已知其頭尾指針分別是front和rear,則當前隊列中的元素個數(shù)是〔A。 A.<rear-front+m>%m B.rear-front+1 C.rear-front-1 D.rear-front25、在解決計算機主機和打印機之間速度不匹配問題時,通常設置一個打印數(shù)據(jù)緩沖區(qū),主機將要輸出的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機則從該緩沖區(qū)中取走數(shù)據(jù)打印。該緩沖區(qū)應該是一個〔B結(jié)構(gòu)。A.堆棧 B.隊列 C.數(shù)組 D.線性表26、棧和隊列都是〔C。A.鏈式存儲的線性結(jié)構(gòu)B.鏈式存儲的非線性結(jié)構(gòu)C.限制存取點的線性結(jié)構(gòu)D.限制存取點的非線性結(jié)構(gòu)27、在一個鏈隊列中,假定front和rear分別為隊頭指針和隊尾指針,刪除一個結(jié)點的操作是〔A。A.front=front->next B.rear=rear->nextC.rear->next=frontD.front->next=rear28、隊和棧的主要區(qū)別是〔D。A.邏輯結(jié)構(gòu)不同B.存儲結(jié)構(gòu)不同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)經(jīng)過一系列的入隊和出隊操作后,front為20,rear為11,則隊列中元素的個數(shù)為。答案:615、已知循環(huán)隊列的存儲空間大小為20,且當前隊列的頭指針和尾指針的值分別為8和3,且該隊列的當前的長度為____15___。三、判斷題1、棧和隊列都是受限的線性結(jié)構(gòu)。2、在單鏈表中,要訪問某個結(jié)點,只要知道該結(jié)點的地址即可;因此,單鏈表是一種隨機存取結(jié)構(gòu)。3、以鏈表作為棧的存儲結(jié)構(gòu),出棧操作必須判別棧空的情況。四、程序分析填空題1、已知棧的基本操作函數(shù): intInitStack<SqStack*S>;//構(gòu)造空棧 intStackEmpty<SqStack*S>;//判斷??読ntPush<SqStack*S,ElemTypee>;//入棧 intPop<SqStack*S,ElemType*e>;//出棧函數(shù)conversion實現(xiàn)十進制數(shù)轉(zhuǎn)換為八進制數(shù),請將函數(shù)補充完整。voidconversion<>{ InitStack<S>; scanf<"%d",&N>; while<N>{〔1; N=N/8;}while<〔2>{ Pop<S,&e>;printf<"%d",e>;}}//conversion答案:〔1Push<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、閱讀算法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>;}}答案:〔16,4,2,5,3,1 〔2將隊列倒置五、綜合題1、假設以帶頭結(jié)點的循環(huán)鏈表表示隊列,并且只設一個指針指向隊尾結(jié)點,但不設頭指針,請寫出相應的入隊列算法〔用函數(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、對于一個棧,給出輸入項A,B,C,D,如果輸入項序列為A,B,C,D,試給出全部可能的輸出序列。4,1,4,1,2,1,1答案:出棧的可能序列:ABCDABDCACDBACBDADCBBACDBADCBCADBCDABDCACBDACBADCDBADCBA第四章串一、選擇題1、設有兩個串S1和S2,求串S2在S1中首次出現(xiàn)位置的運算稱作〔C。A.連接B.求子串C.模式匹配D.判斷子串2、已知串S=’aaab’,則next數(shù)組值為〔A。A.0123 B.1123C.1231D.12113、串與普通的線性表相比較,它的特殊性體現(xiàn)在〔C。A.順序的存儲結(jié)構(gòu) B.鏈式存儲結(jié)構(gòu) 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、與線性表相比,串的插入和刪除操作的特點是〔B。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í)行效率低的原因是有回溯存在?!病?、KMP算法的最大特點是指示主串的指針不需要回溯?!病?、完全二叉樹某結(jié)點有右子樹,則必然有左子樹。三、填空題1、求子串在主串中首次出現(xiàn)的位置的運算稱為模式匹配。2、設s=’I︺AM︺A︺TEACHER’,其長度是__14__。3、兩個串相等的充分必要條件是兩個串的長度相等且對應位置字符相同。四、程序填空題1、函數(shù)kmp實現(xiàn)串的模式匹配,請在空格處將算法補充完整。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=next[j]; if<j>=t->len> return<i=t->len+1>; else return<-1>;}2、函數(shù)實現(xiàn)串的模式匹配算法,請在空格處將算法補充完整。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、設廣義表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.1175B.1180 C.1205 D.12106、廣義表G=<a,b<c,d,<e,f>>,g>的長度是〔A。A.3 B.4C.7 D.87、采用稀疏矩陣的三元組表形式進行壓縮存儲,若要完成對三元組表進行轉(zhuǎn)置,只要將行和列對換,這種說法〔B。A.正確B.錯誤 C.無法確定 D.以上均不對8、廣義表<a,b,c>的表尾是〔B。A.b,c B.<b,c>C.cD.<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.18D.4012、設矩陣A是一個對稱矩陣,為了節(jié)省存儲,將其下三角部分按行序存放在一維數(shù)組B[1,n<n-1>/2]中,對下三角部分中任一元素ai,j<i>=j>,在一維數(shù)組B的下標位置k的值是〔B。A.i<i-1>/2+j-1 B.i<i-1>/2+jC.i<i+1>/2+j-1D.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個或多個原子或子表構(gòu)成的有限序列 B.至少有一個元素是子表C.不能遞歸定義D.不能為空表17、對廣義表L=<<a,b>,<<c,d>,<e,f>>>執(zhí)行head<tail<head<tail<L>>>>操作的結(jié)果是〔D。A.的B.eC.<e> D.〔e,f二、判斷題〔×1、廣義表中原子個數(shù)即為廣義表的長度。〔×2、一個稀疏矩陣采用三元組表示,若把三元組中有關行下標與列下標的值互換,并把mu和nu的值進行互換,則完成了矩陣轉(zhuǎn)置?!病?、稀疏矩陣壓縮存儲后,必會失去隨機存取功能。〔×4、廣義表的長度是指廣義表中括號嵌套的層數(shù)?!病?、廣義表是一種多層次的數(shù)據(jù)結(jié)構(gòu),其元素可以是單原子也可以是子表。三、填空題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>,<x,y,z>>>的結(jié)果是:<x,y,z>。3、二維數(shù)組,可以按照列序為主和行序為主兩種不同的存儲方式。4、稀疏矩陣的壓縮存儲方式有:三元組和十字鏈表。四、綜合題1、現(xiàn)有一個稀疏矩陣,請給出它的三元組表。答案:第六章樹一、選擇題1、二叉樹的深度為k,則二叉樹最多有〔C個結(jié)點。A.2k B.2k-1 C.2k-1 D.2k-12、用順序存儲的方法,將完全二叉樹中所有結(jié)點按層逐個從左到右的順序存放在一維數(shù)組R[1..N]中,若結(jié)點R[i]有右孩子,則其右孩子是〔B。A.R[2i-1] B.R[2i+1] C.R[2i] D.R[2/i]3、設a,b為一棵二叉樹上的兩個結(jié)點,在中序遍歷時,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層的滿二叉樹中結(jié)點總數(shù)為〔A。A.31 B.32 C.33 D.166、由二叉樹的前序和后序遍歷序列〔B惟一確定這棵二叉樹。A.能 B.不能7、某二叉樹的中序序列為ABCDEFG,后序序列為BDCAFGE,則其左子樹中結(jié)點數(shù)目為〔C。A.3 B.2 C.4 D.58、若以{4,5,6,7,8}作為權(quán)值構(gòu)造哈夫曼樹,則該樹的帶權(quán)路徑長度為〔C。A.67 B.68 C.69 D.709、將一棵有100個結(jié)點的完全二叉樹從根這一層開始,每一層上從左到右依次對結(jié)點進行編號,根結(jié)點的編號為1,則編號為49的結(jié)點的左孩子編號為〔A。A.98 B.99 C.50 D.4810、表達式a*<b+c>-d的后綴表達式是〔B。A.abcd+- B.abc+*d- C.abc*+d- D.-+*abcd11、對某二叉樹進行先序遍歷的結(jié)果為ABDEFC,中序遍歷的結(jié)果為DBFEAC,則后序遍歷的結(jié)果是〔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所指結(jié)點沒有左子樹的充要條件是〔B。A.t->left==NULL B.t->ltag==1 C.t->ltag==1&&t->left==NULL D.以上都不對15、任何一棵二叉樹的葉結(jié)點在先序、中序和后序遍歷序列中的相對次序〔A。A.不發(fā)生改變 B.發(fā)生改變 C.不能確定 D.以上都不對16、假定在一棵二叉樹中,度為2的結(jié)點數(shù)為15,度為1的結(jié)點數(shù)為30,則葉子結(jié)點數(shù)為〔B個。A.15 B.16 C.17 D.4717、在下列情況中,可稱為二叉樹的是〔B。A.每個結(jié)點至多有兩棵子樹的樹B.哈夫曼樹C.每個結(jié)點至多有兩棵子樹的有序樹D.每個結(jié)點只有一棵子樹18、用順序存儲的方法,將完全二叉樹中所有結(jié)點按層逐個從左到右的順序存放在一維數(shù)組R[1..n]中,若結(jié)點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.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論