數(shù)據(jù)結(jié)構(gòu)試題及答案(一)_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)試題及答案(一)_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)試題及答案(一)_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)試題及答案(一)_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)試題及答案(一)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(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)就是研究(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)及其基本操作(研

究非數(shù)值計(jì)算的程序設(shè)計(jì)問(wèn)題中,計(jì)算機(jī)操作對(duì)象以及他們之間的關(guān)系和操作)

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)。(線性結(jié)構(gòu)就是:在非空有限集合中,存在為一個(gè)

被稱為第一個(gè)的數(shù)據(jù)元素和最后一個(gè)元素,有除了笫一個(gè)元素,集合中每一個(gè)元素均只有一

個(gè)前驅(qū),除了最后一個(gè)元素有唯一后繼)(鏈表、棧、隊(duì)列、數(shù)組、串)

A.圖B.樹(shù)C.廣義表(線性表的推廣)D.棧

4、計(jì)算機(jī)中的算法指的是解決某一個(gè)問(wèn)題的有限運(yùn)算序列,它必須具備輸入、輸出、(B)

等5個(gè)特性。

A.可執(zhí)行性、可移植性和可擴(kuò)充性B.可執(zhí)行性、有窮性和確定性

C.確定性、有窮性和穩(wěn)定性D.易讀性、穩(wěn)定性和確定性

5、下面程序段的時(shí)間復(fù)雜度是(C)。

for(i=O;i<m;i++)

for(j=0;j<n;j++)

a[i]

A.0(m2)B.0(n2)C.0(m*n)D.0(m+n)

6、算法是(D)o為了解決某一問(wèn)題而規(guī)定的一個(gè)有限長(zhǎng)的操作序列

A.計(jì)算機(jī)程序B.解決問(wèn)題的計(jì)算方法C.排序算法

D.解決問(wèn)題的有限運(yùn)算序列

2

7、某算法的語(yǔ)句執(zhí)行頻度為(3n+nlog2n+n+8),其時(shí)間復(fù)雜度表示(C)。

A.0(n)B.0(nlog2n)C.0(n2)D.0(log2n)

8、下面程序段的時(shí)間復(fù)雜度為(C)。

i=l;

while(i<=n)

i=i*3;

3

A.0(n)B.0(3n)C.0(log3n)D.0(n)

9、數(shù)據(jù)結(jié)構(gòu)是一門(mén)研究非數(shù)值計(jì)算的程序設(shè)計(jì)問(wèn)題中計(jì)算機(jī)的數(shù)據(jù)元素以及它們之間的

(B)和運(yùn)算等的學(xué)科。(關(guān)系和操作)

A.結(jié)構(gòu)B.關(guān)系C.運(yùn)算D.算法

10、下面程序段的時(shí)間復(fù)雜度是(A)0

i=s=0;

while(s<n){

i++;s+=i;

)

A.0(n)B.0(n2)C.0(log2n)D,0(n3)

11、抽象數(shù)據(jù)類(lèi)型的三個(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ù)類(lèi)型D.數(shù)據(jù)元素、數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類(lèi)型

12、通常從正確性、易讀性、健壯性、高效性等4個(gè)方面評(píng)價(jià)算法的質(zhì)量,以下解釋錯(cuò)誤的

是(D)。

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+l)*(y+1))

y=y+l;

A.0(n)B,0(標(biāo)C.0(1)D.0(n2)

二、填空題

1、程序段,(i=l;while(i<=n)i=i*2;”的時(shí)間復(fù)雜度為log2n。

2、數(shù)據(jù)結(jié)構(gòu)的四種基本類(lèi)型中,樹(shù)形結(jié)構(gòu)的元素是一對(duì)多關(guān)系。

三、綜合題

2s

1、將數(shù)量級(jí)0(1),0(N),0(N),0N),0(NLOG2N),0(LOG2N),0(2)按增長(zhǎng)率由小到大排序。

23

答案:0(1)0(log2N)0(N)0(Nlog2N)0(N)0(N)0(2')

一、填空題

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ù)的運(yùn)算這三個(gè)方面的內(nèi)容。

3.數(shù)據(jù)結(jié)構(gòu)按邏輯結(jié)構(gòu)可分為兩大類(lèi),它們分別是線性結(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)中,第一個(gè)結(jié)點(diǎn)沒(méi)有前驅(qū)結(jié)點(diǎn),其余每個(gè)結(jié)點(diǎn)有且只有L個(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)有且只有L個(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)?、索引、散列?/p>

9.數(shù)據(jù)的運(yùn)算最常用的有5種,它們分別是插入、刪除、修改、查找、排序。

10.一個(gè)算法的效率可分為時(shí)間效率和空間效率。

11.任何一個(gè)C程序都由一個(gè)主函數(shù)和若干個(gè)被調(diào)用的其它函數(shù)組成。

二、單項(xiàng)選擇題

(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)物理0邏輯D)物理和存儲(chǔ)

