最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

數(shù)據(jù)2

2023-03-07 20:57 作者:青島啤酒真好喝  | 我要投稿

5.選擇題

(1)在數(shù)據(jù)結(jié)構(gòu)中,從邏輯上可以把數(shù)據(jù)結(jié)構(gòu)分成(? ?)。

A.動態(tài)結(jié)構(gòu)和靜態(tài)結(jié)構(gòu)???? B.緊湊結(jié)構(gòu)和非緊湊結(jié)構(gòu)

C.線性結(jié)構(gòu)和非線性結(jié)構(gòu)?? D.內(nèi)部結(jié)構(gòu)和外部結(jié)構(gòu)

答案:C

(2)與數(shù)據(jù)元素本身的形式、內(nèi)容、相對位置、個數(shù)無關(guān)的是數(shù)據(jù)的(?? )。

A.存儲結(jié)構(gòu)?????????????? B.存儲實現(xiàn)

C.邏輯結(jié)構(gòu)?? ????????????D.運算實現(xiàn)

答案:C

(3)通常要求同一邏輯結(jié)構(gòu)中的所有數(shù)據(jù)元素具有相同的特性,這意味著(?? )。

?? A.?dāng)?shù)據(jù)具有同一特點

B.不僅數(shù)據(jù)元素所包含的數(shù)據(jù)項的個數(shù)要相同,而且對應(yīng)數(shù)據(jù)項的類型要一致

C.每個數(shù)據(jù)元素都一樣

D.?dāng)?shù)據(jù)元素所包含的數(shù)據(jù)項的個數(shù)要相等

答案:B

(4)以下說法正確的是(?? )。

A.?dāng)?shù)據(jù)元素是數(shù)據(jù)的最小單位

B.?dāng)?shù)據(jù)項是數(shù)據(jù)的基本單位

C.?dāng)?shù)據(jù)結(jié)構(gòu)是帶有結(jié)構(gòu)的各數(shù)據(jù)項的集合

D.一些表面上很不相同的數(shù)據(jù)可以有相同的邏輯結(jié)構(gòu)

答案:D

解釋:數(shù)據(jù)元素是數(shù)據(jù)的基本單位,數(shù)據(jù)項是數(shù)據(jù)的最小單位,數(shù)據(jù)結(jié)構(gòu)是帶有結(jié)構(gòu)的各數(shù)據(jù)元素的集合。

(5)算法的時間復(fù)雜度取決于(??? )。

A.問題的規(guī)模 ??????? B.待處理數(shù)據(jù)的初態(tài)

C.計算機(jī)的配置?? ??????? D.A和B

答案:D

解釋:算法的時間復(fù)雜度不僅與問題的規(guī)模有關(guān),還與問題的其他因素有關(guān)。如某些排序的算法,其執(zhí)行時間與待排序記錄的初始狀態(tài)有關(guān)。為此,有時會對算法有最好、最壞以及平均時間復(fù)雜度的評價。

(6)以下數(shù)據(jù)結(jié)構(gòu)中,(? )是非線性數(shù)據(jù)結(jié)構(gòu)

A.樹??????? B.字符串?????? C.隊列?????????? D.棧

答案:A

6.試分析下面各程序段的時間復(fù)雜度。

(1)x=90; y=100;?

while(y>0)

if(x>100)

?{x=x-10;y--;}

else x++;

答案:O(1)

解釋:程序的執(zhí)行次數(shù)為常數(shù)階。

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

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

a[i][j]=0;

答案:O(m*n)

解釋:語句a[i][j]=0;的執(zhí)行次數(shù)為m*n。

(3)s=0;

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

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

? ???????s+=B[i][j];

sum=s;

答案:O(n2)

解釋:語句s+=B[i][j];的執(zhí)行次數(shù)為n2。

(4)i=1;

? ???while(i<=n)

??????? i=i*3;

答案:O(log3n)

解釋:語句i=i*3;的執(zhí)行次數(shù)為??log3n?。

(5)x=0;

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

?? for (j=1; j<=n-i; j++)

x++;

答案:O(n2)

解釋:語句x++;的執(zhí)行次數(shù)為n-1+n-2+……+1= n(n-1)/2。

(6)x=n; //n>1

y=0;

while(x≥(y+1)* (y+1))

????y++;

答案:O()

解釋:語句y++;的執(zhí)行次數(shù)為???。

1.選擇題

