




版權(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)及其基本
操作
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.確定性、有窮性和穩(wěn)定性D.易讀性、穩(wěn)定性和確定性
5、下面程序段的時(shí)間復(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ì)算機(jī)程序B.解決問(wèn)題的計(jì)算方法
C.排序算法D.解決問(wèn)題的有限運(yùn)算序列
7、某算法的語(yǔ)句執(zhí)行頻度為(3n+nlog2n+n2+8),其時(shí)間復(fù)雜度表示(C\
A.0(n)B.O(nlog2n)C.0(n2)D.O(log2n)
8、下面程序段的時(shí)間復(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ù)值計(jì)算的程序設(shè)計(jì)問(wèn)題中計(jì)算機(jī)的數(shù)據(jù)元素以及它們之
間的(B)和運(yùn)算等的學(xué)科。
A.結(jié)構(gòu)B.關(guān)系C.運(yùn)算D.算法
10、下面程序段的時(shí)間復(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ù)類型的三個(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ù)類型D.數(shù)據(jù)元素、數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型
12、通常從正確性、易讀性、健壯性、高效性等4個(gè)方面評(píng)價(jià)算法的質(zhì)量,以下解釋
錯(cuò)誤的是(A卜
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=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;”的時(shí)間復(fù)雜度為O(log2n)。
2、數(shù)據(jù)結(jié)構(gòu)的四種基本類型中,樹(shù)形結(jié)構(gòu)的元素是一對(duì)多關(guān)系。
三、綜合題
1、將數(shù)量級(jí)。⑴,O(N),O(N2)Q(N3),O(NLOG2N),O(LOG2N),O(2N)按增長(zhǎng)率由小到大
排序。
3
3N
答案:0(1)<O(log2N)<0(N)<O(Nlog2N)<0怦)<0(N)<0(2)
第二章線性表
一、選擇題
1、若長(zhǎng)度為n的線性表采用順序存儲(chǔ)結(jié)構(gòu),在其第i個(gè)位置插入一個(gè)新元素算法的
時(shí)間復(fù)雜度(C卜
2
A.O(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卜
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)酱鎯?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.O(n2)D.O(n-1)
13、線性表L=(a1,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è)元
5
素的存儲(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->next=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.O(n)C.O(m)D.O(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-1)/2B.nC.n+1D.(n+1)/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為空的判定條件是(Ab
A.head==NULL
B.head->next==NULL(帶頭結(jié)點(diǎn)判定條件)
6
C.head->next==head(循環(huán)鏈表判定條件)
D.head!=NULL
12、在下列對(duì)順序表進(jìn)行的操作中,算法時(shí)間復(fù)雜度為0(1)的是(A卜
A.訪問(wèn)第i個(gè)元素的前驅(qū)(1<i<n)B.在第i個(gè)元素之后插入一個(gè)新元素
(I<i<n)
C.刪除第i個(gè)元素(14i《n)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-1)/2B.n/2C.(n+1)/2D.n
16、在一個(gè)單鏈表中,已知q所指結(jié)點(diǎn)是p所指結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn),若在q和p之間
插入一個(gè)結(jié)點(diǎn)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é)點(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,貝U(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,nextb已知指針p指向單鏈表中的結(jié)點(diǎn),q指向新
結(jié)點(diǎn),欲將q插入到p結(jié)點(diǎn)之后,則需要執(zhí)行的語(yǔ)句:q->next=p->next;
p->next=q。
答案:q->next=p->nextp->next=q
2、線性表的邏輯結(jié)構(gòu)是線性結(jié)構(gòu),其所含元素的個(gè)數(shù)稱為線性表的—殳
度O
答案:線性結(jié)構(gòu)長(zhǎng)度
8
3、寫出帶頭結(jié)點(diǎn)的雙向循環(huán)鏈表L為空表的條件
答案:L->prior==L->next==L
4、帶頭結(jié)點(diǎn)的單鏈表head為空的條件是o
答案:head->next==NULL
5、在一個(gè)單鏈表中刪除p所指結(jié)點(diǎn)的后繼結(jié)點(diǎn)時(shí),應(yīng)執(zhí)行以下操作:
q=p->next;
p->next=q->next:
三、判斷題
1、單鏈表不是一種隨機(jī)存儲(chǔ)結(jié)構(gòu)。對(duì)
2、在具有頭結(jié)點(diǎn)的單鏈表中,頭指針指向鏈表的第一個(gè)數(shù)據(jù)結(jié)點(diǎn)。錯(cuò)
3、用循環(huán)單鏈表表示的鏈隊(duì)列中,可以不設(shè)隊(duì)頭指針,僅在隊(duì)尾設(shè)置隊(duì)尾指針。對(duì)
4、順序存儲(chǔ)方式只能用于存儲(chǔ)線性結(jié)構(gòu)。錯(cuò)
5、在線性表的順序存儲(chǔ)結(jié)構(gòu)中,邏輯上相鄰的兩個(gè)元素但是在物理位置上不一定是
相鄰的。錯(cuò)
6、鏈?zhǔn)酱鎯?chǔ)的線性表可以隨機(jī)存取。錯(cuò)
四、程序分析填空題
1、函數(shù)GetElem實(shí)現(xiàn)返回單鏈表的第i個(gè)元素,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。
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ù)實(shí)現(xiàn)單鏈表的插入算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。
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;
⑴_(tái)_________;
(2)_________;
returnOK;
}/*Listlnsert*/
io
答案:(1)s->next=p->next(2)p->next=s
3、函數(shù)ListDelete_sq實(shí)現(xiàn)順序表刪除算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。
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ù)實(shí)現(xiàn)單鏈表的刪除算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。
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的長(zhǎng)度
五、綜合題
12
1、編寫算法,實(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,要求寫出算法將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è)一個(gè)帶頭結(jié)點(diǎn)的單向鏈表的頭指針為head,設(shè)計(jì)算法,將鏈表的記錄,按照
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、編寫算法,將一個(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è)
14
結(jié)點(diǎn)上(算法中的while循環(huán)),所以該算法的時(shí)間復(fù)雜度為0(Nb
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=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é)點(diǎn)位置的元素值寫入順序表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è)線性表采用順序存儲(chǔ)結(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、已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲(chǔ)結(jié)構(gòu)。試寫一算法,
刪除表中所有大于x且小于y的元素(若表中存在這樣的元素)同時(shí)釋放被刪除結(jié)點(diǎn)
空間。
答案:
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é)點(diǎn)的循環(huán)鏈表L中,結(jié)點(diǎn)的數(shù)據(jù)元素為整型,且按值遞增有序存放。給
定兩個(gè)整數(shù)a和b,且a〈b,編寫算法刪除鏈表L中元素值大于a且小于b的所有結(jié)
八占、、O
第三章棧和隊(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卜
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è)計(jì)一個(gè)判別表達(dá)式中括號(hào)是否配對(duì)的算法,采用(D)數(shù)據(jù)結(jié)構(gòu)最佳。
A.順序表B.鏈表C.隊(duì)列D.棧
4、帶頭結(jié)點(diǎn)的單鏈表head為空的判定條件是(B卜
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+1
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\
19
A.abcd+-B.abc+*d-C.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é)車廂以編號(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ì)序列是(A卜
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卜
20
A.aB.bC.cD.d
18、正常情況下,刪除非空的順序存儲(chǔ)結(jié)構(gòu)的堆棧的棧頂元素,棧頂指針top的變化
是(D卜
A.top不變B.top=0C.top=top+1D.top=top-1
19、判斷一個(gè)循環(huán)隊(duì)列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è)計(jì)一個(gè)判別表達(dá)式中左右括號(hào)是否配對(duì)出現(xiàn)的算法,采用(C)數(shù)據(jù)結(jié)構(gòu)
最佳。
A.線性表的順序存儲(chǔ)結(jié)構(gòu)B.隊(duì)列C.棧D,線性表的鏈?zhǔn)酱?/p>
儲(chǔ)結(jié)構(gòu)
21、當(dāng)用大小為N的數(shù)組存儲(chǔ)順序循環(huán)隊(duì)列時(shí),該隊(duì)列的最大長(zhǎng)度為(Ab?
A.NB.N+1C.N-1D.N-2
22、隊(duì)列的刪除操作是在(A卜
A.隊(duì)首B.隊(duì)尾C.隊(duì)前D.隊(duì)后
23、若讓元素1,2,3依次進(jìn)棧,則出棧次序不可能是(C卜
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卜
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ù)緩沖
21
區(qū),主機(jī)將要輸出的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機(jī)則從該緩沖區(qū)中取走數(shù)據(jù)打印。
該緩沖區(qū)應(yīng)該是一個(gè)(B)結(jié)構(gòu)。
A.堆棧B.隊(duì)列C.數(shù)組D.線性表
26、棧和隊(duì)列都是(C卜
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卜
A.front=front->nextB.rear=rear->next
C.rear->next=frontD.front->next=rear
28、隊(duì)和棧的主要區(qū)別是(D卜
A.邏輯結(jié)構(gòu)不同B.存儲(chǔ)結(jié)構(gòu)不同
C.所包含的運(yùn)算個(gè)數(shù)不同D.限定插入和刪除的位置不同
二、填空題
1、設(shè)棧S和隊(duì)列Q的初始狀態(tài)為空,元素6162£3£4?5£6依次通過(guò)棧$,一個(gè)元素
出棧后即進(jìn)入隊(duì)列Q,若6個(gè)元素出隊(duì)的序列是e2,e4,e3,e6,e5,e1,則棧的容量至少
應(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。
答案:(rear-front+M)%M
22
3、在具有n個(gè)元素的循環(huán)隊(duì)列中,隊(duì)滿時(shí)具有n-1個(gè)元素。
答案:n-1
4、設(shè)循環(huán)隊(duì)列的容量為70,現(xiàn)經(jīng)過(guò)一系列的入隊(duì)和出隊(duì)操作后,front為20,rear為
11,則隊(duì)列中元素的個(gè)數(shù)為61。
答案:61
5、已知循環(huán)隊(duì)列的存儲(chǔ)空間大小為20,且當(dāng)前隊(duì)列的頭指針和尾指針的值分別為8
和3,且該隊(duì)列的當(dāng)前的長(zhǎng)度為―15―o
三、判斷題
1、棧和隊(duì)列都是受限的線性結(jié)構(gòu)。對(duì)
2、在單鏈表中,要訪問(wèn)某個(gè)結(jié)點(diǎn),只要知道該結(jié)點(diǎn)的地址即可;因此,單鏈表是一
種隨機(jī)存取結(jié)構(gòu)。錯(cuò)
3、以鏈表作為棧的存儲(chǔ)結(jié)構(gòu),出棧操作必須判別??盏那闆r。對(duì)
四、程序分析填空題
1、已知棧的基本操作函數(shù):
intlnitStack(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);
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)隊(duì)列出隊(duì)操作
3、閱讀算法f2,并回答下列問(wèn)題:
(1)設(shè)隊(duì)列Q=(1,3,5,2,4,6b寫出執(zhí)行算法f2后的隊(duì)列Q;
24
(2)簡(jiǎn)述算法f2的功能。
voidf2(Queue*Q){
DataTypee;
if(!QueueEmpty(Q)){
e=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)寫出相應(yīng)的入隊(duì)列算法(用函數(shù)實(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是一個(gè)非空隊(duì)列,S是一個(gè)空棧。編寫算法,僅用隊(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ì)空
答案: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、對(duì)于一個(gè)棧,給出輸入項(xiàng)A,B,C,D,如果輸入項(xiàng)序列為A,B,C,D,試給出全部可
能的輸出序列。
答案:出棧的可能序列:
ABCDABDCACDBACBDADCBBACDBADCBCADBCDA
CBDACBADCDBADCBA
第四章串
一、選擇題
1、設(shè)有兩個(gè)串S1和S2,求串S2在S1中首次出現(xiàn)位置的運(yùn)算稱作(C卜
A.連接B.求子串C.模式匹配D.判斷子串
2、已知串S='aaab',貝hext數(shù)組值為(A卜
A.0123B.1123C.1231D.1211
3、串與普通的線性表相比較,它的特殊性體現(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(nlog2m)
5、空串和空格串(B卜
A.相同B.不相同C.可能相同D.無(wú)法確定
6、與線性表相比,串的插入和刪除操作的特點(diǎn)是(A卜
A.通常以串整體作為操作對(duì)象B.需要更多的輔助空間
C.算法的時(shí)間復(fù)雜度較高D.涉及移動(dòng)的元素更多
27
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'
二、判斷題
(對(duì))1、造成簡(jiǎn)單模式匹配算法BF算法執(zhí)行效率低的原因是有回溯存在。
(V)2,KMP算法的最大特點(diǎn)是指示主串的指針不需要回溯。
(J)3、完全二叉樹(shù)某結(jié)點(diǎn)有右子樹(shù),則必然有左子樹(shù)。
三、填空題
1、求子串在主串中首次出現(xiàn)的位置的運(yùn)算稱為模式匹配。
2、設(shè)5='1口\1\?|—A^TEACHER',其長(zhǎng)度是_14_。
3、兩個(gè)串相等的充分必要條件是兩個(gè)串的長(zhǎng)度相等且對(duì)應(yīng)位置字符相同。
四、程序填空題
1、函數(shù)kmp實(shí)現(xiàn)串的模式匹配,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。
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ù)實(shí)現(xiàn)串的模式匹配算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。
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)),貝扎的長(zhǎng)度和深度分別為(C卜
30
A.1和1B.1和3C.1和2D.2和3
2、廣義表((a),a)的表尾是(B卜
A.aB.(a)C.()D.((a))
3、稀疏矩陣的常見(jiàn)壓縮存儲(chǔ)方法有(C)兩種。
A.二維數(shù)組和三維數(shù)組B.三元組和散列表
C.三元組和十字鏈表D.散列表和十字鏈表
4、一個(gè)非空廣義表的表頭(D卜
A.不可能是子表B,只能是子表
C.只能是原子D,可以是子表或原子
5、數(shù)組AQ.5Q..6]的每個(gè)元素占5個(gè)字節(jié),將其按列優(yōu)先次序存儲(chǔ)在起始地址為1000
的內(nèi)存單元中,則元素A[5北5]的地址是('
A.1175B.1180C.1205D.1210
6、廣義表6=但,1)94(6,1)),9)的長(zhǎng)度是(A卜
A.3B.4C.7D.8
7、采用稀疏矩陣的三元組表形式進(jìn)行壓縮存儲(chǔ),若要完成對(duì)三元組表進(jìn)行轉(zhuǎn)置,只
要將行和列對(duì)換,這種說(shuō)法(B卜
A.正確B.錯(cuò)誤C.無(wú)法確定D.以上均不對(duì)
8、廣義表(a,b,c)的表尾是(B卜
A.b,cB.(b,c)C.cD.(c)
9、常對(duì)數(shù)組進(jìn)行兩種基本操作是(C卜
A.建立和刪除B.索引和修改
C.查找和修改D.查找與索引
31
10、對(duì)一些特殊矩陣采用壓縮存儲(chǔ)的目的主要是為了(D卜
A.表達(dá)變得簡(jiǎn)單B.對(duì)矩陣元素的存取變得簡(jiǎn)單
C.去掉矩陣中的多余元素D.減少不必要的存儲(chǔ)空間的開(kāi)銷
11、設(shè)有一個(gè)10階的對(duì)稱矩陣A,采用壓縮存儲(chǔ)方式,以行序?yàn)橹鞔鎯?chǔ),a11為第一
個(gè)元素,其存儲(chǔ)地址為1,每元素占1個(gè)地址空間,貝以85的地址為(卜
A.13B.33C.18D.40
12、設(shè)矩陣A是一個(gè)對(duì)稱矩陣,為了節(jié)省存儲(chǔ),將其下三角部分按行序存放在一維數(shù)
組B[1,n(n-1)/2]中,對(duì)下三角部分中任一元素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、稀疏矩陣一般的壓縮存儲(chǔ)方法有兩種,即(C卜
A.二維數(shù)組和三維數(shù)組B.三元組和散列
C.三元組和十字鏈表D.散列和十字鏈表
15、假設(shè)以三元組表表示稀疏矩陣,則與如圖所示三元組表對(duì)應(yīng)的4x5的稀疏矩陣
是(注:矩陣的行列下標(biāo)均從1開(kāi)始)(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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游行業(yè)行程變動(dòng)及責(zé)任豁免協(xié)議書
- 電子支付平臺(tái)開(kāi)發(fā)與推廣合作協(xié)議
- 營(yíng)業(yè)辦公用房買賣協(xié)議書
- 中學(xué)生感恩教育故事觀后感
- 高考語(yǔ)文高頻文言實(shí)詞60詞表解
- 環(huán)保能源行業(yè)項(xiàng)目合作風(fēng)險(xiǎn)提示
- 高考語(yǔ)文備考之明朝作家文言文匯編(下)
- 購(gòu)銷家具合同家具購(gòu)銷合同
- 綠色農(nóng)業(yè)種植合同
- 裝修工程勞務(wù)外包合同
- 2019年四川省綿陽(yáng)市中考化學(xué)試卷
- 中國(guó)風(fēng)青花瓷陶瓷文化宣傳PPT模板
- 美麗鄉(xiāng)村規(guī)劃設(shè)計(jì)技術(shù)導(dǎo)則
- 課題成果要報(bào)格式和要求
- 經(jīng)銷商準(zhǔn)入及評(píng)定表格vr
- SF-36量表(簡(jiǎn)明健康狀況調(diào)查表)
- 主要河流南、北方河流的不同特征主要湖泊
- 上崗證WORD模板
- 2019第五版新版PFMEA 注塑實(shí)例
- 職業(yè)技能鑒定質(zhì)量督導(dǎo)報(bào)告
- 鈑金k因子和折彎扣除參照表
評(píng)論
0/150
提交評(píng)論