(C)3.算法分析的目的是:

A)找出數(shù)據(jù)結(jié)構(gòu)的合理性B)研究算法中的輸入和輸出的關(guān)系

0分析算法的效率以求改進(jìn)D)分析算法的易懂性和文檔性

A)4.算法分析的兩個(gè)主要方面5是:

A)空間復(fù)雜性和時(shí)間復(fù)雜性B)正確性和簡(jiǎn)明性

0可讀性和文檔性D)數(shù)據(jù)復(fù)雜性和程序復(fù)雜性

(C)5.計(jì)算機(jī)算法指的是:

A)計(jì)算方法B)排序方法0解決問(wèn)題的有限運(yùn)算序列D)調(diào)

度方法

(B)6.計(jì)算機(jī)算法必須具備輸入、輸出和.等5個(gè)特性。

A)可行性、可移植性和可擴(kuò)充性B)可行性、確定性和有窮性

0確定性、有窮性和穩(wěn)定性D)易讀性、穩(wěn)定性和安全性

三、簡(jiǎn)答題

1.數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類(lèi)型兩個(gè)概念之間有區(qū)別嗎?

答:簡(jiǎn)單地說(shuō),數(shù)據(jù)結(jié)構(gòu)定義了一組按某些關(guān)系結(jié)合在一起的數(shù)組元素。數(shù)據(jù)類(lèi)型不僅定

義了一組帶結(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;

1.for(i=0;i<n;i++)

for(i=0;i<n;i++)

for(j=0;j<m;j++)

for(j=0;j<n;j++)

A[i]U]=0;

s+=B[i]UJ;

sum=s;

3.x=0;

4.i=l;

for(i=l;i<n;i++)

while(i<=n)

for(j=l;j<=n-i;j++)

i=i*3;

X++;

五、設(shè)有數(shù)據(jù)邏輯結(jié)構(gòu)s=(D,R),試按各小題所給條件畫(huà)出這些邏輯結(jié)構(gòu)的圖示,并確定

其是哪種邏輯結(jié)構(gòu)。

1.D={dl,d2,d3,d4}R={(dl,d2),(d2,d3),(d3,d4)}線性表

2.D={dl,d2,…,d9}

R={(dl,d2),(dl,d3),(d3,d4),(d3,d6),(d6,d8),(d4,d5),(d6,d7),(d8,d9)}樹(shù)

3.D={dl,d2,-,d9}

R={(dl,d3),(dl,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ù)

雜度(C)o

2

A.0(log2n)B.0(1)C.0(n)D.0(n)

2、若一個(gè)線性表中最常用的操作是取第i個(gè)元素和找第i個(gè)元素的前趨元素,則采用(a)

存儲(chǔ)方式最節(jié)省時(shí)間。

A.順序表B.單鏈表C.雙鏈表D.單循環(huán)鏈表

3、具有線性結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)是(d)。

A.圖B.樹(shù)C.廣義表D.棧

4、在一個(gè)長(zhǎng)度為n的順序表中,在第i個(gè)元素之前插入一個(gè)新元素時(shí),需向后移動(dòng)(b)

個(gè)元素。

A.n-iB.n-i+1C.n-i-1D.i

5、非空的循環(huán)單鏈表head的尾結(jié)點(diǎn)p滿足(a)。

A.p->next==headB.p->next=NULL

C.p二二NULLD.p==head

6、鏈表不具有的特點(diǎn)是(a)。