(1)順序表中第一個元素的存儲地址是100,每個元素的長度為2,則第5個元素的地址是(??? )。

A.110??????????? B.108? ???????C.100????????? D.120

答案:B

解釋:順序表中的數(shù)據(jù)連續(xù)存儲,所以第5個元素的地址為:100+2*4=108。

(2)在n個結(jié)點的順序表中,算法的時間復(fù)雜度是O(1)的操作是(?? )。

A.訪問第i個結(jié)點(1≤i≤n)和求第i個結(jié)點的直接前驅(qū)(2≤i≤n)

B.在第i個結(jié)點后插入一個新結(jié)點(1≤i≤n)

C.刪除第i個結(jié)點(1≤i≤n)

D.將n個結(jié)點從小到大排序

答案:A

解釋:在順序表中插入一個結(jié)點的時間復(fù)雜度都是O(n2),排序的時間復(fù)雜度為O(n2)或O(nlog2n)。順序表是一種隨機(jī)存取結(jié)構(gòu),訪問第i個結(jié)點和求第i個結(jié)點的直接前驅(qū)都可以直接通過數(shù)組的下標(biāo)直接定位,時間復(fù)雜度是O(1)。

(3) 向一個有127個元素的順序表中插入一個新元素并保持原來順序不變,平均要移動? 的元素個數(shù)為(?? )。

A.8 ?????B.63.5 ???????C.63????? D.7

答案:B

解釋:平均要移動的元素個數(shù)為:n/2。

(4)鏈接存儲的存儲結(jié)構(gòu)所占存儲空間(?? )。

A.分兩部分,一部分存放結(jié)點值,另一部分存放表示結(jié)點間關(guān)系的指針

B.只有一部分,存放結(jié)點值

C.只有一部分,存儲表示結(jié)點間關(guān)系的指針

D.分兩部分,一部分存放結(jié)點值,另一部分存放結(jié)點所占單元數(shù)

答案:A

(5)線性表若采用鏈?zhǔn)酱鎯Y(jié)構(gòu)時,要求內(nèi)存中可用存儲單元的地址(?? )。

A.必須是連續(xù)的??????? B.部分地址必須是連續(xù)的

C.一定是不連續(xù)的??? ??D.連續(xù)或不連續(xù)都可以

答案:D

(6)線性表L在(?? )情況下適用于使用鏈?zhǔn)浇Y(jié)構(gòu)實現(xiàn)。

A.需經(jīng)常修改L中的結(jié)點值????? B.需不斷對L進(jìn)行刪除插入

C.L中含有大量的結(jié)點????????? D.L中結(jié)點結(jié)構(gòu)復(fù)雜

答案:B

解釋:鏈表最大的優(yōu)點在于插入和刪除時不需要移動數(shù)據(jù),直接修改指針即可。

(7)單鏈表的存儲密度(?? )。

A.大于1????? ??B.等于1????? C.小于1??? D.不能確定

答案:C

解釋:存儲密度是指一個結(jié)點數(shù)據(jù)本身所占的存儲空間和整個結(jié)點所占的存儲空間之比,假設(shè)單鏈表一個結(jié)點本身所占的空間為D,指針域所占的空間為N,則存儲密度為:D/(D+N),一定小于1。

(8)將兩個各有n個元素的有序表歸并成一個有序表,其最少的比較次數(shù)是(?? )。

A.n ???????????B.2n-1 ???????C.2n ???????D.n-1

答案:A

解釋:當(dāng)?shù)谝粋€有序表中所有的元素都小于(或大于)第二個表中的元素,只需要用第二個表中的第一個元素依次與第一個表的元素比較,總計比較n次。

(9)在一個長度為n的順序表中,在第i個元素(1≤i≤n+1)之前插入一個新元素時須向后移動(?? )個元素。

A.n-i ??????????B.n-i+1? ?????C.n-i-1 ?????D.I

答案:B

(10) 線性表L=(a1,a2,……an),下列說法正確的是(?? )。

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

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

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

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

答案:D

(11) 創(chuàng)建一個包括n個結(jié)點的有序單鏈表的時間復(fù)雜度是(??? )。

A.O(1) ?????????B.O(n)?? ?????????C.O(n2) ?????????D.O(nlog2n)

答案:C

解釋:單鏈表創(chuàng)建的時間復(fù)雜度是O(n),而要建立一個有序的單鏈表,則每生成一個新結(jié)點時需要和已有的結(jié)點進(jìn)行比較,確定合適的插入位置,所以時間復(fù)雜度是O(n2)。

