太原理工大學(xué)數(shù)據(jù)結(jié)構(gòu)試題庫及答案_第1頁
太原理工大學(xué)數(shù)據(jù)結(jié)構(gòu)試題庫及答案_第2頁
太原理工大學(xué)數(shù)據(jù)結(jié)構(gòu)試題庫及答案_第3頁
太原理工大學(xué)數(shù)據(jù)結(jié)構(gòu)試題庫及答案_第4頁
太原理工大學(xué)數(shù)據(jù)結(jié)構(gòu)試題庫及答案_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 數(shù)據(jù)結(jié)構(gòu)試題庫及答案第一章 概論一、選擇題1、研究數(shù)據(jù)結(jié)構(gòu)就是研究( d )。a. 數(shù)據(jù)的邏輯結(jié)構(gòu) b. 數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu) c. 數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu) d. 數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)及其基本操作2、算法分析的兩個(gè)主要方面是( a )。 a. 空間復(fù)雜度和時(shí)間復(fù)雜度b. 正確性和簡單性 c. 可讀性和文檔性 d. 數(shù)據(jù)復(fù)雜性和程序復(fù)雜性3、具有線性結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)是( d )。a. 圖 b. 樹c. 廣義表 d. 棧6、算法是( d )。a. 計(jì)算機(jī)程序 b. 解決問題的計(jì)算方法c. 排序算法 d. 解決問題的有限運(yùn)算序列7、某算法的語句執(zhí)行頻度為(3n+nlog2n+n2+8),其時(shí)間復(fù)雜度

2、表示( c )。a. o(n) b. o(nlog2n) c. o(n2) d. o(log2n)11、抽象數(shù)據(jù)類型的三個(gè)組成部分分別為( a )。a. 數(shù)據(jù)對(duì)象、數(shù)據(jù)關(guān)系和基本操作 b. 數(shù)據(jù)元素、邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu) c. 數(shù)據(jù)項(xiàng)、數(shù)據(jù)元素和數(shù)據(jù)類型 d. 數(shù)據(jù)元素、數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型二、填空題三、綜合題1、將數(shù)量級(jí)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ù)

3、元素的有限集合,r是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)容。3. 數(shù)據(jù)結(jié)構(gòu)按邏輯結(jié)構(gòu)可分為兩大類,它們分別是線性結(jié)構(gòu)和非線性結(jié)構(gòu)。8數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)可用四種基本的存儲(chǔ)方法表示,它們分別是順序、鏈?zhǔn)?、索引、散列?. 數(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ù)類型不