A.可隨機(jī)訪問(wèn)任一元素B.插入刪除不需要移動(dòng)元素

C.不必事先估計(jì)存儲(chǔ)空間D.所需空間與線性表長(zhǎng)度成正比

7、在雙向循環(huán)鏈表中,在p指針?biāo)傅慕Y(jié)點(diǎn)后插入一個(gè)指針q所指向的新結(jié)點(diǎn),修改指針的

操作是(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;

8、線性表采用鏈?zhǔn)酱鎯?chǔ)時(shí),結(jié)點(diǎn)的存儲(chǔ)地址(c

A.必須是連續(xù)的B.必須是不連續(xù)的

C.連續(xù)與否均可D.和頭結(jié)點(diǎn)的存儲(chǔ)地址相連續(xù)

9、在一個(gè)長(zhǎng)度為n的順序表中刪除第i個(gè)元素,需要向前移動(dòng)(a)個(gè)元素。

A.n-iB.n-i+1C.n-i-1D.i+1

10、線性表是n個(gè)(c)的有限序列。

A.表元素B.字符C.數(shù)據(jù)元素D.數(shù)據(jù)項(xiàng)

11、從表中任一結(jié)點(diǎn)出發(fā),都能掃描整個(gè)表的是(c)。

A.單鏈表B.順序表C.循環(huán)鏈表D.靜態(tài)鏈表

12、在具有n個(gè)結(jié)點(diǎn)的單鏈表上查找值為x的元素時(shí),其時(shí)間復(fù)雜度為(a)。

A.O(n)B.0(1)C.0(n2)D.0(n-l)

13、線性表L=(al,a2,……,an),下列說(shuō)法正確的是(d)。

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ǔ)

地址是(b)。

A.98B.100C.102D.106

15、在線性表的下列存儲(chǔ)結(jié)構(gòu)中,讀取元素花費(fèi)的時(shí)間最少的是(d

A.單鏈表B.雙鏈表C.循環(huán)鏈表D.順序表

16、在一個(gè)單鏈表中,若刪除p所指向結(jié)點(diǎn)的后續(xù)結(jié)點(diǎn),則執(zhí)行(a).

A.p->next=p->next->next;

B.p=p->next;p->nextz:p->next->next;

C.p=p->next;

D.p=p->next->next;

17、將長(zhǎng)度為n的單鏈表連接在長(zhǎng)度為m的單鏈表之后的算法的時(shí)間復(fù)雜度為(c)。

A.0(1)B.0(n)C.0(m)D.0(m+n)

18、線性表的順序存儲(chǔ)結(jié)構(gòu)是一種(a)存儲(chǔ)結(jié)構(gòu)。

A.隨機(jī)存取B.順序存取C.索引存取D.散列存取

19、順序表中,插入一個(gè)元素所需移動(dòng)的元素平均數(shù)是(d)。

A.(n-l)/2B.nC.n+1D.(n+l)/2

10、循環(huán)鏈表的主要優(yōu)點(diǎn)是(d

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==NULLB.head->next==NULL

C.head->next==headD.head!=NULL

12、在下列對(duì)順序表進(jìn)行的操作中,算法時(shí)間復(fù)雜度為0(1)的是(a).

A.訪問(wèn)第i個(gè)元素的前驅(qū))B.在第i個(gè)元素之后插入一個(gè)新元素

(l<i<n)

C.刪除第i個(gè)元素(14i4n)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)。

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、在以下的敘述中,正確的是(c)。

A.線性表的順序存儲(chǔ)結(jié)構(gòu)優(yōu)于鏈表存儲(chǔ)結(jié)構(gòu)

B.線性表的順序存儲(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)。

A.(n-l)/2B.n/2C.(n+l)/2D.n

16、在一個(gè)單鏈表中,已知q所指結(jié)點(diǎn)是p所指結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn),若在q和p之間插入一個(gè)

結(jié)點(diǎn)s,則執(zhí)行(c)?

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é)點(diǎn),實(shí)現(xiàn)刪除x的后繼的語(yǔ)句是(b)。

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,則(d)。

A.p指向頭結(jié)點(diǎn)B.p指向尾結(jié)點(diǎn)C.p的直接后繼是頭結(jié)點(diǎn)