(12) 以下說法錯誤的是(?? )。????????????????????????????????????????????

A.求表長、定位這兩種運算在采用順序存儲結(jié)構(gòu)時實現(xiàn)的效率不比采用鏈?zhǔn)酱鎯Y(jié)構(gòu)時實現(xiàn)的效率低

B.順序存儲的線性表可以隨機(jī)存取

C.由于順序存儲要求連續(xù)的存儲區(qū)域,所以在存儲管理上不夠靈活

D.線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)優(yōu)于順序存儲結(jié)構(gòu)????????????????

答案:D

解釋:鏈?zhǔn)酱鎯Y(jié)構(gòu)和順序存儲結(jié)構(gòu)各有優(yōu)缺點,有不同的適用場合。

(13) 在單鏈表中,要將s所指結(jié)點插入到p所指結(jié)點之后,其語句應(yīng)為(?? )。

A.s->next=p+1; p->next=s;

B.(*p).next=s; (*s).next=(*p).next;

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

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

答案:D

?(14) 在雙向鏈表存儲結(jié)構(gòu)中,刪除p所指的結(jié)點時須修改指針(?? )。

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

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

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

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

答案:A

(15) 在雙向循環(huán)鏈表中,在p指針?biāo)傅慕Y(jié)點后插入q所指向的新結(jié)點,其修改指針的操作是(?? )。

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->prior=p; q->next=p->next; p->next=q; p->next->prior=q;

答案:C

2.算法設(shè)計題

(1)將兩個遞增的有序鏈表合并為一個遞增的有序鏈表。要求結(jié)果鏈表仍使用原來兩個鏈表的存儲空間, 不另外占用其它的存儲空間。表中不允許有重復(fù)的數(shù)據(jù)。

[題目分析]

合并后的新表使用頭指針Lc指向,pa和pb分別是鏈表La和Lb的工作指針,初始化為相應(yīng)鏈表的第一個結(jié)點,從第一個結(jié)點開始進(jìn)行比較,當(dāng)兩個鏈表La和Lb均為到達(dá)表尾結(jié)點時,依次摘取其中較小者重新鏈接在Lc表的最后。如果兩個表中的元素相等,只摘取La表中的元素,刪除Lb表中的元素,這樣確保合并后表中無重復(fù)的元素。當(dāng)一個表到達(dá)表尾結(jié)點,為空時,將非空表的剩余元素直接鏈接在Lc表的最后。

[算法描述]

void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc)

{//合并鏈表La和Lb,合并后的新表使用頭指針Lc指向

??pa=La->next;? pb=Lb->next;???

?? //pa和pb分別是鏈表La和Lb的工作指針,初始化為相應(yīng)鏈表的第一個結(jié)點

?? Lc=pc=La;? //用La的頭結(jié)點作為Lc的頭結(jié)點

?? while(pa && pb)

{if(pa->data<pb->data){pc->next=pa;pc=pa;pa=pa->next;}

??? ?//取較小者La中的元素,將pa鏈接在pc的后面,pa指針后移

???? else if(pa->data>pb->data) {pc->next=pb; pc=pb; pb=pb->next;}

????? //取較小者Lb中的元素,將pb鏈接在pc的后面,pb指針后移

???? else //相等時取La中的元素,刪除Lb中的元素

{pc->next=pa;pc=pa;pa=pa->next;

????? q=pb->next;delete pb ;pb =q;

}

?? ??}

?pc->next=pa?pa:pb;??? //插入剩余段

?? ??delete Lb;??????????? //釋放Lb的頭結(jié)點

}?

(2)將兩個非遞減的有序鏈表合并為一個非遞增的有序鏈表。要求結(jié)果鏈表仍使用原來兩個鏈表的存儲空間, 不另外占用其它的存儲空間。表中允許有重復(fù)的數(shù)據(jù)。

[題目分析]

合并后的新表使用頭指針Lc指向,pa和pb分別是鏈表La和Lb的工作指針,初始化為相應(yīng)鏈表的第一個結(jié)點,從第一個結(jié)點開始進(jìn)行比較,當(dāng)兩個鏈表La和Lb均為到達(dá)表尾結(jié)點時,依次摘取其中較小者重新鏈接在Lc表的表頭結(jié)點之后,如果兩個表中的元素相等,只摘取La表中的元素,保留Lb表中的元素。當(dāng)一個表到達(dá)表尾結(jié)點,為空時,將非空表的剩余元素依次摘取,鏈接在Lc表的表頭結(jié)點之后。

