數(shù)據(jù)結(jié)構(gòu)試題庫(kù)及答案(共83頁(yè))_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)試題庫(kù)及答案(共83頁(yè))_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)試題庫(kù)及答案(共83頁(yè))_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)試題庫(kù)及答案(共83頁(yè))_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)試題庫(kù)及答案(共83頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩78頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 數(shù)據(jù)結(jié)構(gòu)試題庫(kù)及答案第一章 概論一、選擇題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. 正確性和簡(jiǎn)單性 C. 可讀性和文檔性 D. 數(shù)據(jù)復(fù)雜性和程序復(fù)雜性3、具有線性結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)是( D )。A. 圖 B. 樹(shù)C. 廣義表 D. 棧4、計(jì)算機(jī)中的算法指的是解決某一個(gè)問(wèn)題的有限運(yùn)算序列,它必須具備輸入、輸出、( B )等5個(gè)特性。A. 可執(zhí)行性、可移植性和可擴(kuò)充性B. 可執(zhí)行性、有窮性和確定性C. 確定性、有窮

2、性和穩(wěn)定性 D. 易讀性、穩(wěn)定性和確定性5、下面程序段的時(shí)間復(fù)雜度是( C )。for(i=0;i<m;i+)for(j=0;j<n;j+)aij=i*j;A. O(m2)B. O(n2)C. O(m*n)D. O(m+n)6、算法是( D )。A. 計(jì)算機(jī)程序 B. 解決問(wèn)題的計(jì)算方法C. 排序算法 D. 解決問(wèn)題的有限運(yùn)算序列7、某算法的語(yǔ)句執(zhí)行頻度為(3n+nlog2n+n2+8),其時(shí)間復(fù)雜度表示( C )。A. O(n) B. O(nlog2n) C. O(n2) D. O(log2n)8、下面程序段的時(shí)間復(fù)雜度為( C )。i=1;while(i<=n)i=i*3

3、;A. O(n)B. O(3n)C. O(log3n) D. O(n3)9、數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計(jì)算的程序設(shè)計(jì)問(wèn)題中計(jì)算機(jī)的數(shù)據(jù)元素以及它們之間的( )和運(yùn)算等的學(xué)科。A. 結(jié)構(gòu)B. 關(guān)系C. 運(yùn)算D. 算法10、下面程序段的時(shí)間復(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ù)類型的三個(gè)組成部分分別為( )。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ù)類型12、通常從正確性、易讀性、健壯性、高

4、效性等4個(gè)方面評(píng)價(jià)算法的質(zhì)量,以下解釋錯(cuò)誤的是( )。A. 正確性算法應(yīng)能正確地實(shí)現(xiàn)預(yù)定的功能B. 易讀性算法應(yīng)易于閱讀和理解,以便調(diào)試、修改和擴(kuò)充C. 健壯性當(dāng)環(huán)境發(fā)生變化時(shí),算法能適當(dāng)?shù)刈龀龇磻?yīng)或進(jìn)行處理,不會(huì)產(chǎn)生不需要的運(yùn)行結(jié)果D. 高效性即達(dá)到所需要的時(shí)間性能13、下列程序段的時(shí)間復(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;”的時(shí)間復(fù)雜度為 。2、數(shù)據(jù)結(jié)構(gòu)的四種基本類型中, 樹(shù)形結(jié)構(gòu) 的元素是一對(duì)多關(guān)系。三、綜合題1、

5、將數(shù)量級(jí)O(1),O(N),O(N2),O(N3),O(NLOG2N),O(LOG2N),O(2N)按增長(zhǎng)率由小到大排序。答案: 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ù)的存儲(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)。4. 線性結(jié)構(gòu)中元素之間存在一對(duì)一關(guān)系,樹(shù)形結(jié)構(gòu)中元素之間存在一對(duì)多關(guān)系,圖形結(jié)構(gòu)中元素之間存在多對(duì)多關(guān)系。5 在線性結(jié)構(gòu)中