D.p的直接后繼是尾結(jié)點(diǎ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í)行的語(yǔ)句:q-next=p-nexl,p-next=q。

答案:q->next=p->nextp->next=q

2、線性表的邏輯結(jié)構(gòu)是線性結(jié)構(gòu),其所含元素的個(gè)數(shù)稱為線性表的長(zhǎng)度。

答案:線性結(jié)構(gòu)長(zhǎng)度

3、寫(xiě)出帶頭結(jié)點(diǎn)的雙向循環(huán)鏈表L為空表的條件L-prior=L-next=L。

答案:L->prior==L->next==L

4,帶頭結(jié)點(diǎn)的單鏈表head為空的條件是head-next==null。

答案:head->next==NULL

5、在一個(gè)單鏈表中刪除p所指結(jié)點(diǎn)的后繼結(jié)點(diǎn)時(shí),應(yīng)執(zhí)行以下操作:

q=p->next;

p->next=q-next;

答案:q->next

四、程序分析填空題

1、函數(shù)GetElem實(shí)現(xiàn)返回單鏈表的第i個(gè)元素,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。

intGetElem(LinkListL,inti,Elemtype*e){

LinkListp;intj;

p=L->next;j=l;

while(p&&j<i){

p-p-next⑴;++j;

)

if(!pI|j>i)returnERROR;

*6二p-data(2);

returnOK;

)

答案:(1)p=p->next(2)p->data

2、函數(shù)實(shí)現(xiàn)單鏈表的插入算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。

intListinsert(LinkListL,inti,ElemTypee){

LNode*p,*s;intj;

P=L;j=0;

while((p!=NULL)&&(j<i-l)){

p=p->next;j++;

)

if(p==NULL||j>i-l)returnERROR;

s=(LNode*)malloc(sizeof(LNode));

s->data=e;

______⑴s-next=p-next_________;

⑵p-next=s;

returnOK;

}/*ListInsert*/

答案:(1)s->next=p->next(2)p->next=s

3、函數(shù)ListDeletjsq實(shí)現(xiàn)順序表刪除算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。

intListDelete_sq(Sqlist*L,inti){

intk;

if(i<l|i>L->length)returnERROR;

for(k=i-l;k<L->length-l;k++)

L->slist[k]=L->slist[k+1](1);

(2)--L->Length;

returnOK;

}

答案:(1)L->slist[k+l](2)—L->Length

4、函數(shù)實(shí)現(xiàn)單鏈表的刪除算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。

intListDelete(LinkListL,inti,ElemType*s){

LNode*p,*q;

intj;

P=L;j=0;

while((p-next!=null(1))&&(j<i-l)){

p=p->next;j++;

}

if(p->next==NULL||j>i-l)returnERROR;

q=p->next;

p-next二q-next(2);

*s=q->data;

free(q);

returnOK;

}/*listDelete*/

答案:(1)p->next!二NULL(2)p->next=q->next

5、寫(xiě)出算法的功能。

intL(head){

node*head;

intn=0;

node*p;

p=head;

while(p!=NULL)

{p=p->next;

n++;

)

return(n);

}

答案:求單鏈表head的長(zhǎng)度

五、綜合題

1、編寫(xiě)算法,實(shí)現(xiàn)帶頭結(jié)點(diǎn)單鏈表的逆置算法。

答案: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、有兩個(gè)循環(huán)鏈表,鏈頭指針?lè)謩e為L(zhǎng)1和L2,要求寫(xiě)出算法將L2鏈表鏈到L1鏈表之后,

且連接后仍保持循環(huán)鏈表形式。

答案:voidmerge(Lnode禮1,Lnode*L2)

{Lnode*p,求q;

while(p->next!=L1)

p=p->next;

while(q->next!=L2)

q=q->next;

q->next=Ll;p->next=L2;

)

3、設(shè)一個(gè)帶頭結(jié)點(diǎn)的單向鏈表的頭指針為head,設(shè)計(jì)算法,將鏈表的記錄,按照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、編寫(xiě)算法,將一個(gè)頭指針為head不帶頭結(jié)點(diǎn)的單鏈表改造為一個(gè)單向循環(huán)鏈表,并分析

算法的時(shí)間復(fù)雜度。