[算法描述]

void MergeList(LinkList& La, LinkList& Lb, LinkList& Lc, )

{//合并鏈表La和Lb,合并后的新表使用頭指針Lc指向

? pa=La->next;? pb=Lb->next;

//pa和pb分別是鏈表La和Lb的工作指針,初始化為相應(yīng)鏈表的第一個結(jié)點

? Lc=pc=La; //用La的頭結(jié)點作為Lc的頭結(jié)點

? Lc->next=NULL;

? while(pa||pb )

{//只要存在一個非空表,用q指向待摘取的元素

??? if(!pa)? {q=pb;? pb=pb->next;}

//La表為空,用q指向pb,pb指針后移

??? else if(!pb)? {q=pa;? pa=pa->next;}

//Lb表為空,用q指向pa,pa指針后移

??? else if(pa->data<=pb->data)? {q=pa;? pa=pa->next;}

//取較小者(包括相等)La中的元素,用q指向pa,pa指針后移

??? else {q=pb;? pb=pb->next;}

//取較小者Lb中的元素,用q指向pb,pb指針后移

???? q->next = Lc->next;? Lc->next = q;??

//將q指向的結(jié)點插在Lc 表的表頭結(jié)點之后

? ??}

? ??delete Lb;???????????? //釋放Lb的頭結(jié)點

}??

?

(3)已知兩個鏈表A和B分別表示兩個集合,其元素遞增排列。請設(shè)計算法求出A與B的交集,并存放于A鏈表中。

[題目分析]

只有同時出現(xiàn)在兩集合中的元素才出現(xiàn)在結(jié)果表中,合并后的新表使用頭指針Lc指向。pa和pb分別是鏈表La和Lb的工作指針,初始化為相應(yīng)鏈表的第一個結(jié)點,從第一個結(jié)點開始進(jìn)行比較,當(dāng)兩個鏈表La和Lb均為到達(dá)表尾結(jié)點時,如果兩個表中相等的元素時,摘取La表中的元素,刪除Lb表中的元素;如果其中一個表中的元素較小時,刪除此表中較小的元素,此表的工作指針后移。當(dāng)鏈表La和Lb有一個到達(dá)表尾結(jié)點,為空時,依次刪除另一個非空表中的所有元素。

[算法描述]

void Mix(LinkList& La, LinkList& Lb, LinkList& Lc)

{? pa=La->next;pb=Lb->next;

pa和pb分別是鏈表La和Lb的工作指針,初始化為相應(yīng)鏈表的第一個結(jié)點

Lc=pc=La; //用La的頭結(jié)點作為Lc的頭結(jié)點

while(pa&&pb)

{ if(pa->data==pb->data)∥交集并入結(jié)果表中。

?? { pc->next=pa;pc=pa;pa=pa->next;

???? u=pb;pb=pb->next; delete u;}

??else if(pa->data<pb->data) {u=pa;pa=pa->next; delete u;}

else {u=pb; pb=pb->next; delete u;}

}

while(pa) {u=pa; pa=pa->next; delete u;}∥ 釋放結(jié)點空間

while(pb) {u=pb; pb=pb->next; delete u;}∥釋放結(jié)點空間

pc->next=null;∥置鏈表尾標(biāo)記。

delete Lb;? //釋放Lb的頭結(jié)點

?? }

(4)已知兩個鏈表A和B分別表示兩個集合,其元素遞增排列。請設(shè)計算法求出兩個集合A和B 的差集(即僅由在A中出現(xiàn)而不在B中出現(xiàn)的元素所構(gòu)成的集合),并以同樣的形式存儲,同時返回該集合的元素個數(shù)。

[題目分析]

求兩個集合A和B的差集是指在A中刪除A和B中共有的元素,即刪除鏈表中的相應(yīng)結(jié)點,所以要保存待刪除結(jié)點的前驅(qū),使用指針pre指向前驅(qū)結(jié)點。pa和pb分別是鏈表La和Lb的工作指針,初始化為相應(yīng)鏈表的第一個結(jié)點,從第一個結(jié)點開始進(jìn)行比較,當(dāng)兩個鏈表La和Lb均為到達(dá)表尾結(jié)點時,如果La表中的元素小于Lb表中的元素,pre置為La表的工作指針pa刪除Lb表中的元素;如果其中一個表中的元素較小時,刪除此表中較小的元素,此表的工作指針后移。當(dāng)鏈表La和Lb有一個為空時,依次刪除另一個非空表中的所有元素。

