數(shù)據(jù)結(jié)構(gòu)期末習(xí)題集及答案_第1頁
數(shù)據(jù)結(jié)構(gòu)期末習(xí)題集及答案_第2頁
數(shù)據(jù)結(jié)構(gòu)期末習(xí)題集及答案_第3頁
數(shù)據(jù)結(jié)構(gòu)期末習(xí)題集及答案_第4頁
數(shù)據(jù)結(jié)構(gòu)期末習(xí)題集及答案_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第一章概論

一、選擇題

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.棧

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

(B)等5個特性。

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

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

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

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

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

a皿]=i*j;

i

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

6、算法是(D卜

A.計算機(jī)程序B.解決問題的計算方法

C.排序算法D.解決問題的有限運算序列

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

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

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

i=1;

while(i<=n)

i=i*3;

3

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

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

間的(B)和運算等的學(xué)科。

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

10、下面程序段的時間復(fù)雜度是(C卜

i=s=0;

while(s<n){

i++;s+=i;

}

A.O(n)B.O(n2)C.O(log2n)D.O(n3)

2

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ù)類型

12、通常從正確性、易讀性、健壯性、高效性等4個方面評價算法的質(zhì)量,以下解釋

錯誤的是(A卜

A.正確性算法應(yīng)能正確地實現(xiàn)預(yù)定的功能

B.易讀性算法應(yīng)易于閱讀和理解,以便調(diào)試、修改和擴(kuò)充

C.健壯性當(dāng)環(huán)境發(fā)生變化時,算法能適當(dāng)?shù)刈龀龇磻?yīng)或進(jìn)行處理,不會產(chǎn)生不需

要的運行結(jié)果

D.高效性即達(dá)到所需要的時間性能