4、僅定義了一組帶結(jié)構(gòu)的數(shù)據(jù)元素,而且還在其上定義了一組操作。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ì)多的。四、分析下面各程序段的時(shí)間復(fù)雜度2. s=0; for (i=0; in; i+)for(j=0; jn; j+) s+=bij;sum=s; 1. for (i=0; in; i+)for (j=0; jm; j+)aij=0; 3. x=0;for(i=1; in; i+) for (j=1; j=n-i; j+)x+; 4. i=1; while(inext=q;q-prior=p;p-next-prior

5、=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;10、線性表是n個(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ù)雜度為( )。a. o(n) b

6、. o(1) c. o(n2) 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-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的單鏈表之后的算法的時(shí)間復(fù)雜度為( )。a. o(1)b. o(n)c. o(m)d. o(m+n)18、線性表的順序存儲(chǔ)結(jié)構(gòu)是一種( a )存儲(chǔ)結(jié)構(gòu)。 n

7、 a. 隨機(jī)存取b. 順序存取c. 索引存取d. 散列存取19、順序表中,插入一個(gè)元素所需移動(dòng)的元素平均數(shù)是( )。 a. (n-1)/2 b. n c. n+1 d. (n+1)/211、不帶頭結(jié)點(diǎn)的單鏈表head為空的判定條件是( b )。a. head=null b. head-next=null c. head-next=head d. head!=null12、在下列對(duì)順序表進(jìn)行的操作中,算法時(shí)間復(fù)雜度為o(1)的是( )。a. 訪問第i個(gè)元素的前驅(qū)(1next=s-next;s-next=p; b. s-next=p;q-next=s-next; c. p-next=s-next;

8、s-next=q; d. s-next=q;p-next=s-next;15、在表長為n的順序表中,當(dāng)在任何位置刪除一個(gè)元素的概率相同時(shí),刪除一個(gè)元素所需移動(dòng)的平均個(gè)數(shù)為( a )。a. (n-1)/2 b. n/2 c. (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-next=p-next p-next=q3、寫出帶頭結(jié)點(diǎn)的雙向循環(huán)鏈表l為空表的條件 。答案:l-prior=l-next=l5、在一個(gè)單鏈表中刪除p所指結(jié)點(diǎn)的后繼結(jié)點(diǎn)時(shí),應(yīng)執(zhí)行以下操作:q

9、= p-next;p-next=_ q-next _;三、判斷題3、用循環(huán)單鏈表表示的鏈隊(duì)列中,可以不設(shè)隊(duì)頭指針,僅在隊(duì)尾設(shè)置隊(duì)尾指針。x4、順序存儲(chǔ)方式只能用于存儲(chǔ)線性結(jié)構(gòu)。o5、在線性表的順序存儲(chǔ)結(jié)構(gòu)中,邏輯上相鄰的兩個(gè)元素但是在物理位置上不一定是相鄰的。o6、鏈?zhǔn)酱鎯?chǔ)的線性表可以隨機(jī)存取。o 四、程序分析填空題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-next;j=1;while(p&jnext ;+j;if(!p|ji) retu

10、rn error;*e= p-data ;return ok;2、函數(shù)實(shí)現(xiàn)單鏈表的插入算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。int listinsert(linklist l,int i,elemtype e) lnode *p,*s;int j; p=l;j=0; while(p!=null)&(jnext;j+; if(p=null|ji-1) return error; s=(lnode *)malloc(sizeof(lnode); s-data=e; s-next=p-next ; p-next=s ; return ok;/*listinsert*/3、函數(shù)listdelete_sq實(shí)現(xiàn)

11、順序表刪除算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。int listdelete_sq(sqlist *l,int i) int k; if(il-length) return error;for(k=i-1;klength-1;k+) l-slistk= l-slistk+1 ; -l-length ; return ok;4、函數(shù)實(shí)現(xiàn)單鏈表的刪除算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。int listdelete(linklist l,int i,elemtype *s) lnode *p,*q; int j; p=l;j=0; while( p-next!=null )&(jnext;j+; if(p-n

12、ext=null|ji-1) return error; q=p-next; p-next=q-next ; *s=q-data; free(q); return ok;/*listdelete*/5、寫出算法的功能。int l(head)node * head;int n=0;node *p;p=head;while(p!=null) p=p-next; n+; return(n);答案:求單鏈表head的長度五、綜合題1、編寫算法,實(shí)現(xiàn)帶頭結(jié)點(diǎn)單鏈表的逆置算法。答案:void invent(lnode *head) lnode *p,*q; if(!head-next) return er

13、ror; p=head-next; q=p-next; p-next =null; while(q) p=q; q=q-next; p-next=head-next; head-next=p; 2、有兩個(gè)循環(huán)鏈表,鏈頭指針分別為l1和l2,要求寫出算法將l2鏈表鏈到l1鏈表之后,且連接后仍保持循環(huán)鏈表形式。答案:void merge(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è)一個(gè)帶頭結(jié)點(diǎn)的單向鏈表的頭指針為he

14、ad,設(shè)計(jì)算法,將鏈表的記錄,按照data域的值遞增排序。答案:void assending(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-datadata) r-next=p; head-next=r; p=r; elsewhile(!p & r-datap-data)s=p; p=p-next; r-next=p; s-next=r;p=head-next; 4、編寫算法,將一個(gè)頭指針為head不帶頭結(jié)點(diǎn)的單鏈表改造為一個(gè)單向循環(huán)鏈表,并分析

15、算法的時(shí)間復(fù)雜度。答案:void linklist_c(lnode *head) lnode *p; p=head; if(!p) return error;while(p-next!=null)p=p-next;p-next=head; 設(shè)單鏈表的長度(數(shù)據(jù)結(jié)點(diǎn)數(shù))為n,則該算法的時(shí)間主要花費(fèi)在查找鏈表最后一個(gè)結(jié)點(diǎn)上(算法中的while循環(huán)),所以該算法的時(shí)間復(fù)雜度為o(n)。5、已知head為帶頭結(jié)點(diǎn)的單循環(huán)鏈表的頭指針,鏈表中的數(shù)據(jù)元素依次為(a1,a2,a3,a4,an),a為指向空的順序表的指針。閱讀以下程序段,并回答問題:(1)寫出執(zhí)行下列程序段后的順序表a中的數(shù)據(jù)元素;(2)簡要

16、敘述該程序段的功能。if(head-next!=head)p=head-next;a-length=0;while(p-next!=head)p=p-next;a-dataa-length +=p-data;if(p-next!=head)p=p-next;答案: (1) (a2, a4, , ) (2)將循環(huán)單鏈表中偶數(shù)結(jié)點(diǎn)位置的元素值寫入順序表a6、設(shè)順序表va中的數(shù)據(jù)元數(shù)遞增有序。試寫一算法,將x插入到順序表的適當(dāng)位置上,以保持該表的有序性。答案:void insert_sq(sqlist va, elemtype x) int i, j, n; n=length(va); if(x=v

17、ai)van=x;elsei=0;while(xvai) i+;for(j=n-1;j=i;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;ilength;i+) for(j=0;jdatai!=l-dataj;j+); if(j=k) if(k!=i)l-datak=l-datai; k+; l-length=k;答案: (3,7,2

18、,1,8) 刪除順序表中重復(fù)的元素8、已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲(chǔ)結(jié)構(gòu)。試寫一算法,刪除表中所有大于x且小于y的元素(若表中存在這樣的元素)同時(shí)釋放被刪除結(jié)點(diǎn)空間。答案:void delete_list(lnode *head, elemtype x, elemtype y) lnode *p, *q; if(!head) return error;p=head; q=p;while(!p) if(p-datax) & (p-datanext; free(p); p=head; q=p; elseq-next=p-next; free(p);p=q-next; else

19、q=p; p=p-next; 9、在帶頭結(jié)點(diǎn)的循環(huán)鏈表l中,結(jié)點(diǎn)的數(shù)據(jù)元素為整型,且按值遞增有序存放。給定兩個(gè)整數(shù)a和b,且arear=q-front b. q-rear=q-front+1 c. q-front=(q-rear+1)%n d. q-front=(q-rear-1)%n3、設(shè)計(jì)一個(gè)判別表達(dá)式中括號(hào)是否配對(duì)的算法,采用( )數(shù)據(jù)結(jié)構(gòu)最佳。a. 順序表 b. 鏈表 c. 隊(duì)列 d. 棧4、帶頭結(jié)點(diǎn)的單鏈表head為空的判定條件是( )。a. head=nullb. head-next=nullc. head-next!=null d. head!=null5、一個(gè)棧的輸入序列為:1

20、,2,3,4,則棧的不可能輸出的序列是( )。a. 1243 b. 2134 c. 1432 d. 4312e. 32146、若用一個(gè)大小為6的數(shù)組來實(shí)現(xiàn)循環(huán)隊(duì)列,且當(dāng)rear和front的值分別為0,3。當(dāng)從隊(duì)列中刪除一個(gè)元素,再加入兩個(gè)元素后,rear和front的值分別為( )。a. 1和5 b. 2和4c. 4和2 d. 5和17、隊(duì)列的插入操作是在( )。a. 隊(duì)尾 b. 隊(duì)頭c. 隊(duì)列任意位置d. 隊(duì)頭元素后8、循環(huán)隊(duì)列的隊(duì)頭和隊(duì)尾指針分別為front和rear,則判斷循環(huán)隊(duì)列為空的條件是( )。a. front=rear b. front=0 c. rear=0 d. front

21、=rear+19、一個(gè)順序棧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)換成對(duì)應(yīng)的非遞歸算法時(shí),通常需要使用( )來保存中間結(jié)果。a. 隊(duì)列 b. 棧c. 鏈表 d. 樹12、棧的插入和刪除操作在( )。 a. 棧底 b. 棧頂 c. 任意位置 d. 指定位置13、五節(jié)車廂以編號(hào)1,2,3,4,5順序進(jìn)入鐵路調(diào)度

22、站(棧),可以得到( )的編組。a. 3,4,5,1,2b. 2,4,1,3,5c. 3,5,4,2,1d. 1,3,5,2,414、判定一個(gè)順序棧s(??臻g大小為n)為空的條件是( )。a. s-top=0 b. s-top!=0c. s-top=nd. s-top!=n15、在一個(gè)鏈隊(duì)列中,front和rear分別為頭指針和尾指針,則插入一個(gè)結(jié)點(diǎn)s的操作為( )。a. front=front-next b. s-next=rear;rear=sc. rear-next=s;rear=s;d. s-next=front;front=s;16、一個(gè)隊(duì)列的入隊(duì)序列是1,2,3,4,則隊(duì)列的出隊(duì)序

23、列是( )。a. 1,2,3,4b. 4,3,2,1c. 1,4,3,2d. 3,4,1,217、依次在初始為空的隊(duì)列中插入元素a,b,c,d以后,緊接著做了兩次刪除操作,此時(shí)的隊(duì)頭元素是( )。a. a b. b c. c d. d18、正常情況下,刪除非空的順序存儲(chǔ)結(jié)構(gòu)的堆棧的棧頂元素,棧頂指針top的變化是( )。a. top不變 b. top=0 c. top=top+1 d. top=top-119、判斷一個(gè)循環(huán)隊(duì)列q(空間大小為m)為空的條件是( )。a. q-front=q-rear b. q-rear-q-front-1=m c. q-front+1=q-rear d. q-r

24、ear+1=q-front20、設(shè)計(jì)一個(gè)判別表達(dá)式中左右括號(hào)是否配對(duì)出現(xiàn)的算法,采用( )數(shù)據(jù)結(jié)構(gòu)最佳。a. 線性表的順序存儲(chǔ)結(jié)構(gòu)b. 隊(duì)列c. 棧 d. 線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)21、當(dāng)用大小為n的數(shù)組存儲(chǔ)順序循環(huán)隊(duì)列時(shí),該隊(duì)列的最大長度為( )。a. nb. n+1c. n-1d. n-222、隊(duì)列的刪除操作是在( )。a. 隊(duì)首b. 隊(duì)尾c. 隊(duì)前d. 隊(duì)后23、若讓元素1,2,3依次進(jìn)棧,則出棧次序不可能是( )。a. 3,2,1b. 2,1,3c. 3,1,2 d. 1,3,224、循環(huán)隊(duì)列用數(shù)組a0,m-1存放其元素值,已知其頭尾指針分別是front和rear,則當(dāng)前隊(duì)列中的元素個(gè)數(shù)是

25、( )。a. (rear-front+m)%mb. rear-front+1c. rear-front-1d. rear-front25、在解決計(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) b. 鏈?zhǔn)酱鎯?chǔ)的非線性結(jié)構(gòu) c. 限制存取點(diǎn)的線性結(jié)構(gòu) d. 限制存取點(diǎn)的非線性結(jié)構(gòu)27、在一個(gè)鏈隊(duì)列中,假定front和rear分別為隊(duì)頭指針和隊(duì)尾指針,刪除一個(gè)結(jié)點(diǎn)的操作是( )。a.

26、 front=front-next b. rear= rear-nextc. rear-next=frontd. front-next=rear28、隊(duì)和棧的主要區(qū)別是( )。a. 邏輯結(jié)構(gòu)不同 b. 存儲(chǔ)結(jié)構(gòu)不同c. 所包含的運(yùn)算個(gè)數(shù)不同 d. 限定插入和刪除的位置不同二、填空題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,e1,則棧的容量至少應(yīng)該是 。答案:32、一個(gè)循環(huán)隊(duì)列q的存儲(chǔ)空間大小為m,其隊(duì)頭和隊(duì)尾指針分別為front和rear,則循環(huán)隊(duì)列中元素的個(gè)數(shù)為: 。答

27、案:(rear-front+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)。p2、在單鏈表中,要訪問某個(gè)結(jié)點(diǎn),只要知道該結(jié)點(diǎn)的地址即可;因此,單鏈表是一種隨機(jī)存取結(jié)構(gòu)。o3、以鏈表作為棧的存儲(chǔ)結(jié)構(gòu),出棧操作必須判別??盏那闆r。p四、程序分析填空題1、已知棧的基本操作函數(shù):int initstack

28、(sqstack *s); /構(gòu)造空棧int stackempty(sqstack *s);/判斷??読nt push(sqstack *s,elemtype e);/入棧int pop(sqstack *s,elemtype *e);/出棧函數(shù)conversion實(shí)現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)換為八進(jìn)制數(shù),請(qǐng)將函數(shù)補(bǔ)充完整。void conversion()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)!stackempt