[算法描述]

void Difference(LinkList& La, LinkList& Lb,int *n)

{∥差集的結(jié)果存儲于單鏈表La中,*n是結(jié)果集合中元素個數(shù),調(diào)用時為0

pa=La->next; pb=Lb->next;?????

∥pa和pb分別是鏈表La和Lb的工作指針,初始化為相應(yīng)鏈表的第一個結(jié)點

? pre=La;????????? ∥pre為La中pa所指結(jié)點的前驅(qū)結(jié)點的指針

??while(pa&&pb)

{if(pa->data<q->data){pre=pa;pa=pa->next;*n++;}

∥ A鏈表中當(dāng)前結(jié)點指針后移

else if(pa->data>q->data)q=q->next;???? ∥B鏈表中當(dāng)前結(jié)點指針后移

?? ?else {pre->next=pa->next;????? ∥處理A,B中元素值相同的結(jié)點,應(yīng)刪除

????????? u=pa; pa=pa->next; delete u;}?? ∥刪除結(jié)點

}

}

(5)設(shè)計算法將一個帶頭結(jié)點的單鏈表A分解為兩個具有相同結(jié)構(gòu)的鏈表B、C,其中B表的結(jié)點為A表中值小于零的結(jié)點,而C表的結(jié)點為A表中值大于零的結(jié)點(鏈表A中的元素為非零整數(shù),要求B、C表利用A表的結(jié)點)。

[題目分析]

B表的頭結(jié)點使用原來A表的頭結(jié)點,為C表新申請一個頭結(jié)點。從A表的第一個結(jié)點開始,依次取其每個結(jié)點p,判斷結(jié)點p的值是否小于0,利用前插法,將小于0的結(jié)點插入B表,大于等于0的結(jié)點插入C表。

[算法描述]

void DisCompose(LinkedList A)

{ ??B=A;

B->next= NULL;??? ∥B表初始化

?? ??C=new LNode;∥為C申請結(jié)點空間

???? C->next=NULL;???? ∥C初始化為空表

???? p=A->next;?????? ?∥p為工作指針

???? while(p!= NULL)

??? ?{ r=p->next;??? ??∥暫存p的后繼

?????? if(p->data<0)

????? ??{p->next=B->next; B->next=p; }∥將小于0的結(jié)點鏈入B表,前插法

?????? else {p->next=C->next; C->next=p; }∥將大于等于0的結(jié)點鏈入C表,前插法

?????? p=r;∥p指向新的待處理結(jié)點。

???? }

}

第3章? 棧和隊列

1.選擇題

(1)若讓元素1,2,3,4,5依次進(jìn)棧,則出棧次序不可能出現(xiàn)在(? )種情況。

A.5,4,3,2,1?? B.2,1,5,4,3?? ?C.4,3,1,2,5 ???D.2,3,5,4,1

答案:C

解釋:棧是后進(jìn)先出的線性表,不難發(fā)現(xiàn)C選項中元素1比元素2先出棧,違背了棧的后進(jìn)先出原則,所以不可能出現(xiàn)C選項所示的情況。

(2)若已知一個棧的入棧序列是1,2,3,…,n,其輸出序列為p1,p2,p3,…,pn,若p1=n,則pi為(? )。

A.i?????????????? B.n-i????????????? ?C.n-i+1??????????? D.不確定

答案:C

解釋:棧是后進(jìn)先出的線性表,一個棧的入棧序列是1,2,3,…,n,而輸出序列的第一個元素為n,說明1,2,3,…,n一次性全部進(jìn)棧,再進(jìn)行輸出,所以p1=n,p2=n-1,…,pi=n-i+1。

(3)數(shù)組Q[n]用來表示一個循環(huán)隊列,f為當(dāng)前隊列頭元素的前一位置,r為隊尾元素的位置,假定隊列中元素的個數(shù)小于n,計算隊列中元素個數(shù)的公式為(? )。

A.r-f???????????? B.(n+f-r)%n?????? C.n+r-f?????????? D.(n+r-f)%n

答案:D

解釋:對于非循環(huán)隊列,尾指針和頭指針的差值便是隊列的長度,而對于循環(huán)隊列,差值可能為負(fù)數(shù),所以需要將差值加上MAXSIZE(本題為n),然后與MAXSIZE(本題為n)求余,即(n+r-f)%n。