答案:

voidlinklist_c(Lnode*head)

{Lnode*p;p=head;

if(!p)returnERROR;

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)),所以該算法的時(shí)間復(fù)雜度為0(N)o

5、已知head為帶頭結(jié)點(diǎn)的單循環(huán)鏈表的頭指針,鏈表中的數(shù)據(jù)元素依次為(al,

a2,a3,a4,…,an),A為指向空的順序表的指針。閱讀以下程序段,并回答問(wèn)題:

(1)寫(xiě)出執(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->data[A->length++]=p-〉data;

if(p->next!=head)p=p->next;

)

答案:

(1)(a2,a4,…,)(2)將循環(huán)單鏈表中偶數(shù)結(jié)點(diǎn)位置的元素值寫(xiě)入順序表A

6,設(shè)順序表va中的數(shù)據(jù)元數(shù)遞增有序。試寫(xiě)一算法,將x插入到順序表的適當(dāng)位置上,以

保持該表的有序性。

答案:

voidInsert_sq(Sqlistva[],ElemTypex)

{inti,j,n;

n=length(va[J);

if(x>=va[i])

va[n]=x;

else

{i=0;

while(x>va[i])i++;

for(j=n-l;j>=I;j—)

va[j+l]=va[j];

va[i]=x;}

n++;

)

7、假設(shè)線性表采用順序存儲(chǔ)結(jié)構(gòu),表中元素值為整型。閱讀算法f2,設(shè)順序表

L=(3,7,3,2,1,1,8,7,3),寫(xiě)出執(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)刪除順序表中重復(fù)的元素

8、已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲(chǔ)結(jié)構(gòu)。試寫(xiě)一算法,刪除表

中所有大于x且小于y的元素(若表中存在這樣的元素)同時(shí)釋放被刪除結(jié)點(diǎn)空間。

答案:

voidDeletelist(Lnode*head,ElemTypex,ElemTypey)

{Lnode*p,*q;

if(!head)returnERROR;

p=head;q=p;

whi1e(!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é)點(diǎn)的循環(huán)鏈表L中,結(jié)點(diǎn)的數(shù)據(jù)元素為整型,且按值遞增有序存放。給定兩個(gè)

整數(shù)a和b,且a〈b,編寫(xiě)算法刪除鏈表L中元素值大于a且小于b的所有結(jié)點(diǎn)。

第三章棧和隊(duì)列

一、選擇題

1、一個(gè)棧的輸入序列為:a,b,c,d,e,則棧的不可能輸出的序列是(c)。

A.a,b,c,d,eB.d,e,c,b,a

C.d,c,e,a,bD.e,d,c,b,a

2、判斷一個(gè)循環(huán)隊(duì)列Q(最多n個(gè)元素)為滿的條件是(c)。

A.Q->rear==Q->frontB.Q->rear==Q->front+1

C.Q->front~(Q->rear+l)%nD.Q->front==(Q->rear-l)%n

3、設(shè)計(jì)一個(gè)判別表達(dá)式中括號(hào)是否配對(duì)的算法,采用(d)數(shù)據(jù)結(jié)構(gòu)最佳。

A.順序表B.鏈表C.隊(duì)列D.棧

4、帶頭結(jié)點(diǎn)的單鏈表head為空的判定條件是(b)o

A.head==NULLB.head->next==NULL

C.head->next!=NULLD.head!=NULL

5、一個(gè)棧的輸入序列為:1,2,3,4,則棧的不可能輸出的序列是(d)。

A.1243B.2134C.1432D.4312E.3214

6、若用一個(gè)大小為6的數(shù)組來(lái)實(shí)現(xiàn)循環(huán)隊(duì)列,且當(dāng)rear和front的值分別為0,3。當(dāng)從隊(duì)列

中刪除一個(gè)元素,再加入兩個(gè)元素后,rear和front的值分別為(b)。

A.1和5B.2和4C.4和2D.5和1

7、隊(duì)列的插入操作是在(a)。

A.隊(duì)尾B.隊(duì)頭C.隊(duì)列任意位置D.隊(duì)頭元素后

8、循環(huán)隊(duì)列的隊(duì)頭和隊(duì)尾指針?lè)謩e為front和rear,則判斷循環(huán)隊(duì)列為空的條件是(a)。

A.front二二rearB.front==0

C.rear==0D.front=rear+l

9、一個(gè)順序棧S,其棧頂指針為top,則將元素e入棧的操作是(a)。

A.*S->top=e;S->top++;B.S->top++;*S->top=e;

C.*S->top=eD.S->top=e;

10、表達(dá)式a*(b+c)-d的后綴表達(dá)式是(b)o

A.abcd+-B.abc+*dC.abc*+d-D.-+*abcd

11、將遞歸算法轉(zhuǎn)換成對(duì)應(yīng)的非遞歸算法時(shí),通常需要使用(b)來(lái)保存中間結(jié)果。

A.隊(duì)列B.棧C.鏈表D.樹(shù)

12、棧的插入和刪除操作在(b

A.棧底B.棧頂C.任意位置D.指定位置

13、五節(jié)車(chē)廂以編號(hào)1,2,3,4,5順序進(jìn)入鐵路調(diào)度站(棧),可以得到(c)的編組。

A.3,4,5,1,2B.2,4,1,3,5

C.3,5,4,2,1D.1,3,5,2,4

14、判定一個(gè)順序棧S(??臻g大小為n)為空的條件是(a)。

A.S->top==0B.S->top!=0

C.S->top~nD.S->top!=n

15、在一個(gè)鏈隊(duì)列中,front和rear分別為頭指針和尾指針,則插入一個(gè)結(jié)點(diǎn)s的操作為(c)。

A.front=front->nextB.s->next=rear;rear=s

C.rear->next=s;rear=s;D.s->next=front;front=s;

16、一個(gè)隊(duì)列的入隊(duì)序列是1,2,3,4,則隊(duì)列的出隊(duì)序列是(b)o

A.1,2,3,4B.4,3,2,1

C.1,4,3,2D.3,4,1,2

17、依次在初始為空的隊(duì)列中插入元素a,b,c,d以后,緊接著做了兩次刪除操作,此時(shí)的隊(duì)

頭元素是(c)。

A.aB.bC.cD.d

18、正常情況下,刪除非空的順序存儲(chǔ)結(jié)構(gòu)的堆棧的棧頂元素,棧頂指針top的變化是(d)。

A.top不變B.top=0C.top=top+lD.top=top-l

19、判斷一個(gè)循環(huán)隊(duì)列Q(空間大小為M)為空的條件是()。

A.Q->front==Q->rearB.Q->rear-Q->front-l-M

C.Q->front+l=Q->rearD.Q->rear+1=Q->front

20、設(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+lC.N-lD,N-2

22、隊(duì)列的刪除操作是在()。

A.隊(duì)首B.隊(duì)尾C.隊(duì)前D.隊(duì)后

23、若讓元素1,2,3依次進(jìn)棧,則出棧次序不可能是()。

A.3,2,1B.2,1,3C.3,1,2D.1,3,2

24、循環(huán)隊(duì)列用數(shù)組A[0,m-1]存放其元素值,已知其頭尾指針?lè)謩e是front和rear,則當(dāng)前

隊(duì)列中的元素個(gè)數(shù)是()。

A.(rear-front+m)%mB.rear-front+1

C.rear-front-1D.rear-front

25、在解決計(jì)算機(jī)主機(jī)和打印機(jī)之間速度不匹配問(wèn)題時(shí),通常設(shè)置一個(gè)打印數(shù)據(jù)緩沖區(qū),主

機(jī)將要輸出的數(shù)據(jù)依次寫(xiě)入該緩沖區(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=front->nextB.rear-rear->next

C.rear->next=frontD.front->next=rear

28、隊(duì)和棧的主要區(qū)別是()。

A.邏輯結(jié)構(gòu)不同B.存儲(chǔ)結(jié)構(gòu)不同

C.所包含的運(yùn)算個(gè)數(shù)不同D.限定插入和刪除的位置不同

二、填空題

1、設(shè)棧S和隊(duì)列Q的初始狀態(tài)為空,元素61,62,63,64,05,06依次通過(guò)棧$,一個(gè)元素出棧后

即進(jìn)入隊(duì)列Q,若6個(gè)元素出隊(duì)的序列是e2,e4,e3,e6,e5,el,則棧的容量至少應(yīng)該

是0

答案:3

2、一個(gè)循環(huán)隊(duì)列Q的存儲(chǔ)空間大小為M,其隊(duì)頭和隊(duì)尾指針?lè)謩e為front和rear,則循環(huán)隊(duì)列

中元素的個(gè)數(shù)為:。

答案:(rear-front+M)%M

3、在具有n個(gè)元素的循環(huán)隊(duì)列中,隊(duì)滿時(shí)具有個(gè)元素。

答案:n-1

4、設(shè)循環(huán)隊(duì)列的容量為70,現(xiàn)經(jīng)過(guò)一系列的入隊(duì)和出隊(duì)操作后,front為20,rear為11,則

隊(duì)列中元素的個(gè)數(shù)為。

答案:61

5、已知循環(huán)隊(duì)列的存儲(chǔ)空間大小為20,且當(dāng)前隊(duì)列的頭指針和尾指針的值分別為8和3,且

該隊(duì)列的當(dāng)前的長(zhǎng)度為。

四、程序分析填空題

1、己知棧的基本操作函數(shù):

intInitStack(SqStack*S);//構(gòu)造空棧

intStackEmpty(SqStack*S);//判斷???/p>

intPush(SqStack*S,ElemTypee);〃入棧

intPop(SqStack*S,ElemType*e);〃出棧

函數(shù)conversion實(shí)現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)換為八進(jìn)制數(shù),請(qǐng)將函數(shù)補(bǔ)充完整。

voidconversion(){

InitStack(S);

scanf(“機(jī)I”,&N);

while(N){

⑴_(tái)___________;

N=N/8;

)

while((2)){

Pop(S,&e);

printf("%d",e);

)

}//conversion

答案:(1)Push(S,N%8)(2)[StackEmpty(S)

2、寫(xiě)出算法的功能。

intfunction(SqQueue*Q,ElemType*e){

if(Q->front==Q->rear)

returnERROR;

*e=Q->base[Q->front];

Q->front=(Q->front+1)%MAXSIZE;

returnOK;

}

3、閱讀算法f2,并回答下列問(wèn)題:

(1)設(shè)隊(duì)列Q=(1,3,5,2,4,6)。寫(xiě)出執(zhí)行算法f2后的隊(duì)列Q;

(2)簡(jiǎn)述算法f2的功能。

voidf2(Queue*Q){

DataTypee;

if(!QueueEmpty(Q)){

6二DeQueue(Q);

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)寫(xiě)出相應(yīng)的入隊(duì)列算法(用函數(shù)實(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是一個(gè)非空隊(duì)列,S是一個(gè)空棧。編寫(xiě)算法,僅用隊(duì)列和棧的ADT函數(shù)和少量工

作變量,將隊(duì)列Q的所有元素逆置。

棧的ADT函數(shù)有:

voidmakeEmpty(SqStacks);置空棧

voidpush(SqStacks,ElemTypee);元素e入棧

ElemTypepop(SqStacks);出棧,返回棧頂元素

intisEmpty(SqStacks);判斷???/p>

隊(duì)列的ADT函數(shù)有:

voidenQueue(Queueq,ElemTypee);元素e入隊(duì)

ElemTypedeQueue(Queueq);出隊(duì),返回隊(duì)頭元素

intisEmpty(Queueq);判斷隊(duì)空

答案:voidQueueinvent(Queueq)

(ElemTypex;

makeEmpty(SqStacks);

while(!isEmpty(Queueq))

{x=deQueue(Queueq);

push(SqStacks,ElemTypex);}

while(!isEmpty(SqStacks))

{x=pop(SqStacks);

enQueue(Queueq,ElemTypex);}

)

3、對(duì)于一個(gè)棧,給出輸入項(xiàng)A,B,C,D,如果輸入項(xiàng)序列為A,B,C,D,試給出全部可能的輸出

序列。

答案:出棧的可能序列:

ABCDABDCACDBACBDADCBBACDBADCBCADBCDA

CBDACBADCDBADCBA

第六章樹(shù)

一、選擇題

1、二叉樹(shù)的深度為k,則二叉樹(shù)最多有(C)個(gè)結(jié)點(diǎn)。

A.2kB.C.2k-lD.2k-1

2、用順序存儲(chǔ)的方法,將完全二叉樹(shù)中所有結(jié)點(diǎn)按層逐個(gè)從左到右的順序存放在一維數(shù)組

中,若結(jié)點(diǎn)R[i]有右孩子,則其右孩子是(B)?

A.R[2i-1]B.R[2i+1]C.R[2i]D.R[2/i]

3、設(shè)a,b為一棵二叉樹(shù)上的兩個(gè)結(jié)點(diǎn),在中序遍歷時(shí),a在b前面的條件是(B)。

A.a在b的右方B.a在b的左方C.a是b的祖先D.

a是b的子孫

4、設(shè)一棵二叉樹(shù)的中序遍歷序列:badce,后序遍歷序列:bdeca,則二叉樹(shù)先序遍歷序列

為()。

A.adbceB.decabC.debacD.abcde

5、在一棵具有5層的滿二叉樹(shù)中結(jié)點(diǎn)總數(shù)為(A)o

A.31B.32C.33D.16

6、由二叉樹(shù)的前序和后序遍歷序列(B)惟一確定這棵二叉樹(shù)。

A.能B.不能

7、某二叉樹(shù)的中序序列為ABCDEFG,后序序列為BDCAFGE,則其左子樹(shù)中結(jié)點(diǎn)數(shù)目為(C)。

A.3B.2C.4D.5

8、若以{4,5,6,7,8}作為權(quán)值構(gòu)造哈夫曼樹(shù),則該樹(shù)的帶權(quán)路徑長(zhǎng)度為(C)。

A.67B.68C.69D.70

9、將一棵有100個(gè)結(jié)點(diǎn)的完全二叉樹(shù)從根這一層開(kāi)始,每一層上從左到右依次對(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.48

10、表達(dá)式a*(b+c)-d的后綴表達(dá)式是(B

A.abcd+-B.abc+*d-C.abc*+d-D.-+*abcd

11、對(duì)某二叉樹(shù)進(jìn)行先序遍歷的結(jié)果為ABDEFC,中序遍歷的結(jié)果為DBFEAC,則后序遍歷的結(jié)

果是(B)?

A.DBFEACB.DFEBCAC.BDFECAD.BDEFAC

12、樹(shù)最適合用來(lái)表示(C)。

A.有序數(shù)據(jù)元素B.無(wú)序數(shù)據(jù)元素C.元素之間具有分支層次關(guān)系的數(shù)

據(jù)D.元素之間無(wú)聯(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、在線索二叉樹(shù)中,t所指結(jié)點(diǎn)沒(méi)有左子樹(shù)的充要條件是()。

A.t->left==NULLB.t->ltag==lC.

t->ltag==l&&t->left==NULLD.以上都不對(duì)

15、任何一棵二叉樹(shù)的葉結(jié)點(diǎn)在先序、中序和后序遍歷序列中的相對(duì)次序()?

A.不發(fā)生改變B.發(fā)生改變C.不能確定D.以上都不

對(duì)

16、假定在一棵二叉樹(shù)中,度為2的結(jié)點(diǎn)數(shù)為15,度為1的結(jié)點(diǎn)數(shù)為30,則葉子結(jié)點(diǎn)數(shù)為()

個(gè)。

A.15B.16C.17D.47

17、在下列情況中,可稱為二叉樹(shù)的是(B

A.每個(gè)結(jié)點(diǎn)至多有兩棵子樹(shù)的樹(shù)B.哈夫曼樹(shù)

C.每個(gè)結(jié)點(diǎn)至多有兩棵子樹(shù)的有序樹(shù)D.每個(gè)結(jié)點(diǎn)只有一棵子樹(shù)

18、用順序存儲(chǔ)的方法,將完全二叉樹(shù)中所有結(jié)點(diǎn)按層逐個(gè)從左到右的順序存放在一維數(shù)組

中,若結(jié)點(diǎn)R[i]有左孩子,則其左孩子是()o

A.R[2i-1]B.R[2i+1]C.R[2i]D.R[2/i]

19、下面說(shuō)法中正確的是()。

溫馨提示

  • 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)論