29、y(s)2、寫出算法的功能。int function(sqqueue *q,elemtype *e)if(q-front=q-rear)return error;*e=q-baseq-front;q-front=(q-front+1)%maxsize;return ok;3、閱讀算法f2,并回答下列問題:(1)設(shè)隊(duì)列q=(1,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); enqueue(q,e); 答案:(1)6,4,2,5,

30、3,1(2)將隊(duì)列倒置五、綜合題1、假設(shè)以帶頭結(jié)點(diǎn)的循環(huán)鏈表表示隊(duì)列,并且只設(shè)一個(gè)指針指向隊(duì)尾結(jié)點(diǎn),但不設(shè)頭指針,請(qǐng)寫出相應(yīng)的入隊(duì)列算法(用函數(shù)實(shí)現(xiàn))。答案:void enqueue(lnode *rear, elemtype e) lnode *new; new=(lnode *)malloc(sizeof(lnode);if(!new) return error;new-data=e; new-next=rear-next; rear-next=new; rear =new; 2、已知q是一個(gè)非空隊(duì)列,s是一個(gè)空棧。編寫算法,僅用隊(duì)列和棧的adt函數(shù)和少量工作變量,將隊(duì)列q的所有元素逆置。

31、棧的adt函數(shù)有:void makeempty(sqstack s);置空棧void push(sqstack s,elemtype e);元素e入棧elemtype pop(sqstack s);出棧,返回棧頂元素int isempty(sqstack s);判斷??贞?duì)列的adt函數(shù)有:void enqueue(queue q,elemtype e);元素e入隊(duì)elemtype dequeue(queue q);出隊(duì),返回隊(duì)頭元素int isempty(queue q);判斷隊(duì)空答案:void queueinvent(queue q) elemtype x; makeempty(sqstac

32、k s);while(!isempty(queue q)x=dequeue(queue q);push(sqstack s, elemtypex);while(!isempty(sqstack s)x=pop(sqstack s); enqueue(queue q, elemtype x); 3、對(duì)于一個(gè)棧,給出輸入項(xiàng)a,b,c,d,如果輸入項(xiàng)序列為a,b,c,d,試給出全部可能的輸出序列。答案:出棧的可能序列: abcd abdc acdb acbd adcb bacd badc bcad bcda cbda cbad cdba dcba第五章 數(shù)組和廣義表一、選擇題1、設(shè)廣義表l=(a,b

33、,c),則l的長度和深度分別為( c )。a. 1和1 b. 1和3c. 1和2d. 2和32、廣義表(a),a)的表尾是( b )。a. a b. (a)c. ()d. (a)3、稀疏矩陣的常見壓縮存儲(chǔ)方法有( c )兩種。a. 二維數(shù)組和三維數(shù)組 b. 三元組和散列表c. 三元組和十字鏈表d. 散列表和十字鏈表4、一個(gè)非空廣義表的表頭( d )。a. 不可能是子表 b. 只能是子表c. 只能是原子 d. 可以是子表或原子5、數(shù)組a0.5,0.6的每個(gè)元素占5個(gè)字節(jié),將其按列優(yōu)先次序存儲(chǔ)在起始地址為1000的內(nèi)存單元中,則元素a55的地址是( a )。a. 1175 b. 1180c. 12

34、05 d. 12106、廣義表g=(a,b(c,d,(e,f),g)的長度是( a )。a. 3 b. 4c. 7d. 87、采用稀疏矩陣的三元組表形式進(jìn)行壓縮存儲(chǔ),若要完成對(duì)三元組表進(jìn)行轉(zhuǎn)置,只要將行和列對(duì)換,這種說法( b )。a. 正確 b. 錯(cuò)誤c. 無法確定 d. 以上均不對(duì)8、廣義表(a,b,c)的表尾是( b )。a. b,c b. (b,c) c. c d. (c)9、常對(duì)數(shù)組進(jìn)行兩種基本操作是( c )。a. 建立和刪除 b. 索引和修改c. 查找和修改 d. 查找與索引10、對(duì)一些特殊矩陣采用壓縮存儲(chǔ)的目的主要是為了( d )。a. 表達(dá)變得簡單 b. 對(duì)矩陣元素的存取變得

35、簡單c. 去掉矩陣中的多余元素 d. 減少不必要的存儲(chǔ)空間的開銷11、設(shè)有一個(gè)10階的對(duì)稱矩陣a,采用壓縮存儲(chǔ)方式,以行序?yàn)橹鞔鎯?chǔ),a11為第一個(gè)元素,其存儲(chǔ)地址為1,每元素占1個(gè)地址空間,則a85的地址為( )。a. 13b. 33c. 18 d. 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-1 b. i(i-1)/2+j c. i(i+1)/2+j-1 d. i(i+1)/2+j13、廣義表a=(a),a)的表頭是(

36、 b )。a. a b. (a)c. bd. (a)14、稀疏矩陣一般的壓縮存儲(chǔ)方法有兩種,即( c )。a. 二維數(shù)組和三維數(shù)組b. 三元組和散列c. 三元組和十字鏈表d. 散列和十字鏈表15、假設(shè)以三元組表表示稀疏矩陣,則與如圖所示三元組表對(duì)應(yīng)的45的稀疏矩陣是(注:矩陣的行列下標(biāo)均從1開始)( b )。a. b. c. d. 16、以下有關(guān)廣義表的表述中,正確的是( a )。a. 由0個(gè)或多個(gè)原子或子表構(gòu)成的有限序列 b. 至少有一個(gè)元素是子表 c. 不能遞歸定義 d. 不能為空表17、對(duì)廣義表l=(a,b),(c,d),(e,f)執(zhí)行head(tail(head(tail(l)操作的結(jié)

37、果是( )。a. 的 b. e c. (e)d. (e,f)二、判斷題( )1、廣義表中原子個(gè)數(shù)即為廣義表的長度。( )2、一個(gè)稀疏矩陣采用三元組表示,若把三元組中有關(guān)行下標(biāo)與列下標(biāo)的值互換,并把mu和nu的值進(jìn)行互換,則完成了矩陣轉(zhuǎn)置。( )3、稀疏矩陣壓縮存儲(chǔ)后,必會(huì)失去隨機(jī)存取功能。( )4、廣義表的長度是指廣義表中括號(hào)嵌套的層數(shù)。( )5、廣義表是一種多層次的數(shù)據(jù)結(jié)構(gòu),其元素可以是單原子也可以是子表。三、填空題1、已知二維數(shù)組amn采用行序?yàn)橹鞣绞酱鎯?chǔ),每個(gè)元素占k個(gè)存儲(chǔ)單元,并且第一個(gè)元素的存儲(chǔ)地址是loc(a00),則aij的地址是_ loc(a00)+(i*n+j)*k _。2、

38、廣義表運(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)給出它的三元組表。答案:第六章 樹一、選擇題1、二叉樹的深度為k,則二叉樹最多有( c )個(gè)結(jié)點(diǎn)。a. 2k b. 2k-1 c. 2k-1 d. 2k-12、用順序存儲(chǔ)的方法,將完全二叉樹中所有結(jié)點(diǎn)按層逐個(gè)從左到右的順序存放在一維數(shù)組r1.n中,若結(jié)點(diǎn)ri有右孩子,則其右孩子是( b )。a. r2i-1 b. r2i+1c. r2i d. r2/i3、設(shè)a,b為一棵二叉樹上的兩個(gè)結(jié)點(diǎn),在

39、中序遍歷時(shí),a在b前面的條件是( b )。a. a在b的右方 b. a在b的左方c. a是b的祖先d. a是b的子孫4、設(shè)一棵二叉樹的中序遍歷序列:badce,后序遍歷序列:bdeca,則二叉樹先序遍歷序列為( )。a. adbce b. decab c. debac d. abcde5、在一棵具有5層的滿二叉樹中結(jié)點(diǎn)總數(shù)為(a)。 a. 31 b. 32 c. 33 d. 166、由二叉樹的前序和后序遍歷序列( b )惟一確定這棵二叉樹。a. 能 b. 不能7、某二叉樹的中序序列為abcdefg,后序序列為bdcafge,則其左子樹中結(jié)點(diǎn)數(shù)目為( c )。a. 3b. 2c. 4d. 58、

40、若以4,5,6,7,8作為權(quán)值構(gòu)造哈夫曼樹,則該樹的帶權(quán)路徑長度為( c )。a. 67b. 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 )。a. 98b. 99c. 50d. 4810、表達(dá)式a*(b+c)-d的后綴表達(dá)式是( b )。a. abcd+-b. abc+*d-c. abc*+d- d. -+*abcd11、對(duì)某二叉樹進(jìn)行先序遍歷的結(jié)果為abdefc,中序遍歷的結(jié)果為dbfeac,則后序遍歷的結(jié)果是( b )。a. dbfeacb. dfebcac. bd