(4)鏈?zhǔn)綏=Y(jié)點為:(data,link),top指向棧頂.若想摘除棧頂結(jié)點,并將刪除結(jié)點的值保存到x中,則應(yīng)執(zhí)行操作(? )。

A.x=top->data;top=top->link;? ? ???? ??B.top=top->link;x=top->link;???

C.x=top;top=top->link;??????????? ????? D.x=top->link;

答案:A

解釋:x=top->data將結(jié)點的值保存到x中,top=top->link棧頂指針指向棧頂下一結(jié)點,即摘除棧頂結(jié)點。

(5)設(shè)有一個遞歸算法如下

??? ??? int fact(int n) {? //n大于等于0

??? ???????? if(n<=0) return 1;

??? ???????? else return n*fact(n-1);??? ??? }

則計算fact(n)需要調(diào)用該函數(shù)的次數(shù)為(? )。?

A.?n+1??? ????????? B.?n-1????????????? C. n??????????????? ??D. n+2

答案:A

解釋:特殊值法。設(shè)n=0,易知僅調(diào)用一次fact(n)函數(shù),故選A。

(6)棧在?(? )中有所應(yīng)用。

A.遞歸調(diào)用? ?????B.函數(shù)調(diào)用 ?????C.表達(dá)式求值??? ????D.前三個選項都有

答案:D

解釋:遞歸調(diào)用、函數(shù)調(diào)用、表達(dá)式求值均用到了棧的后進(jìn)先出性質(zhì)。

(7)為解決計算機(jī)主機(jī)與打印機(jī)間速度不匹配問題,通常設(shè)一個打印數(shù)據(jù)緩沖區(qū)。主機(jī)將要輸出的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機(jī)則依次從該緩沖區(qū)中取出數(shù)據(jù)。該緩沖區(qū)的邏輯結(jié)構(gòu)應(yīng)該是(? )。

A.隊列 ??????????B.棧??????????? C. 線性表?????????? D.有序表

答案:A

解釋:解決緩沖區(qū)問題應(yīng)利用一種先進(jìn)先出的線性表,而隊列正是一種先進(jìn)先出的線性表。

(8)設(shè)棧S和隊列Q的初始狀態(tài)為空,元素e1、e2、e3、e4、e5和e6依次進(jìn)入棧S,一個元素出棧后即進(jìn)入Q,若6個元素出隊的序列是e2、e4、e3、e6、e5和e1,則棧S的容量至少應(yīng)該是(?。?。

A.2???????????? ?B.3? ????????????C.4??????????????? D. 6

答案:B

解釋:元素出隊的序列是e2、e4、e3、e6、e5和e1,可知元素入隊的序列是e2、e4、e3、e6、e5和e1,即元素出棧的序列也是e2、e4、e3、e6、e5和e1,而元素e1、e2、e3、e4、e5和e6依次進(jìn)入棧,易知棧S中最多同時存在3個元素,故棧S的容量至少為3。

(9)若一個棧以向量V[1..n]存儲,初始棧頂指針top設(shè)為n+1,則元素x進(jìn)棧的正確操作是(??? )。

A.top++; V[top]=x; ??????????????? B.V[top]=x; top++;

C.top--; V[top]=x; ??????????????? D.V[top]=x; top--;

答案:C

解釋:初始棧頂指針top為n+1,說明元素從數(shù)組向量的高端地址進(jìn)棧,又因為元素存儲在向量空間V[1..n]中,所以進(jìn)棧時top指針先下移變?yōu)閚,之后將元素x存儲在V[n]。

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

A.線性表的順序存儲結(jié)構(gòu)??? ??????????B.隊列????

C. 線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)?? ???????????D. 棧

答案:D

解釋:利用棧的后進(jìn)先出原則。