13、下列程序段的時間復(fù)雜度為(B卜

x=n;y=O;

while(x>=(y+1)*(y+1))

y=y+i;

A.0(n)B.。(向C.0(1)D.0(n2)

二、填空題

1、程序段“i=1;while(i〈=n)i=i*2;”的時間復(fù)雜度為O(log2n)。

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

三、綜合題

1、將數(shù)量級。⑴,O(N),O(N2)Q(N3),O(NLOG2N),O(LOG2N),O(2N)按增長率由小到大

排序。

3

3N

答案:0(1)<O(log2N)<0(N)<O(Nlog2N)<0怦)<0(N)<0(2)

第二章線性表

一、選擇題

1、若長度為n的線性表采用順序存儲結(jié)構(gòu),在其第i個位置插入一個新元素算法的

時間復(fù)雜度(C卜

2

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

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

(A)存儲方式最節(jié)省時間。

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

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

A.圖B.樹C.廣義表D.棧

4、在一個長度為n的順序表中,在第i個元素之前插入一個新元素時,需向后移動

(B)個元素。

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

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

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

C.p==NULLD.p==head

6、鏈表不具有的特點是(A卜

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

C.不必事先估計存儲空間D.所需空間與線性表長度成正比

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

指針的操作是(C卜

4

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)酱鎯r,結(jié)點的存儲地址(C卜

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

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

9、在一個長度為n的順序表中刪除第i個元素,需要向前移動(A)個元素。

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

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

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

11、從表中任一結(jié)點出發(fā),都能掃描整個表的是(C卜

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

12、在具有n個結(jié)點的單鏈表上查找值為x的元素時,其時間復(fù)雜度為(A卜

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

13、線性表L=(a1,a2........an),下列說法正確的是(D卜

A.每個元素都有一個直接前驅(qū)和一個直接后繼

B.線性表中至少要有一個元素

C.表中諸元素的排列順序必須是由小到大或由大到小

D.除第一個和最后一個元素外,其余每個元素都由一個且僅有一個直接前驅(qū)和

直接后繼

14、一個順序表的第一個元素的存儲地址是90,每個元素的長度為2,則第6個元

5

素的存儲地址是(B卜

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

15、在線性表的下列存儲結(jié)構(gòu)中,讀取元素花費的時間最少的是(D卜

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

16、在一個單鏈表中,若刪除p所指向結(jié)點的后續(xù)結(jié)點,則執(zhí)行(A卜

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ù)雜度為(C卜

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

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

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

19、順序表中,插入一個元素所需移動的元素平均數(shù)是(D卜

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

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

A.不再需要頭指針B.已知某結(jié)點位置后能容易找到其直接前驅(qū)

C.在進(jìn)行插入、刪除運算時能保證鏈表不斷開

D.在表中任一結(jié)點出發(fā)都能掃描整個鏈表

11、不帶頭結(jié)點的單鏈表head為空的判定條件是(Ab

A.head==NULL

B.head->next==NULL(帶頭結(jié)點判定條件)

6

C.head->next==head(循環(huán)鏈表判定條件)

D.head!=NULL

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

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

(I<i<n)

C.刪除第i個元素(14i《n)D.對順序表中元素進(jìn)行排序

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;

14、在以下的敘述中,正確的是(C卜

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

B.線性表的順序存儲結(jié)構(gòu)適用于頻繁插入/刪除數(shù)據(jù)元素的情況

C.線性表的鏈表存儲結(jié)構(gòu)適用于頻繁插入/刪除數(shù)據(jù)元素的情況

D,線性表的鏈表存儲結(jié)構(gòu)優(yōu)于順序存儲結(jié)構(gòu)

15、在表長為n的順序表中,當(dāng)在任何位置刪除一個元素的概率相同時,刪除一個元

素所需移動的平均個數(shù)為(A卜

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

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

插入一個結(jié)點s,則執(zhí)行(A卜

7

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é)點,實現(xiàn)刪除x的后繼的語句是(B卜

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

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

18、在頭指針為head且表長大于1的單循環(huán)鏈表中,指針p指向表中某個結(jié)點,若

p->next->next==head,貝U(D'

A.p指向頭結(jié)點B.p指向尾結(jié)點

C.p的直接后繼是頭結(jié)點D.p的直接后繼是尾結(jié)點

二、填空題

1、設(shè)單鏈表的結(jié)點結(jié)構(gòu)為(data,nextb已知指針p指向單鏈表中的結(jié)點,q指向新

結(jié)點,欲將q插入到p結(jié)點之后,則需要執(zhí)行的語句:q->next=p->next;

p->next=q。

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

2、線性表的邏輯結(jié)構(gòu)是線性結(jié)構(gòu),其所含元素的個數(shù)稱為線性表的—殳

度O

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

8

3、寫出帶頭結(jié)點的雙向循環(huán)鏈表L為空表的條件

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

4、帶頭結(jié)點的單鏈表head為空的條件是o

答案:head->next==NULL

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

q=p->next;

p->next=q->next:

三、判斷題

1、單鏈表不是一種隨機(jī)存儲結(jié)構(gòu)。對

2、在具有頭結(jié)點的單鏈表中,頭指針指向鏈表的第一個數(shù)據(jù)結(jié)點。錯

3、用循環(huán)單鏈表表示的鏈隊列中,可以不設(shè)隊頭指針,僅在隊尾設(shè)置隊尾指針。對

4、順序存儲方式只能用于存儲線性結(jié)構(gòu)。錯

5、在線性表的順序存儲結(jié)構(gòu)中,邏輯上相鄰的兩個元素但是在物理位置上不一定是

相鄰的。錯

6、鏈?zhǔn)酱鎯Φ木€性表可以隨機(jī)存取。錯

四、程序分析填空題

1、函數(shù)GetElem實現(xiàn)返回單鏈表的第i個元素,請在空格處將算法補充完整。

intGetElem(LinkListL,inti.Elemtype*e){

LinkListp;intj;

9

p=L->next;j=1;

while(p&&j<i){

⑴;++j;

}

if(!p||j>i)returnERROR;

*e=(2);

returnOK;

}

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

2、函數(shù)實現(xiàn)單鏈表的插入算法,請在空格處將算法補充完整。

intListlnsert(LinkListL,inti.ElemTypee){

LNode*p,*s;intj;

P=L;j=O;

while((p!=NULL)&&(j<i-1)){p=p->next;j++;

}

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

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

s->data=e;

⑴__________;

(2)_________;

returnOK;

}/*Listlnsert*/

io

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

3、函數(shù)ListDelete_sq實現(xiàn)順序表刪除算法,請在空格處將算法補充完整。

intListDelete_sq(Sqlist*L,inti){

intk;

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

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

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

(2);

returnOK;

}

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

4、函數(shù)實現(xiàn)單鏈表的刪除算法,請在空格處將算法補充完整。

intListDelete(LinkListL,inti.ElemType*s){

LNode*p,*q;

intj;

P=L;j=O;

while(((1))&&(j<i-1)){

p=p->next;j++;

}

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

q=p->next;

(2);

11

*s=q->data;

free(q);

returnOK;

}/*listDelete*/

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

5、寫出算法的功能。

intL(head){

node*head;

intn=0;

node*p;

p=head;

while(p!=NULL)

{p=p->next;

n++;

)

return(n);

)

答案:求單鏈表head的長度

五、綜合題

12

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

答案: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、有兩個循環(huán)鏈表,鏈頭指針分別為L1和L2,要求寫出算法將L2鏈表鏈到L1鏈

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

答案:voidmerge(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域的值遞增排序。

答案:voidassending(Lnode*head)

{Lnode*p,*q,*r,*s;

13

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、編寫算法,將一個頭指針為head不帶頭結(jié)點的單鏈表改造為一個單向循環(huán)鏈表,

并分析算法的時間復(fù)雜度。

答案:

voidlinklist_c(Lnode*head)

{Lnode*p;p=head;

if(!p)returnERROR;

while(p->next!=NULL)

p=p->next;

p->next=head;

)

設(shè)單鏈表的長度(數(shù)據(jù)結(jié)點數(shù))為N,則該算法的時間主要花費在查找鏈表最后一個

14

結(jié)點上(算法中的while循環(huán)),所以該算法的時間復(fù)雜度為0(Nb

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=O;

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é)點位置的元素值寫入順序表A

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

上,以保持該表的有序性。

答案:

voidlnsert_sq(Sqlistva[],ElemTypex)

15

{inti,j,n;

n=length(va[]);

if(x>=va[i])

va[n]=x;

else

{i=0;

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

for(j=n-1;j>=l;j-)

vaO+1]=va[j];

va[i]=x;}

n++;

}

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

L=(3,7,3,2,1,1,8,7,3),寫出執(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++;

I6

)

)

L->length=k;

}

答案:

(3,7,2,1,8)刪除順序表中重復(fù)的元素

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

刪除表中所有大于x且小于y的元素(若表中存在這樣的元素)同時釋放被刪除結(jié)點

空間。

答案:

voidDelete_list(Lnode*head,ElemTypex,ElemTypey)

{Lnode*p,*q;

if(!head)returnERROR;

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;}

else

17

{q->next=p->next;free(p);

p=q->next;}

else

{q=P;p=p->next;}

}

9、在帶頭結(jié)點的循環(huán)鏈表L中,結(jié)點的數(shù)據(jù)元素為整型,且按值遞增有序存放。給

定兩個整數(shù)a和b,且a〈b,編寫算法刪除鏈表L中元素值大于a且小于b的所有結(jié)

八占、、O

第三章棧和隊列

一、選擇題

1、一個棧的輸入序列為: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、判斷一個循環(huán)隊列Q(最多n個元素)為滿的條件是(C卜

18

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

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

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

A.順序表B.鏈表C.隊列D.棧

4、帶頭結(jié)點的單鏈表head為空的判定條件是(B卜

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

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

5、一個棧的輸入序列為:1,2,3,4,則棧的不可能輸出的序列是(D卜

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

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

隊列中刪除一個元素,再加入兩個元素后,rear和front的值分別為(B卜

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

7、隊列的插入操作是在(A卜

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

8、循環(huán)隊列的隊頭和隊尾指針分別為front和rear,則判斷循環(huán)隊列為空的條件是

(A卜

A.front==rearB.front==0

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

9、一個順序棧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\

19

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

11、將遞歸算法轉(zhuǎn)換成對應(yīng)的非遞歸算法時,通常需要使用(B)來保存中間結(jié)

果。

A.隊列B.棧C.鏈表D.樹

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

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

13、五節(jié)車廂以編號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、判定一個順序棧S(??臻g大小為n)為空的條件是(A卜

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

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

15、在一個鏈隊列中,front和rear分別為頭指針和尾指針,則插入一個結(jié)點s的操作

為(C卜

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

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

16、一個隊列的入隊序列是1,2,3,4,則隊列的出隊序列是(A卜

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

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

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

的隊頭元素是(C卜

20

A.aB.bC.cD.d

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

是(D卜

A.top不變B.top=0C.top=top+1D.top=top-1

19、判斷一個循環(huán)隊列Q(空間大小為M)為空的條件是(A卜

A.Q->front==Q->rearB.Q->rear-Q->front-1==MC.

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

20、設(shè)計一個判別表達(dá)式中左右括號是否配對出現(xiàn)的算法,采用(C)數(shù)據(jù)結(jié)構(gòu)

最佳。

A.線性表的順序存儲結(jié)構(gòu)B.隊列C.棧D,線性表的鏈?zhǔn)酱?/p>

儲結(jié)構(gòu)

21、當(dāng)用大小為N的數(shù)組存儲順序循環(huán)隊列時,該隊列的最大長度為(Ab?

A.NB.N+1C.N-1D.N-2

22、隊列的刪除操作是在(A卜

A.隊首B.隊尾C.隊前D.隊后

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

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

24、循環(huán)隊列用數(shù)組A[0,m-1]存放其元素值,已知其頭尾指針分別是front和rear,

則當(dāng)前隊列中的元素個數(shù)是(A卜

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

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

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

21

區(qū),主機(jī)將要輸出的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機(jī)則從該緩沖區(qū)中取走數(shù)據(jù)打印。

該緩沖區(qū)應(yīng)該是一個(B)結(jié)構(gòu)。

A.堆棧B.隊列C.數(shù)組D.線性表

26、棧和隊列都是(C卜

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卜

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

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

28、隊和棧的主要區(qū)別是(D卜

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

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

二、填空題

1、設(shè)棧S和隊列Q的初始狀態(tài)為空,元素6162£3£4?5£6依次通過棧$,一個元素

出棧后即進(jìn)入隊列Q,若6個元素出隊的序列是e2,e4,e3,e6,e5,e1,則棧的容量至少

應(yīng)該是0

答案:3

2、一個循環(huán)隊列Q的存儲空間大小為M,其隊頭和隊尾指針分別為front和rear,則循環(huán)

隊列中元素的個數(shù)為:(rear-front+M)%M。

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

22

3、在具有n個元素的循環(huán)隊列中,隊滿時具有n-1個元素。

答案:n-1

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

11,則隊列中元素的個數(shù)為61。

答案:61

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

和3,且該隊列的當(dāng)前的長度為―15―o

三、判斷題

1、棧和隊列都是受限的線性結(jié)構(gòu)。對

2、在單鏈表中,要訪問某個結(jié)點,只要知道該結(jié)點的地址即可;因此,單鏈表是一

種隨機(jī)存取結(jié)構(gòu)。錯

3、以鏈表作為棧的存儲結(jié)構(gòu),出棧操作必須判別??盏那闆r。對

四、程序分析填空題

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

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

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

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

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

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

voidconversion(){

InitStack(S);

23

scanf("%d",&N);

while(N){

(1);

N=N/8;

}

while((2)){

Pop(S,&e);

printf("%d”,e);

)

}//conversion

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

2、寫出算法的功能。

intfunction(SqQueue*Q,ElemType*e){

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

returnERROR;

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

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

returnOK;

}

答案:循環(huán)隊列出隊操作

3、閱讀算法f2,并回答下列問題:

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

24

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

voidf2(Queue*Q){

DataTypee;

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

rear

答案:voidEnQueue(Lnode*rear,日emTypee)

{Lnode*new;

New=(Lnode*)malloc(sizeof(Lnode));

lf(!new)returnERROR;

new->data=e;new->next=rear->next;

25

rear->next=new;rear=new;

)

2、已知Q是一個非空隊列,S是一個空棧。編寫算法,僅用隊列和棧的ADT函數(shù)

和少量工作變量,將隊列Q的所有元素逆置。

棧的ADT函數(shù)有:

voidmakeEmpty(SqStacks);置空棧

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

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

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

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

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

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

intisEmpty(Queueq);判斷隊空

答案:voidQueuelnvent(Queueq)

{ElemTypex;

makeEmpty(SqStacks);

while(!isEmpty(Queueq))

{x=deQueue(Queueq);

push(SqStacks,ElemTypex);}

while(!isEmpty(SqStacks))

{x=pop(SqStacks);

enQueue(Queueq,ElemTypex);}

26

)

3、對于一個棧,給出輸入項A,B,C,D,如果輸入項序列為A,B,C,D,試給出全部可

能的輸出序列。

答案:出棧的可能序列:

ABCDABDCACDBACBDADCBBACDBADCBCADBCDA

CBDACBADCDBADCBA

第四章串

一、選擇題

1、設(shè)有兩個串S1和S2,求串S2在S1中首次出現(xiàn)位置的運算稱作(C卜

A.連接B.求子串C.模式匹配D.判斷子串

2、已知串S='aaab',貝hext數(shù)組值為(A卜

A.0123B.1123C.1231D.1211

3、串與普通的線性表相比較,它的特殊性體現(xiàn)在(C卜

A.順序的存儲結(jié)構(gòu)B.鏈?zhǔn)酱鎯Y(jié)構(gòu)

C.數(shù)據(jù)元素是一個字符D.數(shù)據(jù)元素任意

4、設(shè)串長為n,模式串長為m,則KMP算法所需的附加空間為(A卜

A.O(m)B.O(n)C.O(m*n)D.O(nlog2m)

5、空串和空格串(B卜

A.相同B.不相同C.可能相同D.無法確定

6、與線性表相比,串的插入和刪除操作的特點是(A卜

A.通常以串整體作為操作對象B.需要更多的輔助空間

C.算法的時間復(fù)雜度較高D.涉及移動的元素更多

27

7、設(shè)SUBSTR(S,i,k)是求S中從第i個字符開始的連續(xù)k個字符組成的子串的操作,則

對于S='Beijing&Nanjing',SUBSTR(S,4,5)=(B\

A.'ijing'B.'jing&'C.'ingNa'D.'ing&N'

二、判斷題

(對)1、造成簡單模式匹配算法BF算法執(zhí)行效率低的原因是有回溯存在。

(V)2,KMP算法的最大特點是指示主串的指針不需要回溯。

(J)3、完全二叉樹某結(jié)點有右子樹,則必然有左子樹。

三、填空題

1、求子串在主串中首次出現(xiàn)的位置的運算稱為模式匹配。

2、設(shè)5='1口\1\?|—A^TEACHER',其長度是_14_。

3、兩個串相等的充分必要條件是兩個串的長度相等且對應(yīng)位置字符相同。

四、程序填空題

1、函數(shù)kmp實現(xiàn)串的模式匹配,請在空格處將算法補充完整。

intkmp(sqstring*s,sqstring*t,intstart,intnext[]){

inti=start-1,j=0;

while(i<s->len&&j<t->len)

if(j==-1||s->data[i]==t->data[j]){

i++;j++;

}

elsej=;

jf(j>=t->|en)

return();

28

else

return(-1);

}

2、函數(shù)實現(xiàn)串的模式匹配算法,請在空格處將算法補充完整。

intindex_bf(sqstring*s,sqstring*t,intstart){

inti=start-1,j=0;

while(i<s->len&&j<t->len)

if(s->data[i]==t->data[j]){

i++;j++;

}else{

i=i-j+1;j=0;

)

if(j>=t->len)

returni-t->len+1;

else

return-1;

}}/*listDelete*/

3、寫出下面算法的功能。

intfunction(SqString*s1,SqString*s2){

inti;

for(i=0;i<s1->length&&i<s1->length;i++)

if(s->data[i]!=s2->data[i])

29

returns1->data[i]-s2->data[i];

returns1->length-s2->length;

}

答案:.串比較算法

4、寫出算法的功能。

intfun(sqstring*s,sqstring*t,intstart){

inti=start-1,j=0;

while(i<s->len&&j<t->len)

if(s->data[i]==t->data[j]){

i++;j++;

}else{

i=i-j+1;j=0;

}

if(j>=t->len)

returni-t->len+1;

else

return-1;

}

答案:串的模式匹配算法

第五章數(shù)組和廣義表

一、選擇題

1、設(shè)廣義表L=((a,b,c)),貝扎的長度和深度分別為(C卜

30

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

2、廣義表((a),a)的表尾是(B卜

A.aB.(a)C.()D.((a))

3、稀疏矩陣的常見壓縮存儲方法有(C)兩種。

A.二維數(shù)組和三維數(shù)組B.三元組和散列表

C.三元組和十字鏈表D.散列表和十字鏈表

4、一個非空廣義表的表頭(D卜

A.不可能是子表B,只能是子表

C.只能是原子D,可以是子表或原子

5、數(shù)組AQ.5Q..6]的每個元素占5個字節(jié),將其按列優(yōu)先次序存儲在起始地址為1000

的內(nèi)存單元中,則元素A[5北5]的地址是('

A.1175B.1180C.1205D.1210

6、廣義表6=但,1)94(6,1)),9)的長度是(A卜

A.3B.4C.7D.8

7、采用稀疏矩陣的三元組表形式進(jìn)行壓縮存儲,若要完成對三元組表進(jìn)行轉(zhuǎn)置,只

要將行和列對換,這種說法(B卜

A.正確B.錯誤C.無法確定D.以上均不對

8、廣義表(a,b,c)的表尾是(B卜

A.b,cB.(b,c)C.cD.(c)

9、常對數(shù)組進(jìn)行兩種基本操作是(C卜

A.建立和刪除B.索引和修改

C.查找和修改D.查找與索引

31

10、對一些特殊矩陣采用壓縮存儲的目的主要是為了(D卜

A.表達(dá)變得簡單B.對矩陣元素的存取變得簡單

C.去掉矩陣中的多余元素D.減少不必要的存儲空間的開銷

11、設(shè)有一個10階的對稱矩陣A,采用壓縮存儲方式,以行序為主存儲,a11為第一

個元素,其存儲地址為1,每元素占1個地址空間,貝以85的地址為(卜

A.13B.33C.18D.40

12、設(shè)矩陣A是一個對稱矩陣,為了節(jié)省存儲,將其下三角部分按行序存放在一維數(shù)

組B[1,n(n-1)/2]中,對下三角部分中任一元素ai,j(i>=j),在一維數(shù)組B的下標(biāo)位置k的

值是(B卜

A.i(i-1)/2+j-1B.i(i-1)/2+j

C.i(i+1)/2+j-1D.i(i+1)/2+j

13、廣義表A=((a),a)的表頭是(B卜

A.aB.(a)C.bD.((a))

14、稀疏矩陣一般的壓縮存儲方法有兩種,即(C卜

A.二維數(shù)組和三維數(shù)組B.三元組和散列

C.三元組和十字鏈表D.散列和十字鏈表

15、假設(shè)以三元組表表示稀疏矩陣,則與如圖所示三元組表對應(yīng)的4x5的稀疏矩陣

是(注:矩陣的行列下標(biāo)均從1開始)(B卜

'0-8060"'0—8060'

7000070003

12-8

00000-50400146

、-50400,、00000,217

253

31-5

334

32

'0-8060、'0-8060'

0000370000

c.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論