41、fecad. 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)沒有左子樹的充要條件是( )。a. t-left=nullb. t-ltag=1c. t-ltag=1&t-left=nulld. 以上都不對(duì)15、任何一棵二叉樹的葉結(jié)點(diǎn)在先序、中序和后序遍歷序列中的相對(duì)次序( )。a. 不

42、發(fā)生改變b. 發(fā)生改變c. 不能確定d. 以上都不對(duì)16、假定在一棵二叉樹中,度為2的結(jié)點(diǎn)數(shù)為15,度為1的結(jié)點(diǎn)數(shù)為30,則葉子結(jié)點(diǎn)數(shù)為( )個(gè)。a. 15b. 16c. 17d. 4717、在下列情況中,可稱為二叉樹的是( b )。a. 每個(gè)結(jié)點(diǎn)至多有兩棵子樹的樹b. 哈夫曼樹c. 每個(gè)結(jié)點(diǎn)至多有兩棵子樹的有序樹d. 每個(gè)結(jié)點(diǎn)只有一棵子樹18、用順序存儲(chǔ)的方法,將完全二叉樹中所有結(jié)點(diǎn)按層逐個(gè)從左到右的順序存放在一維數(shù)組r1.n中,若結(jié)點(diǎn)ri有左孩子,則其左孩子是( )。a. r2i-1 b. r2i+1c. r2i d. r2/i19、下面說法中正確的是( )。a. 度為2的樹是二叉樹 b.