(11)用鏈接方式存儲的隊列,在進(jìn)行刪除運算時(?。?。

A. 僅修改頭指針?????????????????? ???B. 僅修改尾指針

C. 頭、尾指針都要修改? ??????????????D. 頭、尾指針可能都要修改

答案:D

解釋:一般情況下只修改頭指針,但是,當(dāng)刪除的是隊列中最后一個元素時,隊尾指針也丟失了,因此需對隊尾指針重新賦值。

(12)循環(huán)隊列存儲在數(shù)組A[0..m]中,則入隊時的操作為( )。

A. rear=rear+1???????????? ??????????B. rear=(rear+1)%(m-1)

? C. rear=(rear+1)%m??????????? ???????D. rear=(rear+1)%(m+1)

答案:D

解釋:數(shù)組A[0..m]中共含有m+1個元素,故在求模運算時應(yīng)除以m+1。

(13)最大容量為n的循環(huán)隊列,隊尾指針是rear,隊頭是front,則隊空的條件是( )。

? A. (rear+1)%n==front???????????????? ?B. rear==front ?????????????????????????????????????????????????????????

C.rear+1==front? ????????????????????D. (rear-l)%n==front

答案:B

解釋:最大容量為n的循環(huán)隊列,隊滿條件是(rear+1)%n==front,隊空條件是rear==front。

(14)棧和隊列的共同點是( )。

A. 都是先進(jìn)先出?????????????????????? B. 都是先進(jìn)后出??

C. 只允許在端點處插入和刪除元素?????? D. 沒有共同點

答案:C

解釋:棧只允許在棧頂處進(jìn)行插入和刪除元素,隊列只允許在隊尾插入元素和在隊頭刪除元素。

(15)一個遞歸算法必須包括(?。?/p>

A. 遞歸部分????? ?????????????????????B. 終止條件和遞歸部分

C. 迭代部分??? ???????????????????????D. 終止條件和迭代部分

答案:B

?

?

(5)假設(shè)以I和O分別表示入棧和出棧操作。棧的初態(tài)和終態(tài)均為空,入棧和出棧的操作序列可表示為僅由I和O組成的序列,稱可以操作的序列為合法序列,否則稱為非法序列。

①下面所示的序列中哪些是合法的?

?? A. IOIIOIOO???? B. IOOIOIIO????? C. IIIOIOIO???? D. IIIOOIOO

②通過對①的分析,寫出一個算法,判定所給的操作序列是否合法。若合法,返回true,否則返回false(假定被判定的操作序列已存入一維數(shù)組中)。

答案:

①A和D是合法序列,B和C 是非法序列。

第4章? 串、數(shù)組和廣義表

1.選擇題

(1)串是一種特殊的線性表,其特殊性體現(xiàn)在(? )。

? A.可以順序存儲?????????????? B.?dāng)?shù)據(jù)元素是一個字符?????

C.可以鏈?zhǔn)酱鎯?????????????? D.?dāng)?shù)據(jù)元素可以是多個字符若

答案:B

(2)串下面關(guān)于串的的敘述中,(? )是不正確的?

A.串是字符的有限序列?????? ???B.空串是由空格構(gòu)成的串

C.模式匹配是串的一種重要運算? D.串既可以采用順序存儲,也可以采用鏈?zhǔn)酱鎯?/p>

答案:B

解釋:空格常常是串的字符集合中的一個元素,有一個或多個空格組成的串成為空格串,零個字符的串成為空串,其長度為零。

(3)串“ababaaababaa”的next數(shù)組為(? )。

A.012345678999?? B.012121111212 ??C.011234223456??? D.0123012322345

答案:C

(4)串“ababaabab”的nextval為(? )。

A.010104101??? ??B.010102101????? C.010100011?????? D.010101011

答案:A

(5)串的長度是指(? )。

A.串中所含不同字母的個數(shù)???? ??B.串中所含字符的個數(shù)

C.串中所含不同字符的個數(shù)???? ??D.串中所含非空格字符的個數(shù)

答案:B

解釋:串中字符的數(shù)目稱為串的長度。

(6)假設(shè)以行序為主序存儲二維數(shù)組A=array[1..100,1..100],設(shè)每個數(shù)據(jù)元素占2個存儲單元,基地址為10,則LOC[5,5]=(? )。

A.808????????? ??B.818 ????????????C.1010???????????? D.1020

答案:B

解釋:以行序為主,則LOC[5,5]=[(5-1)*100+(5-1)]*2+10=818。

(7)設(shè)有數(shù)組A[i,j],數(shù)組的每個元素長度為3字節(jié),i的值為1到8,j的值為1到10,數(shù)組從內(nèi)存首地址BA開始順序存放,當(dāng)用以列為主存放時,元素A[5,8]的存儲首地址為(? )。

A.BA+141? ??????B.BA+180? ???????C.BA+222???????? D.BA+225

答案:B

解釋:以列序為主,則LOC[5,8]=[(8-1)*8+(5-1)]*3+BA=BA+180。