6、,第一個(gè)結(jié)點(diǎn)沒(méi)有前驅(qū)結(jié)點(diǎn),其余每個(gè)結(jié)點(diǎn)有且只有 1個(gè)前驅(qū)結(jié)點(diǎn);最后一個(gè)結(jié)點(diǎn)沒(méi)有后續(xù)結(jié)點(diǎn),其余每個(gè)結(jié)點(diǎn)有且只有1個(gè)后續(xù)結(jié)點(diǎn)。6. 在樹(shù)形結(jié)構(gòu)中,樹(shù)根結(jié)點(diǎn)沒(méi)有前驅(qū)結(jié)點(diǎn),其余每個(gè)結(jié)點(diǎn)有且只有1個(gè)前驅(qū)結(jié)點(diǎn);葉子結(jié)點(diǎn)沒(méi)有后續(xù)結(jié)點(diǎn),其余每個(gè)結(jié)點(diǎn)的后續(xù)結(jié)點(diǎn)數(shù)可以任意多個(gè)。7. 在圖形結(jié)構(gòu)中,每個(gè)結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)數(shù)和后續(xù)結(jié)點(diǎn)數(shù)可以任意多個(gè)。8數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)可用四種基本的存儲(chǔ)方法表示,它們分別是順序、鏈?zhǔn)?、索引、散列?. 數(shù)據(jù)的運(yùn)算最常用的有5種,它們分別是插入、刪除、修改、查找、排序。10. 一個(gè)算法的效率可分為時(shí)間效率和空間效率。11. 任何一個(gè)C程序都由一個(gè)主函數(shù)和若干個(gè)被調(diào)用的其它函數(shù)組成。二、單項(xiàng)選擇

7、題( B )1. 非線性結(jié)構(gòu)是數(shù)據(jù)元素之間存在一種:A)一對(duì)多關(guān)系 B)多對(duì)多關(guān)系 C)多對(duì)一關(guān)系 D)一對(duì)一關(guān)系( C )2. 數(shù)據(jù)結(jié)構(gòu)中,與所使用的計(jì)算機(jī)無(wú)關(guān)的是數(shù)據(jù)的 結(jié)構(gòu);A) 存儲(chǔ) B) 物理 C) 邏輯 D) 物理和存儲(chǔ)( C )3. 算法分析的目的是:A) 找出數(shù)據(jù)結(jié)構(gòu)的合理性 B) 研究算法中的輸入和輸出的關(guān)系C) 分析算法的效率以求改進(jìn) D) 分析算法的易懂性和文檔性( A )4. 算法分析的兩個(gè)主要方面5是:A) 空間復(fù)雜性和時(shí)間復(fù)雜性 B) 正確性和簡(jiǎn)明性C) 可讀性和文檔性 D) 數(shù)據(jù)復(fù)雜性和程序復(fù)雜性( C )5. 計(jì)算機(jī)算法指的是:A) 計(jì)算方法 B) 排序方法 C

8、) 解決問(wèn)題的有限運(yùn)算序列 D) 調(diào)度方法( B )6. 計(jì)算機(jī)算法必須具備輸入、輸出和 等5個(gè)特性。A) 可行性、可移植性和可擴(kuò)充性 B) 可行性、確定性和有窮性C) 確定性、有窮性和穩(wěn)定性 D) 易讀性、穩(wěn)定性和安全性三、簡(jiǎn)答題1.數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型兩個(gè)概念之間有區(qū)別嗎? 答:簡(jiǎn)單地說(shuō),數(shù)據(jù)結(jié)構(gòu)定義了一組按某些關(guān)系結(jié)合在一起的數(shù)組元素。數(shù)據(jù)類型不僅定義了一組帶結(jié)構(gòu)的數(shù)據(jù)元素,而且還在其上定義了一組操作。2. 簡(jiǎn)述線性結(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

9、; 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;五、設(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),

10、(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、若長(zhǎng)度為n的線性表采用順序存儲(chǔ)結(jié)構(gòu),在其第i個(gè)位置插入一個(gè)新元素算法的時(shí)間復(fù)雜度( )。A. O(log2n) B.O(1)C. O(n) D.O(n2)2、若一個(gè)線性表中最常用的操作是取第i個(gè)元素和找第i個(gè)元素的前趨元素,則采用( )存儲(chǔ)方式最節(jié)省

11、時(shí)間。 A. 順序表 B. 單鏈表 C. 雙鏈表 D. 單循環(huán)鏈表3、具有線性結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)是( )。A. 圖 B. 樹(shù)C. 廣義表 D. 棧4、在一個(gè)長(zhǎng)度為n的順序表中,在第i個(gè)元素之前插入一個(gè)新元素時(shí),需向后移動(dòng)( )個(gè)元素。A. n-i B. n-i+1C. n-i-1 D. i5、非空的循環(huán)單鏈表head的尾結(jié)點(diǎn)p滿足( )。A. p->next=head B. p->next=NULL C. p=NULL D. p=head6、鏈表不具有的特點(diǎn)是( )。A. 可隨機(jī)訪問(wèn)任一元素B. 插入刪除不需要移動(dòng)元素C. 不必事先估計(jì)存儲(chǔ)空間D. 所需空間與線性表長(zhǎng)度成正比7、在雙向

12、循環(huán)鏈表中,在p指針?biāo)傅慕Y(jié)點(diǎn)后插入一個(gè)指針q所指向的新結(jié)點(diǎn),修改指針的操作是( )。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-