43、 度為2的有序樹是二叉樹 c. 子樹有嚴(yán)格左右之分的樹是二叉樹d. 子樹有嚴(yán)格左右之分,且度不超過2的樹是二叉樹20、樹的先根序列等同于與該樹對(duì)應(yīng)的二叉樹的( )。a. 先序序列 b. 中序序列 c. 后序序列 d. 層序序列21、按照二叉樹的定義,具有3個(gè)結(jié)點(diǎn)的二叉樹有( c )種。a. 3b. 4c. 5d. 622、由權(quán)值為3,6,7,2,5的葉子結(jié)點(diǎn)生成一棵哈夫曼樹,它的帶權(quán)路徑長度為( a )。a. 51b. 23c. 53 d. 74二、判斷題( )1、存在這樣的二叉樹,對(duì)它采用任何次序的遍歷,結(jié)果相同。( )2、中序遍歷一棵二叉排序樹的結(jié)點(diǎn),可得到排好序的結(jié)點(diǎn)序列。( )3、對(duì)于

44、任意非空二叉樹,要設(shè)計(jì)其后序遍歷的非遞歸算法而不使用堆棧結(jié)構(gòu),最適合的方法是對(duì)該二叉樹采用三叉鏈表。( )4、在哈夫曼編碼中,當(dāng)兩個(gè)字符出現(xiàn)的頻率相同時(shí),其編碼也相同,對(duì)于這種情況應(yīng)做特殊處理。( )5、一個(gè)含有n個(gè)結(jié)點(diǎn)的完全二叉樹,它的高度是log2n1。( )6、完全二叉樹的某結(jié)點(diǎn)若無左孩子,則它必是葉結(jié)點(diǎn)。三、填空題1、具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度是 log2n+1 。2、哈夫曼樹是其樹的帶權(quán)路徑長度 最小 的二叉樹。3、在一棵二叉樹中,度為0的結(jié)點(diǎn)的個(gè)數(shù)是n0,度為2的結(jié)點(diǎn)的個(gè)數(shù)為n2,則有n0= n2+1 。4、樹內(nèi)各結(jié)點(diǎn)度的 最大值 稱為樹的度。四、代碼填空題1、函數(shù)inordertraverse(bitree bt)實(shí)現(xiàn)二叉樹的中序遍歷,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。void inordertraverse(bitree bt)if( )inordertraverse(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

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論