(8)設(shè)有一個10階的對稱矩陣A,采用壓縮存儲方式,以行序為主存儲,a11為第一元素,其存儲地址為1,每個元素占一個地址空間,則a85的地址為(? )。

A.13????????? ???B.32 ?????????????C.33?????????????? D.40

答案:C

(9)若對n階對稱矩陣A以行序為主序方式將其下三角形的元素(包括主對角線上所有元素)依次存放于一維數(shù)組B[1..(n(n+1))/2]中,則在B中確定aij(i<j)的位置k的關(guān)系為(? )。

A.i*(i-1)/2+j?? ???B.j*(j-1)/2+i ?????C.i*(i+1)/2+j? ????D.j*(j+1)/2+i

答案:B

(10)二維數(shù)組A的每個元素是由10個字符組成的串,其行下標(biāo)i=0,1,…,8,列下標(biāo)j=1,2,…,10。若A按行先存儲,元素A[8,5]的起始地址與當(dāng)A按列先存儲時的元素(??? )的起始地址相同。設(shè)每個字符占一個字節(jié)。

A.A[8,5]?? ??????B.A[3,10]?? ??????C. A[5,8]???????? ?D.A[0,9]

答案:B

解釋:設(shè)數(shù)組從內(nèi)存首地址M開始順序存放,若數(shù)組按行先存儲,元素A[8,5]的起始地址為:M+[(8-0)*10+(5-1)]*1=M+84;若數(shù)組按列先存儲,易計算出元素A[3,10]的起始地址為:M+[(10-1)*9+(3-0)]*1=M+84。故選B。

(11)設(shè)二維數(shù)組A[1.. m,1.. n](即m行n列)按行存儲在數(shù)組B[1.. m*n]中,則二維數(shù)組元素A[i,j]在一維數(shù)組B中的下標(biāo)為(? )。

A.(i-1)*n+j? ?????B.(i-1)*n+j-1??? ??C.i*(j-1)???? ????D.j*m+i-1

答案:A

解釋:特殊值法。取i=j=1,易知A[1,1]的的下標(biāo)為1,四個選項中僅有A選項能確定的值為1,故選A。

(12)數(shù)組A[0..4,-1..-3,5..7]中含有元素的個數(shù)(? )。

A.55???????? ???B.45 ????????????C.36???????? ???D.16

答案:B

解釋:共有5*3*3=45個元素。

(13)廣義表A=(a,b,(c,d),(e,(f,g))),則Head(Tail(Head(Tail(Tail(A)))))的值為(? )。

A.(g)??????????? B.(d)???????????? C.c????????? ??D.d

答案:D

解釋:Tail(A)=(b,(c,d),(e,(f,g)));Tail(Tail(A))=( (c,d),(e,(f,g))); Head(Tail(Tail(A)))= (c,d);Tail(Head(Tail(Tail(A))))=(d);Head(Tail(Head(Tail(Tail(A)))))=d。

(14)廣義表((a,b,c,d))的表頭是(? ),表尾是(? )。

A.a(chǎn)????????? ????B.( )???????????? C.(a,b,c,d)? ????D.(b,c,d)

答案:C、B

解釋:表頭為非空廣義表的第一個元素,可以是一個單原子,也可以是一個子表,((a,b,c,d))的表頭為一個子表(a,b,c,d);表尾為除去表頭之外,由其余元素構(gòu)成的表,表為一定是個廣義表,((a,b,c,d))的表尾為空表( )。

(15)設(shè)廣義表L=((a,b,c)),則L的長度和深度分別為(? )。

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

答案:C

解釋:廣義表的深度是指廣義表中展開后所含括號的層數(shù),廣義表的長度是指廣義表中所含元素的個數(shù)。根據(jù)定義易知L的長度為1,深度為2。

?


數(shù)據(jù)2的評論 (共 條)

分享到微博請遵守國家法律
灵川县| 廊坊市| 奇台县| 新平| 富宁县| 余姚市| 东乌珠穆沁旗| 宜兰市| 延庆县| 灌南县| 岳阳县| 南康市| 观塘区| 洛阳市| 锡林浩特市| 定西市| 安陆市| 藁城市| 青川县| 溧水县| 师宗县| 安宁市| 阿克苏市| 杭锦旗| 凤台县| 合肥市| 汤阴县| 冕宁县| 时尚| 二连浩特市| 高阳县| 平乡县| 米林县| 澜沧| 石门县| 右玉县| 澄迈县| 宁化县| 弋阳县| 玉环县| 利川市|