13、>next=q;p->next=q;8、線性表采用鏈?zhǔn)酱鎯?chǔ)時(shí),結(jié)點(diǎn)的存儲(chǔ)地址( )。A. 必須是連續(xù)的B. 必須是不連續(xù)的C. 連續(xù)與否均可 D. 和頭結(jié)點(diǎn)的存儲(chǔ)地址相連續(xù)9、在一個(gè)長(zhǎng)度為n的順序表中刪除第i個(gè)元素,需要向前移動(dòng)( )個(gè)元素。A. n-i B. n-i+1C. n-i-1 D. i+110、線性表是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.

14、O(1) C. O(n2) D. O(n-1)13、線性表L=(a1,a2,an),下列說(shuō)法正確的是( )。A. 每個(gè)元素都有一個(gè)直接前驅(qū)和一個(gè)直接后繼 B. 線性表中至少要有一個(gè)元素C. 表中諸元素的排列順序必須是由小到大或由大到小D. 除第一個(gè)和最后一個(gè)元素外,其余每個(gè)元素都由一個(gè)且僅有一個(gè)直接前驅(qū)和直接后繼14、一個(gè)順序表的第一個(gè)元素的存儲(chǔ)地址是90,每個(gè)元素的長(zhǎng)度為2,則第6個(gè)元素的存儲(chǔ)地址是( )。A. 98 B. 100C. 102 D. 10615、在線性表的下列存儲(chǔ)結(jié)構(gòu)中,讀取元素花費(fèi)的時(shí)間最少的是( )。 A. 單鏈表 B. 雙鏈表 C. 循環(huán)鏈表 D. 順序表16、在一個(gè)單

15、鏈表中,若刪除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、將長(zhǎng)度為n的單鏈表連接在長(zhǎng)度為m的單鏈表之后的算法的時(shí)間復(fù)雜度為( )。A. O(1)B. O(n)C. O(m)D. O(m+n)18、線性表的順序存儲(chǔ)結(jié)構(gòu)是一種( )存儲(chǔ)結(jié)構(gòu)。A. 隨機(jī)存取B. 順序存取C. 索引存取D. 散列存取19、順序表中,插入一個(gè)元素所需移動(dòng)的元素平均數(shù)是( )。

16、A. (n-1)/2 B. n C. n+1 D. (n+1)/210、循環(huán)鏈表的主要優(yōu)點(diǎn)是( )。A. 不再需要頭指針 B. 已知某結(jié)點(diǎn)位置后能容易找到其直接前驅(qū) C. 在進(jìn)行插入、刪除運(yùn)算時(shí)能保證鏈表不斷開(kāi) D. 在表中任一結(jié)點(diǎn)出發(fā)都能掃描整個(gè)鏈表11、不帶頭結(jié)點(diǎn)的單鏈表head為空的判定條件是( )。A. head=NULL B. head->next=NULL C. head->next=head D. head!=NULL12、在下列對(duì)順序表進(jìn)行的操作中,算法時(shí)間復(fù)雜度為O(1)的是( )。A. 訪問(wèn)第i個(gè)元素的前驅(qū)(1<)B. 在第i個(gè)元素之后插入一個(gè)新元素()C

17、. 刪除第i個(gè)元素()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í)行的語(yǔ)句為( )。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. 線性表的順序存儲(chǔ)結(jié)構(gòu)優(yōu)于鏈表存儲(chǔ)結(jié)構(gòu)B.

