




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、學(xué)而不思則惘,思而不學(xué)則殆數(shù)據(jù)結(jié)構(gòu)試題庫及答案第一章概論一、選擇題1、研究數(shù)據(jù)結(jié)構(gòu)就是研究( DA.數(shù)據(jù)的邏輯結(jié)構(gòu)C. 數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)2、算法分析的兩個(gè)主要方面是(A.空間復(fù)雜度和時(shí)間復(fù)雜度C.可讀性和文檔性具有線性結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)是(A.圖B.樹算法是(D )°A.計(jì)算機(jī)程序D. 解決問題的有限運(yùn)算序列 某算法的語句執(zhí)行頻度為(B.D.D.)°C.B.數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)及其基本操作B.正確性和簡單性數(shù)據(jù)復(fù)雜性和程序復(fù)雜性廣義表D.棧解決問題的計(jì)算方法C.排序算法3n+nlog 2n+n2n)A. 0(n)B. 0(n log11、抽象數(shù)據(jù)類型的
2、三個(gè)組成部分分別為(A.數(shù)據(jù)對(duì)象、數(shù)據(jù)關(guān)系和基本操作C.數(shù)據(jù)項(xiàng)、數(shù)據(jù)元素和數(shù)據(jù)類型二、填空題2+8 ),其時(shí)間復(fù)雜度表示(C )°2C. 0(n)D. O(log2n).)°B.數(shù)據(jù)元素、邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)D. 數(shù)據(jù)元素、數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型三、綜合題1、將數(shù)量級(jí) O(1),O(N),O(N2),0(N 3),O(NLOG 2N),O(LOG 2N),O(2 N)按增長率由小到大排序。23N答案: O(1) O(log 2N) O(N) O(Nlog 2N) O(N ) O(N )O(2 )一、填空題1.數(shù)據(jù)結(jié)構(gòu)被形式地定義為(D, R ),其中D是數(shù)據(jù)元素 的有限集合,R是
3、D上的關(guān)系有限集合。2. 數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的 邏輯結(jié)構(gòu)、數(shù)據(jù)的 存儲(chǔ)結(jié)構(gòu)和數(shù)據(jù)的運(yùn)算這三個(gè)方面的內(nèi)容。順序、鏈?zhǔn)?、索引?. 數(shù)據(jù)結(jié)構(gòu)按邏輯結(jié)構(gòu)可分為兩大類,它們分別是線性結(jié)構(gòu)和非線性結(jié)構(gòu)°&數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)可用四種基本的存儲(chǔ)方法表示,它們分別是散列。9.數(shù)據(jù)的運(yùn)算最常用的有5種,它們分別是插入、刪除、修改、查找、排序二、單項(xiàng)選擇題(C)2.數(shù)據(jù)結(jié)構(gòu)中,與所使用的計(jì)算機(jī)無關(guān)的是數(shù)據(jù)的 結(jié)構(gòu);A)存儲(chǔ) B)物理C)邏輯D)物理和存儲(chǔ)三、簡答題1數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型兩個(gè)概念之間有區(qū)別嗎?答:簡單地說,數(shù)據(jù)結(jié)構(gòu)定義了一組按某些關(guān)系結(jié)合在一起的數(shù)組元素。數(shù)據(jù)類型不僅定義了一組帶結(jié)構(gòu)的數(shù)據(jù)
4、元素,而且還在其上定義了一組操作。2. 簡述線性結(jié)構(gòu)與非線性結(jié)構(gòu)的不同點(diǎn)。答:線性結(jié)構(gòu)反映結(jié)點(diǎn)間的邏輯關(guān)系是一對(duì)一的,非線性結(jié)構(gòu)反映結(jié)點(diǎn)間的邏輯關(guān)系是多對(duì)多的。2.s=0;for (i=0; ivn; i+)for(j=0; jvn; j+)s+=Bij;sum=s;四、分析下面各程序段的時(shí)間復(fù)雜度1. for (i=0; ivn; i+)for (j=0; jvm; j+)Aij=0;4.i=1;while(iv=n) i=i*3;3. x=0;for(i=1; ivn; i+) for (j=1; j<=n-i; j+) x+;Mn nn nn Iog3 n五、設(shè)有數(shù)據(jù)邏輯結(jié)構(gòu)S=(
5、 D,R),試按各小題所給條件畫出這些邏輯結(jié)構(gòu)的圖 示,并確定其是哪種邏輯結(jié)構(gòu)。1.D=d1,d2,d3,d4R=(d1,d2),(d2,d3),(d3,d4) 2. D=d1,d2,d9R=(d1,d2),(d1,d3),(d3,d4),(d3,d6),(d6,d8),(d4,d5), (d6,d7),(d8,d9) 3. D=d1,d2,d9R=(d1,d3),(d1,d8),(d2,d3),(d2,d4),(d2,d5),(d3,d9), (d5,d6),(d8,d9),(d9,d7), (d4,d7), (d4,d6)第二章線性表、選擇題1、若長度為n的線性表采用順序存儲(chǔ)結(jié)構(gòu),雜度()
6、OA. O(log2n)B.O(1)在其第i個(gè)位置插入一個(gè)新元素算法的時(shí)間復(fù)2C. O( n)D.O(n 2)i個(gè)元素和找第i個(gè)元素的前趨元素,則采用()2、若一個(gè)線性表中最常用的操作是取第 存儲(chǔ)方式最節(jié)省時(shí)間。A.順序表B.單鏈表C. 雙鏈表D.單循環(huán)鏈表7、在雙向循環(huán)鏈表中,在p指針?biāo)傅慕Y(jié)點(diǎn)后插入一個(gè)指針 q所指向的新結(jié)點(diǎn),修改指針的 操作是(C )oA. p_>n ext=q;q_>prior=p;p->n ext_>prior=q ;q_>n ext=q;B. p->n ext=q;p->n ext->prior=q;q->pri
7、or=p;q->n ext=p->n ext;C. q->prior=p;q->n ext=p->n ext;p->n ext->prior=q;p->n ext=q;D. q_>n ext=p->n ext;q->prior=p;p->n ext=q;p->n ext=q;10、線性表是門個(gè)()的有限序列。A.表元素B.字符 C.數(shù)據(jù)元素D.數(shù)據(jù)項(xiàng)11、 從表中任一結(jié)點(diǎn)出發(fā),都能掃描整個(gè)表的是()。A.單鏈表B.順序表C.循環(huán)鏈表 D.靜態(tài)鏈表12、 在具有n個(gè)結(jié)點(diǎn)的單鏈表上查找值為x的元素時(shí),其時(shí)間復(fù)雜度為( )
8、o2A. O(n)B. O(1)C. O(n )D. O(n-1)15、在線性表的下列存儲(chǔ)結(jié)構(gòu)中,讀取元素花費(fèi)的時(shí)間最少的是()。A. 單鏈表B.雙鏈表 C. 循環(huán)鏈表D.順序表16、 在一個(gè)單鏈表中,若刪除p所指向結(jié)點(diǎn)的后續(xù)結(jié)點(diǎn),則執(zhí)行()。A. p->n ext=p->n ext- >n ext;B. p=p->n ext;p->n ext=p->n ext->n ext;C. p =p->n ext;D. p=p->n ext- >n ext;17、將長度為n的單鏈表連接在長度為m的單鏈表之后的算法的時(shí)間復(fù)雜度為(A. O(1)
9、B. O( n)18、線性表的順序存儲(chǔ)結(jié)構(gòu)是一種(A.隨機(jī)存取B.順序存取C. O(m)a )存儲(chǔ)結(jié)構(gòu)。C.索引存取D. O(m+n)ND.散列存取19、順序表中,插入一個(gè)元素所需移動(dòng)的元素平均數(shù)是()oA. (n -1)/2B. nC. n+1D. (n+1)/211、不帶頭結(jié)點(diǎn)的單鏈表 head為空的判定條件是(b )。A. head=NULLB.head-> next=NULLD. head!=NULLC. head->n ext=head12、在下列對(duì)順序表進(jìn)行的操作中,算法時(shí)間復(fù)雜度為0(1)的是()。A. 訪問第i個(gè)元素的前驅(qū)(1<i乞n ) B.在第i個(gè)元素之后
10、插入一個(gè)新元素(1叮乞n)C.刪除第i個(gè)元素(1 叮乞n)D.對(duì)順序表中元素進(jìn)行排序13、已知指針p和q分別指向某單鏈表中第一個(gè)結(jié)點(diǎn)和最后一個(gè)結(jié)點(diǎn)。假設(shè)指針s指向另一個(gè)單鏈表中某個(gè)結(jié)點(diǎn),則在s所指結(jié)點(diǎn)之后插入上述鏈表應(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;15、在表長為n的順序表中,當(dāng)在任何位置刪除一個(gè)元素的概
11、率相同時(shí),刪除一個(gè)元素所需移動(dòng)的平均個(gè)數(shù)為(a )oA. (n-1)/2B. n/2C. (n +1)/2D. 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->n ext=p->n extp->n ext=q3、寫出帶頭結(jié)點(diǎn)的雙向循環(huán)鏈表L為空表的條件 答案:L->prior=L->n ext=L 5、在一個(gè)單鏈表中刪除p所指結(jié)點(diǎn)的后繼結(jié)點(diǎn)時(shí),應(yīng)執(zhí)行以下操作:q = p->n ext;p->n ext=_ q->n ext三、
12、判斷題3、 用循環(huán)單鏈表表示的鏈隊(duì)列中,可以不設(shè)隊(duì)頭指針,僅在隊(duì)尾設(shè)置隊(duì)尾指針。x4、順序存儲(chǔ)方式只能用于存儲(chǔ)線性結(jié)構(gòu)。5、 在線性表的順序存儲(chǔ)結(jié)構(gòu)中,邏輯上相鄰的兩個(gè)元素但是在物理位置上不一定是相鄰的。6、鏈?zhǔn)酱鎯?chǔ)的線性表可以隨機(jī)存取。四、程序分析填空題1、函數(shù)GetElem實(shí)現(xiàn)返回單鏈表的第i個(gè)元素,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。int GetElem(LinkList L,int i,Elemtype *e)LinkList p; int j ;p=L->n ext;j=1;while(p&&j<i)p=p->n ext;+j;if(!p|j>i) r
13、eturn ERROR;*e= p->data ;return OK;2、函數(shù)實(shí)現(xiàn)單鏈表的插入算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。int List In sert(L in kList L,i nt i,ElemType e)LNode *p,*s;i nt j;p=L;j=O;while(p!=NULL) &&(j<i-1)p=p-> next;j+;if(p=NULL|j>i-1) return ERROR;s=(LNode *)malloc(sizeof(LNode);s->data=e;s->n ext=p->n ext ;p-&g
14、t;next=s ;return OK;/*Listl nsert*/3、 函數(shù)ListDelete_sq實(shí)現(xiàn)順序表刪除算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。int ListDelete_sq(Sqlist *L,int i)int k;if(i<1|i>L->length) return ERROR;for(k=i-1;k<L->le ngth-1;k+)L->slistk= L->slistk+1;-L->Le ngth ;return OK;4、函數(shù)實(shí)現(xiàn)單鏈表的刪除算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。int ListDelete(LinkList L
15、,int i,ElemType *s)LNode *p,*q;int j;p=L;j=0;while( p-> next!=NULL)&&(j<i-1)p=p->n ext;j+;if(p->n ext=NULL|j>i-1) return ERROR;q=p->n ext;p->n ext=q->n ext ;*s=q->data;free(q);return OK;/*listDelete*/5、寫出算法的功能。int L(head)node * head;int n=0;node *p;p=head;while(p!=
16、NULL) p=p->n ext;n+;return( n);答案:求單鏈表head的長度五、綜合題1、編寫算法,實(shí)現(xiàn)帶頭結(jié)點(diǎn)單鏈表的逆置算法。答案:void inven t(L node *head)Lnode *p,*q;if(!head->next) return ERROR;p=head->n ext; q=p->n ext; p->n ext =NULL;while(q)p=q; q=q_>n ext; p_>n ext=head->n ext; head->n ext=p;2、 有兩個(gè)循環(huán)鏈表,鏈頭指針分別為L1和L2,要求寫出
17、算法將L2鏈表鏈到L1鏈表之后,且連接后仍保持循環(huán)鏈表形式。答案:void merge(L node *L1, L node *L2)Lnode *p,*q ;while(p->n ext!=L1)p=p->n ext;while(q-> next!=L2)q=q_>n ext;q->n ext=L1; p->next =L2;3、 設(shè)一個(gè)帶頭結(jié)點(diǎn)的單向鏈表的頭指針為head,設(shè)計(jì)算法,將鏈表的記錄,按照data域的值遞增排序。答案: void assending(Lnode *head)Ln ode *p,*q , *r, *s;p=head->n
18、ext; q=p->n ext; p->n ext=NULL;while(q)r=q; q=q_>n ext;if(r->data<=p->data)r->n ext=p; head->n ext=r; p=r; elsewhile(!p && r->data>p->data)s=p; p=p->n ext; r->n ext=p; s_>n ext=r;p=head->n ext; 4、 編寫算法,將一個(gè)頭指針為head不帶頭結(jié)點(diǎn)的單鏈表改造為一個(gè)單向循環(huán)鏈表,并分析 算法的時(shí)間復(fù)雜度。
19、答案:void lin klist_c(L node *head)Lnode *p; p=head;if(!p) return ERROR;while(p-> next!=NULL)p=p->n ext;p->n ext=head;設(shè)單鏈表的長度(數(shù)據(jù)結(jié)點(diǎn)數(shù))為N,則該算法的時(shí)間主要花費(fèi)在查找鏈表最后一個(gè)結(jié)點(diǎn)上(算法中的while 循環(huán)),所以該算法的時(shí)間復(fù)雜度為0(N)。5、已知head為帶頭結(jié)點(diǎn)的單循環(huán)鏈表的頭指針,鏈表中的數(shù)據(jù)元素依次為(a1 ,a2,a3,a4,an ) ,A為指向空的順序表的指針。閱讀以下程序段,并回答問題:(1 )寫出執(zhí)行下列程序段后的順序表A中的
20、數(shù)據(jù)元素;(2 )簡要敘述該程序段的功能。if(head->n ext!=head)p=head->n ext;A->len gth=0;while(p->n ext!=head)p=p->n ext;A->dataA->le ngth +=p->data;if(p->n ext!=head)p=p->n ext;答案:(1) (a2, a4,)(2)將循環(huán)單鏈表中偶數(shù)結(jié)點(diǎn)位置的元素值寫入順序表A6、 設(shè)順序表va中的數(shù)據(jù)元數(shù)遞增有序。試寫一算法,將x插入到順序表的適當(dāng)位置上,以 保持該表的有序性。答案:void In sert_sq
21、(Sqlist va, ElemType x)int i, j, n;n=len gth(va);if(x>=vai)va n=x;elsei=0;while(x>vai) i+;for(j=n-1;j>=l;j-)vaj+1=vaj;vai=x; n+;7、假設(shè)線性表采用順序存儲(chǔ)結(jié)構(gòu),表中元素值為整型。閱讀算法f2,設(shè)順序表L=(3,7,3,2,1,1,8,7,3),寫出執(zhí)行算法f2后的線性表L的數(shù)據(jù)元素,并描述該算法的功void f2(SeqList *L)int i,j,k;k=0;for(i=0;i<L->le ngth;i+)for(j=0;j<k
22、 && L->datai!=L->dataj;j+);if(j=k)if(k!=i)L->datak=L->datai;k+;L->le ngth=k;答案:(3,7,2,1,8)刪除順序表中重復(fù)的元素8、已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲(chǔ)結(jié)構(gòu)。試寫一算法,刪除表 中所有大于x且小于y的元素(若表中存在這樣的元素)同時(shí)釋放被刪除結(jié)點(diǎn)空間。 答案:void Delete_list(L node *head, ElemType x, ElemType y)Lnode *p, *q;if(!head) return ERROR;p=he
23、ad; q=p;while(!p)if(p->data>x) && (p->data<y)i+;if(p=head)head=p->n ext; free(p);p=head; q=p; elseq->n ext=p->n ext; free(p);p=q _>n ext; elseq=p; P=p-> next; 9、在帶頭結(jié)點(diǎn)的循環(huán)鏈表 L中,結(jié)點(diǎn)的數(shù)據(jù)元素為整型,且按值遞增有序存放。給定兩個(gè) 整數(shù)a和b,且a<b,編寫算法刪除鏈表 L中元素值大于a且小于b的所有結(jié)點(diǎn)。第三章棧和隊(duì)列、選擇題2、 判斷一個(gè)循環(huán)隊(duì)列
24、Q (最多n個(gè)元素)為滿的條件是(c )°A. Q->rear=Q->fro ntB. Q->rear=Q->fro nt+1C. Q->fro nt=(Q->rear+1)% nD. Q->fro nt=(Q->rear-1)% n3、設(shè)計(jì)一個(gè)判別表達(dá)式中括號(hào)是否配對(duì)的算法,采用(A.順序表B. 鏈表C.隊(duì)列4、帶頭結(jié)點(diǎn)的單鏈表head為空的判定條件是()°B. head-next=NULLD. head!=NULL,則棧的不可能輸出的序列是(C. 1432D. 4312rear和front的值分別為A. head=NULL
25、C. head-> next!=NULL5、 一個(gè)棧的輸入序列為:1,2,3,4A. 1243 B.21346、若用一個(gè)大小為6的數(shù)組來實(shí)現(xiàn)循環(huán)隊(duì)列,且當(dāng) 列中刪除一個(gè)元素,再加入兩個(gè)元素后,A. 1 和 5B. 27、 隊(duì)列的插入操作是在( )°A.隊(duì)尾B.隊(duì)頭8、循環(huán)隊(duì)列的隊(duì)頭和隊(duì)尾指針分別為A. fron t=rearC. rear=010、11、12、13、14、15、()數(shù)據(jù)結(jié)構(gòu)最佳。D.棧E. 32140, 3°當(dāng)從隊(duì)rear和front的值分別為(和4C. 4和2D. 5 和 1C.隊(duì)列任意位置D.隊(duì)頭元素后front和rear,則判斷循環(huán)隊(duì)列為空的條件
26、是(B. fron t=0D. fron t=rear+1-個(gè)順序棧S,其棧頂指針為top,則將元素e入棧的操作是(A. *S->top=e;S->top+;C. *S->top=e表達(dá)式a*(b+c)-d的后綴表達(dá)式是(A. abcd+-B. abc+*d-將遞歸算法轉(zhuǎn)換成對(duì)應(yīng)的非遞歸算法時(shí),A.隊(duì)列B.棧棧的插入和刪除操作在(B. S->top+;*S->top=e;D. S->top=e;)°C. abc*+d-通常需要使用(C.鏈表)D.D. -+*abcd來保存中間結(jié)果。樹A. 棧底B.棧頂五節(jié)車廂以編號(hào)A. 3 , 4,5, 1,C.
27、3 , 5, 4, 2,判定一個(gè)順序棧SA. S->top=0C. S->top=n在一個(gè)鏈隊(duì)列中,)°A. fron t=fr ont->nextC.任意位置1,2,3,4,5順序進(jìn)入鐵路調(diào)度站(棧)2B. 2 ,4,1,3,51D. 1,3,5,2,4(棧空間大小為n)為空的條件是(B. S->top!=0D. S->top!=n和rear分別為頭指針和尾指針,D.,可以得到()的編組。front16、17、指定位置則插入一個(gè)結(jié)點(diǎn)s的操作為B. s->n ext=rear;rear=sD. s->n ext=fr on t;fr on t
28、=s;C. rear->n ext=s;rear=s;一個(gè)隊(duì)列的入隊(duì)序列是1,2,3,4,則隊(duì)列的出隊(duì)序列是(A. 1,2,3,4B. 4,3,2,1C. 1,4,3,2D. 3,4,1,2依次在初始為空的隊(duì)列中插入元素a,b,c,d以后,緊接著做了兩次刪除操作,此時(shí)的隊(duì)頭元素是(A. a18、正常情況下,)°B. bC. cD. d刪除非空的順序存儲(chǔ)結(jié)構(gòu)的堆棧的棧頂元素,棧頂指針top的變化是(A. top 不變B. top=0C. top=top+1D. top=top-119、判斷一個(gè)循環(huán)隊(duì)列Q (空間大小為 M)為空的條件是()。A. Q->fro nt=Q-&g
29、t;rearB. Q->rear-Q->fro nt-1=MC. Q->fro nt+仁Q->rearD. Q->rear+ 仁 Q->fro nt20、設(shè)計(jì)一個(gè)判別表達(dá)式中左右括號(hào)是否配對(duì)出現(xiàn)的算法,采用( A.線性表的順序存儲(chǔ)結(jié)構(gòu)B.隊(duì)列 C.棧儲(chǔ)結(jié)構(gòu)當(dāng)用大小為N的數(shù)組存儲(chǔ)順序循環(huán)隊(duì)列時(shí),該隊(duì)列的最大長度為(A. NB. N+1C. N-121、D. N-2)D.數(shù)據(jù)結(jié)構(gòu)最佳。線性表的鏈?zhǔn)酱骊?duì)列的刪除操作是在(A.隊(duì)首若讓元素1,2,A. 3, 2, 124、循環(huán)隊(duì)列用數(shù)組22、23、)。B.隊(duì)尾C.隊(duì)前3依次進(jìn)棧,則出棧次序不可能是(B. 2,1,3
30、C. 3,1,D.隊(duì)后D.A0,當(dāng)前隊(duì)列中的元素個(gè)數(shù)是(A. (rear-fr on t+m)%mm-1存放其元素值,已知其頭尾指針分別是 。1, 3,2 front禾口 rear ,貝UB. rear-fr on t+1D. rear-fr ontC. rear-fro nt-125、在解決計(jì)算機(jī)主機(jī)和打印機(jī)之間速度不匹配問題時(shí),通常設(shè)置一個(gè)打印數(shù)據(jù)緩沖區(qū), 主機(jī)將要輸出的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機(jī)則從該緩沖區(qū)中取走數(shù)據(jù)打印。該緩沖區(qū)應(yīng)該是一個(gè)(。結(jié)構(gòu)。A.堆棧B.隊(duì)列C.數(shù)組D.線性表26、棧和隊(duì)列都是()。A. 鏈?zhǔn)酱鎯?chǔ)的線性結(jié)構(gòu)C.限制存取點(diǎn)的線性結(jié)構(gòu)B. 鏈?zhǔn)酱鎯?chǔ)的非線性結(jié)構(gòu)D.
31、限制存取點(diǎn)的非線性結(jié)構(gòu)27、在一個(gè)鏈隊(duì)列中,假定front和rear分別為隊(duì)頭指針和隊(duì)尾指針,刪除一個(gè)結(jié)點(diǎn)的操作是A. front=front->nextC. rear- >n ext=fro ntB. rear= rear->nextD. front->n ext=rear28、隊(duì)和棧的主要區(qū)別是()。B.存儲(chǔ)結(jié)構(gòu)不同D.限定插入和刪除的位置不同A. 邏輯結(jié)構(gòu)不同C. 所包含的運(yùn)算個(gè)數(shù)不同二、填空題1、設(shè)棧S和隊(duì)列Q的初始狀態(tài)為空,元素 e1,e2,e3,e4,e5,e6 依次通過棧S,個(gè)元素出 棧后即進(jìn)入隊(duì)列Q,若6個(gè)元素出隊(duì)的序列是 e2,e4,e3,e6,e5,
32、e1,則棧的容量至少應(yīng)該 答案:32、一個(gè)循環(huán)隊(duì)列Q的存儲(chǔ)空間大小為 M,其隊(duì)頭和隊(duì)尾指針分別為front和rear ,則循環(huán)隊(duì)列中元素的個(gè)數(shù)為:。答案:(rear-fro nt+M)%M3、 在具有n個(gè)元素的循環(huán)隊(duì)列中,隊(duì)滿時(shí)具有 個(gè)元素。答案:n-14、 設(shè)循環(huán)隊(duì)列的容量為70,現(xiàn)經(jīng)過一系列的入隊(duì)和出隊(duì)操作后,front為20 , rear為11,則隊(duì)列中元素的個(gè)數(shù)為 。答案:615、已知循環(huán)隊(duì)列的存儲(chǔ)空間大小為20,且當(dāng)前隊(duì)列的頭指針和尾指針的值分別為8和3,且該隊(duì)列的當(dāng)前的長度為。三、判斷題1、棧和隊(duì)列都是受限的線性結(jié)構(gòu)。2、在單鏈表中,要訪問某個(gè)結(jié)點(diǎn),只要知道該結(jié)點(diǎn)的地址即可;因此,
33、單鏈表是一種隨機(jī) 存取結(jié)構(gòu)。3、以鏈表作為棧的存儲(chǔ)結(jié)構(gòu),出棧操作必須判別??盏那闆r。四、程序分析填空題1、已知棧的基本操作函數(shù):int In itStack(SqStack *S); /構(gòu)造空棧int StackEmpty(SqStack *S);判斷??読nt Push(SqStack *S,ElemType e);入棧int Pop(SqStack *S,ElemType *e);出棧函數(shù)con version實(shí)現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)換為八進(jìn)制數(shù),請(qǐng)將函數(shù)補(bǔ)充完整。void con vers ion()Ini tStack(S); scanf(%d",&N);while(N)(1)
34、 ;N=N/8;while( ( 2)Pop(S, &e);printf( %d" ,e);"/conversion答案:(1)Push(S,N%8)( 2)!StackEmpty(S)2、寫出算法的功能。int fun ctio n(SqQueue *Q,ElemType *e)if(Q->fr on t=Q_>rear)return ERROR;*e=Q->baseQ->fro nt;Q->fro nt=(Q->fro nt+1)%MAXSIZE;return OK;3、閱讀算法f2,并回答下列問題:(1) 設(shè)隊(duì)列Q=( 1,
35、3,5,2,4,6 )。寫出執(zhí)行算法f2后的隊(duì)列Q;(2) 簡述算法f2的功能。void f2(Queue *Q)DataType e;if (!QueueEmpty(Q)e=DeQueue(Q);f2(Q);En Queue(Q,e);(2)將隊(duì)列倒置答案:(1) 6,4,2,531五、綜合題1、假設(shè)以帶頭結(jié)點(diǎn)的循環(huán)鏈表表示隊(duì)列,并且只設(shè)一個(gè)指針指向隊(duì)尾結(jié)點(diǎn),但不設(shè)頭指針,請(qǐng)寫出相應(yīng)的入隊(duì)列算法(用函數(shù)實(shí)現(xiàn))。rear答案: void En Queue(L node *rear, ElemType e) Lnode *n ew;New=(L node *)malloc(sizeof(L no
36、 de);If(!new) return ERROR;n ew->data=e; n ew->n ext=rear- >n ext; rear->n ext =n ew; rear =n ew;2、 已知Q是一個(gè)非空隊(duì)列,S是一個(gè)空棧。編寫算法,僅用隊(duì)列和棧的ADT函數(shù)和少量工 作變量,將隊(duì)列Q的所有元素逆置。棧的ADT函數(shù)有:void makeEmpty(SqStack s);置空棧void push(SqStack s,ElemType e);元素 e 入棧ElemType pop(SqStack s);出棧,返回棧頂元素int isEmpty(SqStack s)
37、;判斷棧空隊(duì)列的ADT函數(shù)有:void enQueue(Queue q,ElemType e);元素 e 入隊(duì)ElemType deQueue(Queue q);出隊(duì),返回隊(duì)頭元素int isEmpty(Queue q);判斷隊(duì)空答案: void Queue Inven t(Queue q) ElemType x;makeEmpty(SqStack s);while(!isEmpty(Queue q)x=deQueue(Queue q);push(SqStack s, ElemTypex);while(!isEmpty(SqStack s)x=pop(SqStack s);en Queue(Q
38、ueue q, ElemType x);3、 對(duì)于一個(gè)棧,給出輸入項(xiàng)A,B,C,D ,如果輸入項(xiàng)序列為 A,B,C,D ,試給出全部可能的輸出序列°答案:出棧的可能序列:ABCD ABDCACDBACBD ADCB BACD BADC BCAD BCDACBDA CBADCDBADCBA第五章數(shù)組和廣義表1、設(shè)廣義表L=(a ,b,c),則L的長度和深度分別為( C )°A. 1 和 1B. 1和3C. 1 和 22、廣義表(a),a)的表尾是(B)°A. aB. (a)C.()D. (a)3、稀疏矩陣的常見壓縮存儲(chǔ)方法有(C )兩種°、選擇題A.二維數(shù)
39、組和三維數(shù)組B.三元組和散列表字鏈表D.散列表和十字鏈表D. 2 和 3C.三元組和十A.不可能是子表TTt P /曰豐冷B.只能是子表可以是子表或原子5、數(shù)組A0.5,0.6的內(nèi)存單元中,則元素A.1175的每個(gè)元素占5個(gè)字節(jié),A 55的地址是(AB.11804、一個(gè)非空廣義表的表頭(D )。6、廣義表 G=(a,b(c,d,(e,f),g)A. 3B.4C.只能是原子D.將其按列優(yōu)先次序存儲(chǔ)在起始地址為1000)°C. 1205D.1210的長度是(A )°C. 7D. 87、采用稀疏矩陣的三元組表形式進(jìn)行壓縮存儲(chǔ),若要完成對(duì)三元組表進(jìn)行轉(zhuǎn)置,只要將行和列對(duì)換,這種說法
40、(B )°A.正確B.8、廣義表(a,b,c) 的表尾是(A. b,cB. (b,c)9、常對(duì)數(shù)組進(jìn)行兩種基本操作是A. 建立和刪除 查找與索引錯(cuò)誤C.無法確定B )°C. c( C )°B. 索引和修改D. 以上均不對(duì)D. (c)C.查找和修改D.10、對(duì)一些特殊矩陣采用壓縮存儲(chǔ)的目的主要是為了(D )°A.表達(dá)變得簡單B.對(duì)矩陣元素的存取變得簡單C.去掉矩陣中的多余元素D.減少不必要的存儲(chǔ)空間的開銷11、設(shè)有一個(gè)10階的對(duì)稱矩陣A,采用壓縮存儲(chǔ)方式,以行序?yàn)橹鞔鎯?chǔ),a11為第一個(gè)兀素, 其存儲(chǔ)地址為1,每元素占1個(gè)地址空間,則a85的地址為( )
41、176;A. 13B. 33C. 18D. 4012、設(shè)矩陣A是一個(gè)對(duì)稱矩陣,為了節(jié)省存儲(chǔ),將其下三角部分按行序存放在一維數(shù)組B1,n(n-1)/2中,對(duì)下三角部分中任一元素ai,j(i>=j),在一維數(shù)組B的下標(biāo)位置k的值是(B )°A. i(i-1)/2+j-1B. i(i-1)/2+jC. i(i+1)/2+j-1D. i(i+1)/2+j13、廣義表A=(a),a)的 表頭是(B ) °A. aB. (a)C. bD. (a)14、稀疏矩陣一般的壓縮存儲(chǔ)方法有兩種,即( C )。A. 二維數(shù)組和三維數(shù)組B.三元組和散列D.散列和十字鏈表15、 假設(shè)以三元組表表
42、示稀疏矩陣,則與如圖所示三元組表對(duì)應(yīng)的C.三元組和十字鏈表4X 5的稀疏矩陣是(注:08060f 0-80607000070003A.00000B.-50400L50400<000000-8060、0-80600000370000C.70000D.一50403<_5040°000001234512-814621725331-5334矩陣的行列下標(biāo)均從1開始)(B )。16、以下有關(guān)廣義表的表述中,正確的是(A )。至少有一個(gè)元素是子B.D.不能為空表A. 由0個(gè)或多個(gè)原子或子表構(gòu)成的有限序列 表C. 不能遞歸定義17、對(duì)廣義表 L=(a,b),(c,d),(e,f)執(zhí)行h
43、ead(tail(head(tail(L)操作的結(jié)果是()。A.的B. eC. (e)D. (e,f )二、判斷題()1、廣義表中原子個(gè)數(shù)即為廣義表的長度。()2、一個(gè)稀疏矩陣采用三元組表示,若把三元組中有關(guān)行下標(biāo)與列下標(biāo)的值互換,并把mu和nu的值進(jìn)行互換,則完成了矩陣轉(zhuǎn)置。(V ) 3、稀疏矩陣壓縮存儲(chǔ)后,必會(huì)失去隨機(jī)存取功能。()4、廣義表的長度是指廣義表中括號(hào)嵌套的層數(shù)。(V ) 5、廣義表是一種多層次的數(shù)據(jù)結(jié)構(gòu),其元素可以是單原子也可以是子表。三、填空題1、 已知二維數(shù)組Amn采用行序?yàn)橹鞣绞酱鎯?chǔ),每個(gè)元素占k個(gè)存儲(chǔ)單元,并且第一個(gè)元素的存儲(chǔ)地址是 L0C(A00),則 Aij的地址
44、是丄oc(A00)+(i*N+j)*k。2、 廣義表運(yùn)算式 HEAD(TAIL(a,b,c),(x,y,z)的結(jié)果是:(x,y,z)。3、 二維數(shù)組,可以按照 兩種不同的存儲(chǔ)方式。4、 稀疏矩陣的壓縮存儲(chǔ)方式有: 和。四、綜合題1、現(xiàn)有一個(gè)稀疏矩陣,請(qǐng)給出它的三元組表。0 31010 0 00 2 100 0 -2 0答案:jv12313121132233143-2第六章樹一、選擇題1、二叉樹的深度為k,則二叉樹最多有(C )個(gè)結(jié)點(diǎn)。k 1kA. 2kB. 2-C. 2-1D. 2k-12、用順序存儲(chǔ)的方法,將完全二叉樹中所有結(jié)點(diǎn)按層逐個(gè)從左到右的順序存放在一維數(shù)組R1.N 中,若結(jié)點(diǎn)Ri有右
45、孩子,則其右孩子是(B )。A. R2i-1B. R2i+1C. R2iD.R2/i3、 設(shè)a,b為一棵二叉樹上的兩個(gè)結(jié)點(diǎn),在中序遍歷時(shí),a在b前面的條件是(B )。A. a 在b的右方B. a 在b的左方C. a 是b的祖先D.a是b的子孫4、 設(shè)一棵二叉樹的中序遍歷序列:badce,后序遍歷序列:bdeca,則二叉樹先序遍歷序列為()。A. adbceB.decab C.debacD.abcde5、在一棵具有5層的滿二叉樹中結(jié)點(diǎn)總數(shù)為( A)。A. 31B. 32 C. 33D. 166、由二叉樹的前序和后序遍歷序列(B )惟一確定這棵二叉樹。A.能B.不能(C )。A. 38、若以4,5
46、,6,7,8A. 677、某二叉樹的中序序列為ABCDEFG,后序序列為BDCAFGE,則其左子樹中結(jié)點(diǎn)數(shù)目為B. 2C. 4D. 5C )。作為權(quán)值構(gòu)造哈夫曼樹,則該樹的帶權(quán)路徑長度為(B. 68C. 69D. 709、將一棵有100個(gè)結(jié)點(diǎn)的完全二叉樹從根這一層開始,每一層上從左到右依次對(duì)結(jié)點(diǎn)進(jìn)行 編號(hào),根結(jié)點(diǎn)的編號(hào)為1,則編號(hào)為49的結(jié)點(diǎn)的左孩子編號(hào)為(A ) oA. 98B. 99C.50D. 4810、表達(dá)式 a*(b+c)-dA.abcd+-的后綴表達(dá)式是(B )oD. -+*abcdB. abc+*d-C. abc*+d-11、 對(duì)某二叉樹進(jìn)行先序遍歷的結(jié)果為ABDEFC,中序遍歷
47、的結(jié)果為 DBFEAC,則后序遍歷 的結(jié)果是(B )。A. DBFEACB. DFEBCAC. BDFECAD. BDEFAC12、樹最適合用來表示(C )oA. 有序數(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)沒有左子樹的充要條件是()。A. t->left=NULLB. t->ltag=1C.t->ltag=1 &&a
48、mp;t->left=NULLD.以上都不對(duì))。D.以上都15、任何一棵二叉樹的葉結(jié)點(diǎn)在先序、中序和后序遍歷序列中的相對(duì)次序(A. 不發(fā)生改變B.發(fā)生改變C.不能確定16、假定在一棵二叉樹中, 個(gè)。不對(duì)度為2的結(jié)點(diǎn)數(shù)為15,度為1的結(jié)點(diǎn)數(shù)為30,則葉子結(jié)點(diǎn)數(shù)為(A. 15B. 16C. 17D. 4717、在下列情況中,可稱為二叉樹的是(B )。B.哈夫曼樹D.每個(gè)結(jié)點(diǎn)只有一棵子樹A.每個(gè)結(jié)點(diǎn)至多有兩棵子樹的樹C. 每個(gè)結(jié)點(diǎn)至多有兩棵子樹的有序樹18、用順序存儲(chǔ)的方法,將完全二叉樹中所有結(jié)點(diǎn)按層逐個(gè)從左到右的順序存放在一維數(shù)組R1.n中,若結(jié)點(diǎn)Ri有左孩子,則其左孩子是()。A. R2i
49、-1B. R2i+1C. R2iD.R2/i19、 下面說法中正確的是()。A.度為2的樹是二叉樹C.子樹有嚴(yán)格左右之分的樹是二叉樹 不超過2的樹是二叉樹20、樹的先根序列等同于與該樹對(duì)應(yīng)的二叉樹的(A.先序序列B.層序序列21、按照二叉樹的定義,具有A. 3B. 4中序序列3個(gè)結(jié)點(diǎn)的二叉樹有(B. 度為2的有序樹是二叉樹D.子樹有嚴(yán)格左右之分,且度C. 后序序列D.C )種。C. 5D. 622、由權(quán)值為3,6,7,2, 5的葉子結(jié)點(diǎn)生成一棵哈夫曼樹,它的帶權(quán)路徑長度為(A )。A. 51B. 23C. 53D. 74二、判斷題()1、存在這樣的二叉樹,對(duì)它采用任何次序的遍歷,結(jié)果相同。2、
50、中序遍歷一棵二叉排序樹的結(jié)點(diǎn),可得到排好序的結(jié)點(diǎn)序列。3、對(duì)于任意非空二叉樹,要設(shè)計(jì)其后序遍歷的非遞歸算法而不使用堆棧結(jié)構(gòu),最適 合的方法是對(duì)該二叉樹采用三叉鏈表。4、在哈夫曼編碼中,當(dāng)兩個(gè)字符出現(xiàn)的頻率相同時(shí),其編碼也相同,對(duì)于這種情況 應(yīng)做特殊處理。(V ) 5、一個(gè)含有n個(gè)結(jié)點(diǎn)的完全二叉樹,它的高度是|llog2n + 1。(V ) 6、完全二叉樹的某結(jié)點(diǎn)若無左孩子,則它必是葉結(jié)點(diǎn)。三、填空題1、 具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度是bog如+1。2、 哈夫曼樹是其樹的帶權(quán)路徑長度最小的二叉樹。3、在一棵二叉樹中,度為0的結(jié)點(diǎn)的個(gè)數(shù)是 nO,度為2的結(jié)點(diǎn)的個(gè)數(shù)為 n2,則有n0=N2+1。4
51、、樹內(nèi)各結(jié)點(diǎn)度的最大值稱為樹的度。四、代碼填空題1、函數(shù)InOrderTraverse(Bitree bt)實(shí)現(xiàn)二叉樹的中序遍歷,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。void InO rderTraverse(BiTree bt)if( )InO rderTraverse(bt->lchild);printf(“ C' ,bt ->data);2、函數(shù)depth實(shí)現(xiàn)返回二叉樹的高度,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。int depth(Bitree *t)if(t=NULL)return 0;elsehl=depth(t->lchild);hr= depth(t->rchild)
52、;if( hl>hr )return hl+1;elsereturn hr+1;3、寫出下面算法的功能。Bitree *function(Bitree *bt)Bitree *t,*t1,*t2;if(bt=NULL)t=NULL;elset=(Bitree *)malloc(sizeof(Bitree);t->data=bt->data;t仁fun ctio n(bt->left);t2=fu ncti on( bt->right);t->left=t2;t->right=t1;return(t);答案:交換二叉樹結(jié)點(diǎn)左右子樹的遞歸算法4、寫出下面算
53、法的功能。void function(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>,請(qǐng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 同城轉(zhuǎn)租 店鋪合同范例
- 雙工作合同范本
- 雙方合資協(xié)議合同范本
- 加工承攬合同范本新
- 勞務(wù)短期合同范本
- 廚柜代銷合同范本
- 租賃合同變更服務(wù)合同范本
- 印刷產(chǎn)品定做合同范本
- 大件搬運(yùn)服務(wù)合同范本
- 合作傭金合同范本
- 2023年北京市中學(xué)生數(shù)學(xué)競賽高一年級(jí)復(fù)賽試題及解答
- 乙?;蚁┩p烯酮;二乙烯酮;雙乙烯酮)的理化性質(zhì)及危險(xiǎn)特性表
- 酒店機(jī)房巡視簽到表
- API-650-1鋼制焊接石油儲(chǔ)罐
- 鼠疫演練腳本
- 變壓器試驗(yàn)精品課件
- 傷口(壓瘡)的評(píng)估與記錄
- 煤礦機(jī)電運(yùn)輸類臺(tái)賬(各種記錄匯編)
- 《道德與法治》五年級(jí)下冊(cè)全冊(cè)教案
- 危險(xiǎn)化學(xué)品從業(yè)單位安全生產(chǎn)標(biāo)準(zhǔn)化宣貫
- Zabbix監(jiān)控系統(tǒng)方案
評(píng)論
0/150
提交評(píng)論