九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

太原理工大學(xué)數(shù)據(jù)結(jié)構(gòu)試題庫及答案.doc

  • 資源ID:6532861       資源大?。?span id="24d9guoke414" class="font-tahoma">331.28KB        全文頁數(shù):37頁
  • 資源格式: DOC        下載積分:9.9積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要9.9積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

太原理工大學(xué)數(shù)據(jù)結(jié)構(gòu)試題庫及答案.doc

數(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. 棧6、算法是( D )。A. 計算機程序 B. 解決問題的計算方法C. 排序算法 D. 解決問題的有限運算序列7、某算法的語句執(zhí)行頻度為(3n+nlog2n+n2+8),其時間復(fù)雜度表示( C )。A. O(n) B. O(nlog2n) C. O(n2) D. O(log2n)11、抽象數(shù)據(jù)類型的三個組成部分分別為( A )。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ù)類型二、填空題三、綜合題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ù)的運算這三個方面的內(nèi)容。3. 數(shù)據(jù)結(jié)構(gòu)按邏輯結(jié)構(gòu)可分為兩大類,它們分別是線性結(jié)構(gòu)和非線性結(jié)構(gòu)。8數(shù)據(jù)的存儲結(jié)構(gòu)可用四種基本的存儲方法表示,它們分別是順序、鏈?zhǔn)健⑺饕?、散列?. 數(shù)據(jù)的運算最常用的有5種,它們分別是插入、刪除、修改、查找、排序。二、單項選擇題( C )2. 數(shù)據(jù)結(jié)構(gòu)中,與所使用的計算機無關(guān)的是數(shù)據(jù)的 結(jié)構(gòu);A) 存儲 B) 物理 C) 邏輯 D) 物理和存儲三、簡答題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. s=0; for (i=0; i<n; i+)for(j=0; j<n; j+) s+=Bij;sum=s; 1. for (i=0; i<n; i+)for (j=0; j<m; j+)Aij=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; Mn nn nn log3n 五、設(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) 2 D=d1,d2,d9 R=(d1,d2),(d1,d3),(d3,d4),(d3,d6),(d6,d8),(d4,d5), (d6,d7),(d8,d9) 3D=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)鏈表7、在雙向循環(huán)鏈表中,在p指針?biāo)傅慕Y(jié)點后插入一個指針q所指向的新結(jié)點,修改指針的操作是( c )。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;10、線性表是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)15、在線性表的下列存儲結(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的單鏈表之后的算法的時間復(fù)雜度為( )。A. O(1)B. O(n)C. O(m)D. O(m+n)18、線性表的順序存儲結(jié)構(gòu)是一種( a )存儲結(jié)構(gòu)。 N A. 隨機存取B. 順序存取C. 索引存取D. 散列存取19、順序表中,插入一個元素所需移動的元素平均數(shù)是( )。 A. (n-1)/2 B. n C. n+1 D. (n+1)/211、不帶頭結(jié)點的單鏈表head為空的判定條件是( b )。A. head=NULL B. head->next=NULL C. head->next=head D. head!=NULL12、在下列對順序表進行的操作中,算法時間復(fù)雜度為O(1)的是( )。A. 訪問第i個元素的前驅(qū)(1<)B. 在第i個元素之后插入一個新元素()C. 刪除第i個元素()D. 對順序表中元素進行排序13、已知指針p和q分別指向某單鏈表中第一個結(jié)點和最后一個結(jié)點。假設(shè)指針s指向另一個單鏈表中某個結(jié)點,則在s所指結(jié)點之后插入上述鏈表應(yīng)執(zhí)行的語句為( a )。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)在任何位置刪除一個元素的概率相同時,刪除一個元素所需移動的平均個數(shù)為( a )。A. (n-1)/2 B. n/2 C. (n+1)/2D. n二、填空題1、設(shè)單鏈表的結(jié)點結(jié)構(gòu)為(data,next)。已知指針p指向單鏈表中的結(jié)點,q指向新結(jié)點,欲將q插入到p結(jié)點之后,則需要執(zhí)行的語句: ; 。答案:q->next=p->next p->next=q3、寫出帶頭結(jié)點的雙向循環(huán)鏈表L為空表的條件 。答案:L->prior=L->next=L5、在一個單鏈表中刪除p所指結(jié)點的后繼結(jié)點時,應(yīng)執(zhí)行以下操作:q = p->next;p->next=_ q->next _;三、判斷題3、用循環(huán)單鏈表表示的鏈隊列中,可以不設(shè)隊頭指針,僅在隊尾設(shè)置隊尾指針。x4、順序存儲方式只能用于存儲線性結(jié)構(gòu)。O5、在線性表的順序存儲結(jié)構(gòu)中,邏輯上相鄰的兩個元素但是在物理位置上不一定是相鄰的。O6、鏈?zhǔn)酱鎯Φ木€性表可以隨機存取。O 四、程序分析填空題1、函數(shù)GetElem實現(xiàn)返回單鏈表的第i個元素,請在空格處將算法補充完整。int GetElem(LinkList L,int i,Elemtype *e)LinkList p;int j;p=L->next;j=1;while(p&&j<i) p=p->next ;+j;if(!p|j>i) return ERROR;*e= p->data ;return OK;2、函數(shù)實現(xiàn)單鏈表的插入算法,請在空格處將算法補充完整。int ListInsert(LinkList L,int i,ElemType e) LNode *p,*s;int j; p=L;j=0; 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->next=p->next ; p->next=s ; return OK;/*ListInsert*/3、函數(shù)ListDelete_sq實現(xiàn)順序表刪除算法,請在空格處將算法補充完整。int ListDelete_sq(Sqlist *L,int i) int k; if(i<1|i>L->length) return ERROR;for(k=i-1;k<L->length-1;k+) L->slistk= L->slistk+1 ; -L->Length ; return OK;4、函數(shù)實現(xiàn)單鏈表的刪除算法,請在空格處將算法補充完整。int ListDelete(LinkList L,int i,ElemType *s) LNode *p,*q; int j; p=L;j=0; while( p->next!=NULL )&&(j<i-1) p=p->next;j+; if(p->next=NULL|j>i-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、編寫算法,實現(xiàn)帶頭結(jié)點單鏈表的逆置算法。答案:void invent(Lnode *head) Lnode *p,*q; if(!head->next) return ERROR; 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)鏈表形式。答案: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è)一個帶頭結(jié)點的單向鏈表的頭指針為head,設(shè)計算法,將鏈表的記錄,按照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->data<=p->data) r->next=p; head->next=r; p=r; elsewhile(!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ù)雜度。答案: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é)點數(shù))為N,則該算法的時間主要花費在查找鏈表最后一個結(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->dataA->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)位置上,以保持該表的有序性。答案:void Insert_sq(Sqlist va, ElemType x) int i, j, n; n=length(va); if(x>=vai)van=x;elsei=0;while(x>vai) i+;for(j=n-1;j>=I;j-)vaj+1=vaj;vai=x; n+; 7、假設(shè)線性表采用順序存儲結(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->length;i+) for(j=0;j<k && L->datai!=L->dataj;j+); if(j=k) if(k!=i)L->datak=L->datai; k+; L->length=k;答案: (3,7,2,1,8) 刪除順序表中重復(fù)的元素8、已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲結(jié)構(gòu)。試寫一算法,刪除表中所有大于x且小于y的元素(若表中存在這樣的元素)同時釋放被刪除結(jié)點空間。答案:void Delete_list(Lnode *head, ElemType x, ElemType y) Lnode *p, *q; if(!head) return ERROR;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; elseq->next=p->next; free(p);p=q->next; elseq=p; p=p->next; 9、在帶頭結(jié)點的循環(huán)鏈表L中,結(jié)點的數(shù)據(jù)元素為整型,且按值遞增有序存放。給定兩個整數(shù)a和b,且a<b,編寫算法刪除鏈表L中元素值大于a且小于b的所有結(jié)點。第三章 棧和隊列一、選擇題2、判斷一個循環(huán)隊列Q(最多n個元素)為滿的條件是(c )。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è)計一個判別表達式中括號是否配對的算法,采用( )數(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. 1243 B. 2134 C. 1432 D. 4312E. 32146、若用一個大小為6的數(shù)組來實現(xiàn)循環(huán)隊列,且當(dāng)rear和front的值分別為0,3。當(dāng)從隊列中刪除一個元素,再加入兩個元素后,rear和front的值分別為( )。A. 1和5 B. 2和4C. 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、表達式a*(b+c)-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順序進入鐵路調(diào)度站(棧),可以得到( )的編組。A. 3,4,5,1,2B. 2,4,1,3,5C. 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->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,4B. 4,3,2,1C. 1,4,3,2D. 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è)計一個判別表達式中左右括號是否配對出現(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. NB. N+1C. N-1D. N-222、隊列的刪除操作是在( )。A. 隊首B. 隊尾C. 隊前D. 隊后23、若讓元素1,2,3依次進棧,則出棧次序不可能是( )。A. 3,2,1B. 2,1,3C. 3,1,2 D. 1,3,224、循環(huán)隊列用數(shù)組A0,m-1存放其元素值,已知其頭尾指針分別是front和rear,則當(dāng)前隊列中的元素個數(shù)是( )。A. (rear-front+m)%mB. rear-front+1C. rear-front-1D. rear-front25、在解決計算機主機和打印機之間速度不匹配問題時,通常設(shè)置一個打印數(shù)據(jù)緩沖區(qū),主機將要輸出的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機則從該緩沖區(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->nextC. rear->next=frontD. front->next=rear28、隊和棧的主要區(qū)別是( )。A. 邏輯結(jié)構(gòu)不同 B. 存儲結(jié)構(gòu)不同C. 所包含的運算個數(shù)不同 D. 限定插入和刪除的位置不同二、填空題1、設(shè)棧S和隊列Q的初始狀態(tài)為空,元素e1,e2,e3,e4,e5,e6依次通過棧S,一個元素出棧后即進入隊列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)。P2、在單鏈表中,要訪問某個結(jié)點,只要知道該結(jié)點的地址即可;因此,單鏈表是一種隨機存取結(jié)構(gòu)。O3、以鏈表作為棧的存儲結(jié)構(gòu),出棧操作必須判別??盏那闆r。P四、程序分析填空題1、已知棧的基本操作函數(shù):int InitStack(SqStack *S); /構(gòu)造空棧int StackEmpty(SqStack *S);/判斷??読nt Push(SqStack *S,ElemType e);/入棧int Pop(SqStack *S,ElemType *e);/出棧函數(shù)conversion實現(xiàn)十進制數(shù)轉(zhuǎn)換為八進制數(shù),請將函數(shù)補充完整。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)!StackEmpty(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è)隊列Q=(1,3,5,2,4,6)。寫出執(zhí)行算法f2后的隊列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,3,1(2)將隊列倒置五、綜合題1、假設(shè)以帶頭結(jié)點的循環(huán)鏈表表示隊列,并且只設(shè)一個指針指向隊尾結(jié)點,但不設(shè)頭指針,請寫出相應(yīng)的入隊列算法(用函數(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是一個非空隊列,S是一個空棧。編寫算法,僅用隊列和棧的ADT函數(shù)和少量工作變量,將隊列Q的所有元素逆置。棧的ADT函數(shù)有:void makeEmpty(SqStack s);置空棧void push(SqStack s,ElemType e);元素e入棧ElemType pop(SqStack s);出棧,返回棧頂元素int isEmpty(SqStack s);判斷棧空隊列的ADT函數(shù)有:void enQueue(Queue q,ElemType e);元素e入隊ElemType deQueue(Queue q);出隊,返回隊頭元素int isEmpty(Queue q);判斷隊空答案:void QueueInvent(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); enQueue(Queue q, ElemType x); 3、對于一個棧,給出輸入項A,B,C,D,如果輸入項序列為A,B,C,D,試給出全部可能的輸出序列。答案:出棧的可能序列: ABCD ABDC ACDB ACBD ADCB BACD BADC BCAD BCDA CBDA CBAD CDBA DCBA第五章 數(shù)組和廣義表一、選擇題1、設(shè)廣義表L=(a,b,c),則L的長度和深度分別為( C )。A. 1和1 B. 1和3C. 1和2D. 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ù)組A0.5,0.6的每個元素占5個字節(jié),將其按列優(yōu)先次序存儲在起始地址為1000的內(nèi)存單元中,則元素A55的地址是( A )。A. 1175 B. 1180C. 1205 D. 12106、廣義表G=(a,b(c,d,(e,f),g)的長度是( A )。A. 3 B. 4C. 7D. 87、采用稀疏矩陣的三元組表形式進行壓縮存儲,若要完成對三元組表進行轉(zhuǎn)置,只要將行和列對換,這種說法( B )。A. 正確 B. 錯誤C. 無法確定 D. 以上均不對8、廣義表(a,b,c)的表尾是( B )。A. b,c B. (b,c) C. c D. (c)9、常對數(shù)組進行兩種基本操作是( C )。A. 建立和刪除 B. 索引和修改C. 查找和修改 D. 查找與索引10、對一些特殊矩陣采用壓縮存儲的目的主要是為了( D )。A. 表達變得簡單 B. 對矩陣元素的存取變得簡單C. 去掉矩陣中的多余元素 D. 減少不必要的存儲空間的開銷11、設(shè)有一個10階的對稱矩陣A,采用壓縮存儲方式,以行序為主存儲,a11為第一個元素,其存儲地址為1,每元素占1個地址空間,則a85的地址為( )。A. 13B. 33C. 18 D. 4012、設(shè)矩陣A是一個對稱矩陣,為了節(jié)省存儲,將其下三角部分按行序存放在一維數(shù)組B1,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-1 D. i(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)的45的稀疏矩陣是(注:矩陣的行列下標(biāo)均從1開始)( B )。A. B. C. D. 16、以下有關(guān)廣義表的表述中,正確的是( A )。A. 由0個或多個原子或子表構(gòu)成的有限序列 B. 至少有一個元素是子表 C. 不能遞歸定義 D. 不能為空表17、對廣義表L=(a,b),(c,d),(e,f)執(zhí)行head(tail(head(tail(L)操作的結(jié)果是( )。A. 的 B. e C. (e)D. (e,f)二、判斷題( )1、廣義表中原子個數(shù)即為廣義表的長度。( )2、一個稀疏矩陣采用三元組表示,若把三元組中有關(guān)行下標(biāo)與列下標(biāo)的值互換,并把mu和nu的值進行互換,則完成了矩陣轉(zhuǎn)置。( )3、稀疏矩陣壓縮存儲后,必會失去隨機存取功能。( )4、廣義表的長度是指廣義表中括號嵌套的層數(shù)。( )5、廣義表是一種多層次的數(shù)據(jù)結(jié)構(gòu),其元素可以是單原子也可以是子表。三、填空題1、已知二維數(shù)組Amn采用行序為主方式存儲,每個元素占k個存儲單元,并且第一個元素的存儲地址是LOC(A00),則Aij的地址是_ Loc(A00)+(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ù)組R1.N中,若結(jié)點Ri有右孩子,則其右孩子是( B )。A. R2i-1 B. R2i+1C. R2i D. R2/i3、設(shè)a,b為一棵二叉樹上的兩個結(jié)點,在中序遍歷時,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é)點總數(shù)為(A)。 A. 31 B. 32 C. 33 D. 166、由二叉樹的前序和后序遍歷序列( B )惟一確定這棵二叉樹。A. 能 B. 不能7、某二叉樹的中序序列為ABCDEFG,后序序列為BDCAFGE,則其左子樹中結(jié)點數(shù)目為( C )。A. 3B. 2C. 4D. 58、若以4,5,6,7,8作為權(quán)值構(gòu)造哈夫曼樹,則該樹的帶權(quán)路徑長度為( C )。A. 67B. 68C. 69D. 709、將一棵有100個結(jié)點的完全二叉樹從根這一層開始,每一層上從左到右依次對結(jié)點進行編號,根結(jié)點的編號為1,則編號為49的結(jié)點的左孩子編號為( A )。A. 98B. 99C. 50D. 4810、表達式a*(b+c)-d的后綴表達式是( B )。A. abcd+-B. abc+*d-C. abc*+d- D. -+*abcd11、對某二叉樹進行先序遍歷的結(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、表達式A*(B+C)/(D-E+F)的后綴表達式是( C )。A. A*B+C/D-E+FB. AB*C+D/E-F+C. ABC+*DE-F+/D. ABCDED*+/-+14、在線索二叉樹中,t所指結(jié)點沒有左子樹的充要條件是( )。A. t->left=NULLB. t->ltag=1C. t->ltag=1&&t->left=NULLD. 以上都不對15、任何一棵二叉樹的葉結(jié)點在先序、中序和后序遍歷序列中的相對次序( )。A. 不發(fā)生改變B. 發(fā)生改變C. 不能確定D. 以上都不對16、假定在一棵二叉樹中,度為2的結(jié)點數(shù)為15,度為1的結(jié)點數(shù)為30,則葉子結(jié)點數(shù)為( )個。A. 15B. 16C. 17D. 4717、在下列情況中,可稱為二叉樹的是( B )。A. 每個結(jié)點至多有兩棵子樹的樹B. 哈夫曼樹C. 每個結(jié)點至多有兩棵子樹的有序樹D. 每個結(jié)點只有一棵子樹18、用順序存儲的方法,將完全二叉樹中所有結(jié)點按層逐個從左到右的順序存放在一維數(shù)組R1.n中,若結(jié)點Ri有左孩子,則其左孩子是( )。A. R2i-1 B. R2i+1C. R2i D. R2/i19、下面說法中正確的是( )。A. 度為2的樹是二叉樹 B. 度為2的有序樹是二叉樹 C. 子樹有嚴(yán)格左右之分的樹是二叉樹D. 子樹有嚴(yán)格左右之分,且度不超過2的樹是二叉樹20、樹的先根序列等同于與該樹對應(yīng)的二叉樹的( )。A. 先序序列 B. 中序序列 C. 后序序列 D. 層序序列21、按照二叉樹的定義,具有3個結(jié)點的二叉樹有( C )種。A. 3B. 4C. 5D. 622、由權(quán)值為3,6,7,2,5的葉子結(jié)點生成一棵哈夫曼樹,它的帶權(quán)路徑長度為( A )。A. 51B. 23C. 53 D. 74二、判斷題( )1、存在這樣的二叉樹,對它采用任何次序的遍歷,結(jié)果相同。( )2、中序遍歷一棵二叉排序樹的結(jié)點,可得到排好序的結(jié)點序列。( )3、對于任意非空二叉樹,要設(shè)計其后序遍歷的非遞歸算法而不使用堆棧結(jié)構(gòu),最適合的方法是對該二叉樹采用三叉鏈表。( )4、在哈夫曼編碼中,當(dāng)兩個字符出現(xiàn)的頻率相同時,其編碼也相同,對于這種情況應(yīng)做特殊處理。( )5、一個含有n個結(jié)點的完全二叉樹,它的高度是log2n1。( )6、完全二叉樹的某結(jié)點若無左孩子,則它必是葉結(jié)點。三、填空題1、具有n個結(jié)點的完全二叉樹的深度是 log2n+1 。2、哈夫曼樹是其樹的帶權(quán)路徑長度 最小 的二叉樹。3、在一棵二叉樹中,度為0的結(jié)點的個數(shù)是n0,度為2的結(jié)點的個數(shù)為n2,則有n0= N2+1 。4、樹內(nèi)各結(jié)點度的 最大值 稱為樹的度。四、代碼填空題1、函數(shù)InOrderTraverse(Bitree bt)實現(xiàn)二叉樹的中序遍歷,請在空格處將算法補充完整。void InOrderTraverse(BiTree bt)if( )InOrderTraverse(bt->lchild);printf(“%c”,bt->data); ;2、函數(shù)depth實現(xiàn)返回二叉樹的高度,請在空格處將算法補充完整。int depth(Bitree *t)if(t=NULL)return 0;elsehl=depth(t->lchild);hr= depth(t->rchild) ;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;t1=function(bt->left);t2=function(bt->right);t->left=t2;t->right=t1;return(t);答案:交換二叉樹結(jié)點左右子樹的遞歸算法4、寫出下面算法的功能。void function(Bitree *t)if(p!=NULL)function(p->lchild);function(p->rchild);printf(“%d”,p->data);答案:二叉樹后序遍歷遞歸算法五、綜合題1、假設(shè)以有序?qū)?lt;p,c>表示從雙親結(jié)點到孩子結(jié)點的一條邊,若已知樹中邊的集合為<a,b>,<a,d>,<a,c>,<c,e>,<c,f>,<c,g>,<c,h>,<e,i>,<e,j>,<g,k>,請回答下列問題:(1)哪個結(jié)點是根結(jié)點?(2)哪些結(jié)點是葉子結(jié)點?(3)哪些結(jié)點是k的祖先?(4)哪些結(jié)點是j的兄弟?(5)樹的深度是多少?。2、假設(shè)一棵二叉樹的先序序列為EBADCFHGIKJ,中序序列為ABCDEFGHIJK,請畫出該二叉樹。3、假設(shè)用于通訊的電文僅由8個字母A、B、C、D、E、F、G、H組成,字母在電文中出現(xiàn)的頻率分別為:0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。請為這8個字母設(shè)計哈夫曼編碼。答案:4、已知二叉樹的先序遍歷序列為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,1,完成問題:(1)設(shè)計一棵哈夫曼樹;(畫出其樹結(jié)構(gòu))(2)計算其帶權(quán)路徑長度WPL;答案:(1)樹形態(tài): (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é)點在二叉樹中具有什么特點。12、如下所示的二叉樹,請寫出先序、中序、后序遍歷的序列。 答案:先序:FDBACEGIHJ 中序:ABCDEFGHIJ 后序:ACBEDHJIGF六、編程題1、編寫求一棵二叉樹中結(jié)點總數(shù)的算法。答案:(以先序遍歷的方法為例)void count_preorder(Bitree *t, int *n) if(t!=NULL)*n+;count_preorder(t->lchild);count_preorder(t->lchild);

注意事項

本文(太原理工大學(xué)數(shù)據(jù)結(jié)構(gòu)試題庫及答案.doc)為本站會員(w****2)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!