18、線性表的順序存儲(chǔ)結(jié)構(gòu)適用于頻繁插入/刪除數(shù)據(jù)元素的情況C. 線性表的鏈表存儲(chǔ)結(jié)構(gòu)適用于頻繁插入/刪除數(shù)據(jù)元素的情況D. 線性表的鏈表存儲(chǔ)結(jié)構(gòu)優(yōu)于順序存儲(chǔ)結(jié)構(gòu)15、在表長(zhǎng)為n的順序表中,當(dāng)在任何位置刪除一個(gè)元素的概率相同時(shí),刪除一個(gè)元素所需移動(dòng)的平均個(gè)數(shù)為( )。A. (n-1)/2 B. n/2 C. (n+1)/2D. n16、在一個(gè)單鏈表中,已知q所指結(jié)點(diǎn)是p所指結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn),若在q和p之間插入一個(gè)結(jié)點(diǎn)s,則執(zhí)行( )。A. s->next=p->next; p->next=s; B. p->next=s->next;s->next=p; C. q-&

19、gt;next=s;s->next=p; D. p->next=s;s->next=q;17、在單鏈表中,指針p指向元素為x的結(jié)點(diǎn),實(shí)現(xiàn)刪除x的后繼的語(yǔ)句是( )。A. p=p->next; B. p->next=p->next->next; C. p->next=p;D. p=p->next->next;18、在頭指針為head且表長(zhǎng)大于1的單循環(huán)鏈表中,指針p指向表中某個(gè)結(jié)點(diǎn),若p->next->next=head,則( )。A. p指向頭結(jié)點(diǎn)B. p指向尾結(jié)點(diǎn)C. p的直接后繼是頭結(jié)點(diǎn)D. p的直接后繼是尾結(jié)點(diǎn)二、填

20、空題1、設(shè)單鏈表的結(jié)點(diǎn)結(jié)構(gòu)為(data,next)。已知指針p指向單鏈表中的結(jié)點(diǎn),q指向新結(jié)點(diǎn),欲將q插入到p結(jié)點(diǎn)之后,則需要執(zhí)行的語(yǔ)句: ; 。答案:q->next=p->next p->next=q2、線性表的邏輯結(jié)構(gòu)是 ,其所含元素的個(gè)數(shù)稱為線性表的 。答案:線性結(jié)構(gòu) 長(zhǎng)度3、寫出帶頭結(jié)點(diǎn)的雙向循環(huán)鏈表L為空表的條件 。答案:L->prior=L->next=L4、帶頭結(jié)點(diǎn)的單鏈表head為空的條件是 。答案:head->next=NULL5、在一個(gè)單鏈表中刪除p所指結(jié)點(diǎn)的后繼結(jié)點(diǎn)時(shí),應(yīng)執(zhí)行以下操作:q = p->next;p->next=

21、_ _;答案:q->next三、判斷題1、單鏈表不是一種隨機(jī)存儲(chǔ)結(jié)構(gòu)。 ?2、在具有頭結(jié)點(diǎn)的單鏈表中,頭指針指向鏈表的第一個(gè)數(shù)據(jù)結(jié)點(diǎn)。?3、用循環(huán)單鏈表表示的鏈隊(duì)列中,可以不設(shè)隊(duì)頭指針,僅在隊(duì)尾設(shè)置隊(duì)尾指針。?4、順序存儲(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-&g

22、t;next;j=1;while(p&&j<i) (1) ;+j;if(!p|j>i) return ERROR;*e= (2) ;return OK;答案:(1)p=p->next (2)p->data2、函數(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)&&(j<i-1) p=p->next;j+; if(p=NULL|j>i-1) return

23、 ERROR; s=(LNode *)malloc(sizeof(LNode); s->data=e; (1) ; (2) ; return OK;/*ListInsert*/答案:(1)s->next=p->next (2)p->next=s3、函數(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->length-1;k+) L->sl

24、istk= (1) ; (2) ; return OK;答案:(1)L->slistk+1 (2) -L->Length 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( (1) )&&(j<i-1) p=p->next;j+; if(p->next=NULL|j>i-1) return ERROR; q=p->next; (2) ; *s=q->data; fre

25、e(q); return OK;/*listDelete*/答案:(1)p->next!=NULL (2)p->next=q->next5、寫出算法的功能。int L(head)node * head;int n=0;node *p;p=head;while(p!=NULL) p=p->next; n+; return(n);答案:求單鏈表head的長(zhǎng)度五、綜合題1、編寫算法,實(shí)現(xiàn)帶頭結(jié)點(diǎn)單鏈表的逆置算法。答案:void invent(Lnode *head) Lnode *p,*q; if(!head->next) return ERROR; p=head-&g

26、t;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)鏈表,鏈頭指針?lè)謩e為L(zhǎng)1和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;

27、 p->next =L2; 3、設(shè)一個(gè)帶頭結(jié)點(diǎn)的單向鏈表的頭指針為head,設(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->data<=p->data) r->next=p; head->next=r; p=r; elsewhile(!p && r->data>p-

28、>data)s=p; p=p->next; r->next=p; s->next=r;p=head->next; 4、編寫算法,將一個(gè)頭指針為head不帶頭結(jié)點(diǎn)的單鏈表改造為一個(gè)單向循環(huán)鏈表,并分析算法的時(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è)單鏈表的長(zhǎng)度(數(shù)據(jù)結(jié)點(diǎn)數(shù))為N,則該算法的時(shí)間主要花費(fèi)在查找鏈表最后一個(gè)結(jié)點(diǎn)上(算法中的while循環(huán)),

29、所以該算法的時(shí)間復(fù)雜度為O(N)。5、已知head為帶頭結(jié)點(diǎn)的單循環(huán)鏈表的頭指針,鏈表中的數(shù)據(jù)元素依次為(a1,a2,a3,a4,an),A為指向空的順序表的指針。閱讀以下程序段,并回答問(wèn)題:(1)寫出執(zhí)行下列程序段后的順序表A中的數(shù)據(jù)元素;(2)簡(jiǎn)要敘述該程序段的功能。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;答案: (

30、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>=vai)van=x;elsei=0;while(x>vai) 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

31、,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、已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲(chǔ)結(jié)構(gòu)。試寫一算法,刪除表中所有大于x且小于y的元素(若表

32、中存在這樣的元素)同時(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->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-&

33、gt;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ì)列一、選擇題1、一個(gè)棧的輸入序列為:a,b,c,d,e,則棧的不可能輸出的序列是( )。A. a,b,c,d,e B. d,e,c,b,a C. d,c,e,a,b D. e,d,c,b,a2、判斷一個(gè)循環(huán)隊(duì)列Q(最多n個(gè)元素)為滿的條件是( )。A. Q->rear=Q->front B. Q->rear=Q->front+1 C. Q->front=(Q->rear

34、+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,2,3,4,則棧的不可能輸出的序列是( )。A. 1243 B. 2134 C. 1432 D. 4312E. 32146、若用一個(gè)大小為6的數(shù)組來(lái)實(shí)現(xiàn)循環(huán)隊(duì)列,且當(dāng)rear和front的值分別

35、為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ì)尾指針?lè)謩e為front和rear,則判斷循環(huán)隊(duì)列為空的條件是( )。A. front=rear B. front=0 C. rear=0 D. front=rear+19、一個(gè)順序棧S,其棧頂指針為top,則將元素e入棧的操作是( )。A. *S->top=e;S->top+; B. S->top+;*S->top=e; C

36、. *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í),通常需要使用( )來(lái)保存中間結(jié)果。A. 隊(duì)列 B. 棧C. 鏈表 D. 樹(shù)12、棧的插入和刪除操作在( )。 A. 棧底 B. 棧頂 C. 任意位置 D. 指定位置13、五節(jié)車廂以編號(hào)1,2,3,4,5順序進(jìn)入鐵路調(diào)度站(棧),可以得到( )的編組。A. 3,4,5,1,2B. 2,4,1,3,5C. 3,5,4,2,1D. 1,3,5,2,414、判定一個(gè)順序棧

37、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ì)序列是( )。A. 1,2,3,4B. 4,3,2,1C. 1,4,3,2D. 3,4

38、,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->rear+1=Q->fr

39、ont20、設(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ì)列的最大長(zhǎng)度為( )。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存放其元素值,已知其頭尾指針?lè)謩e是front和rear,則當(dāng)前隊(duì)列中的元素個(gè)數(shù)是( )。A. (re

40、ar-front+m)%mB. rear-front+1C. rear-front-1D. rear-front25、在解決計(jì)算機(jī)主機(jī)和打印機(jī)之間速度不匹配問(wèn)題時(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. front=fro

41、nt->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依次通過(guò)棧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ì)尾指針?lè)謩e為front和rear,則循環(huán)隊(duì)列中元素的個(gè)

42、數(shù)為: 。答案:(rear-front+M)%M3、在具有n個(gè)元素的循環(huán)隊(duì)列中,隊(duì)滿時(shí)具有 個(gè)元素。答案:n-14、設(shè)循環(huán)隊(duì)列的容量為70,現(xiàn)經(jīng)過(guò)一系列的入隊(duì)和出隊(duì)操作后,front為20,rear為11,則隊(duì)列中元素的個(gè)數(shù)為 。答案:615、已知循環(huán)隊(duì)列的存儲(chǔ)空間大小為20,且當(dāng)前隊(duì)列的頭指針和尾指針的值分別為8和3,且該隊(duì)列的當(dāng)前的長(zhǎng)度為_(kāi)。三、判斷題1、棧和隊(duì)列都是受限的線性結(jié)構(gòu)。?2、在單鏈表中,要訪問(wèn)某個(gè)結(jié)點(diǎn),只要知道該結(jié)點(diǎn)的地址即可;因此,單鏈表是一種隨機(jī)存取結(jié)構(gòu)。?3、以鏈表作為棧的存儲(chǔ)結(jié)構(gòu),出棧操作必須判別??盏那闆r。?四、程序分析填空題1、已知棧的基本操作函數(shù):int Ini

43、tStack(SqStack *S); /構(gòu)造空棧int StackEmpty(SqStack *S);/判斷棧空int 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)

44、 (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,并回答下列問(wèn)題:(1)設(shè)隊(duì)列Q=(1,3,5,2,4,6)。寫出執(zhí)行算法f2后的隊(duì)列Q;(2)簡(jiǎn)述算法f2的功能。void f2(Queue *Q) DataType e; if (!QueueEmpty(Q) e=DeQueue(Q

45、); f2(Q); EnQueue(Q,e); 答案:(1)6,4,2,5,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、已

46、知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);判斷??贞?duì)列的ADT函數(shù)有:void enQueue(Queue q,ElemType e);元素e入隊(duì)ElemType deQueue(Queue q);出隊(duì),返回隊(duì)頭元素int isEmpty(Queue q);判斷隊(duì)空答案:

47、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、對(duì)于一個(gè)棧,給出輸入項(xiàng)A,B,C,D,如果輸入項(xiàng)序列為A,B,C,D,試給出全部可能的輸出序列。答案:出棧的可能序列: ABCD ABDC ACDB ACBD ADCB BACD BADC BC

48、AD BCDA CBDA CBAD CDBA DCBA第四章 串一、選擇題1、設(shè)有兩個(gè)串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. 順序的存儲(chǔ)結(jié)構(gòu)B. 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)C. 數(shù)據(jù)元素是一個(gè)字符 D. 數(shù)據(jù)元素任意4、設(shè)串長(zhǎng)為n,模式串長(zhǎng)為m,則KMP算法所需的附加空間為( A )。 A. O(m) B. O(n) C. O(m*n) D. O(nlog2

49、m)5、空串和空格串( B )。 A. 相同 B. 不相同 C. 可能相同 D. 無(wú)法確定6、與線性表相比,串的插入和刪除操作的特點(diǎn)是( )。A. 通常以串整體作為操作對(duì)象B. 需要更多的輔助空間C. 算法的時(shí)間復(fù)雜度較高D. 涉及移動(dòng)的元素更多7、設(shè)SUBSTR(S,i,k)是求S中從第i個(gè)字符開(kāi)始的連續(xù)k個(gè)字符組成的子串的操作,則對(duì)于S=Beijing&Nanjing,SUBSTR(S,4,5)=( B )。A. ijing B. jing&C. ingNa D. ing&N二、判斷題( )1、造成簡(jiǎn)單模式匹配算法BF算法執(zhí)行效率低的原因是有回溯存在。( )2、KM

50、P算法的最大特點(diǎn)是指示主串的指針不需要回溯。( )3、完全二叉樹(shù)某結(jié)點(diǎn)有右子樹(shù),則必然有左子樹(shù)。三、填空題1、求子串在主串中首次出現(xiàn)的位置的運(yùn)算稱為 模式匹配 。2、設(shè)s=IAMATEACHER,其長(zhǎng)度是_。3、兩個(gè)串相等的充分必要條件是兩個(gè)串的長(zhǎng)度相等且 對(duì)應(yīng)位置字符相同 。四、程序填空題1、函數(shù)kmp實(shí)現(xiàn)串的模式匹配,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。int kmp(sqstring *s,sqstring *t,int start,int next)int i=start-1,j=0; while(i<s->len&&j<t->len) if(j=-1|s->datai=t->dataj) i+;j+; else j= ; if(j>=t->len) return( ); else return(-1);2、函數(shù)實(shí)現(xiàn)串的模式匹配算法,請(qǐng)?jiān)诳崭裉帉⑺惴?/p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論