版權(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)及其基本操作(研
究非數(shù)值計算的程序設(shè)計問題中,計算機(jī)操作對象以及他們之間的關(guān)系和操作)
2、算法分析的兩個主要方面是(A)。
A.空間復(fù)雜度和時間復(fù)雜度B.正確性和簡單性
C.可讀性和文檔性D.數(shù)據(jù)復(fù)雜性和程序復(fù)雜性
3、具有線性結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)是(D)。(線性結(jié)構(gòu)就是:在非空有限集合中,存在為?個
被稱為第一個的數(shù)據(jù)元素和最后一個元素,有除了第一個元素,集合中每一個元素均只有一
個前驅(qū),除了最后一個元素有唯一后繼)(鏈表、棧、隊列、數(shù)組、串)
A.圖B.樹C.廣義表(線性表的推廣)D.棧
4、計算機(jī)中的算法指的是解決某一個問題的有限運(yùn)算序列,它必須具備輸入、輸出、(B)
等5個特性。
A.可執(zhí)行性、可移植性和可擴(kuò)充性B.可執(zhí)行性、有窮性和確定性
C.確定性、有窮性和穩(wěn)定性D.易讀性、穩(wěn)定性和確定性
5、下面程序段的時間復(fù)雜度是(C)。
for(i=O;i<m;i++)
for(j=0;j<n;j++)
A.O(m2)B.O(n2)C.O(m*n)D.O(m+n)
6、算法是(D)。為了解決某一問題而規(guī)定的一個有限長的操作序列
A.計算機(jī)程序B.解決問題的計算方法C.排序算法
D.解決問題的有限運(yùn)算序列
7、某算法的語句執(zhí)行頻度為(3n+nlog2n+d+8),其時間復(fù)雜度表示(C)。
A.O(n)B.O(nlog2n)C.?(n2)D.O(lo段n)
8、下面程序段的時間復(fù)雜度為(C)。
whilc(i<=n)
i=i*3;
A.O(n)B.O(3n)C.O(log,n)D.0(n3)
9、數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計算的程序設(shè)計問題中計算機(jī)的數(shù)據(jù)元素以及它們之間的
(B)和運(yùn)算等的學(xué)科。(關(guān)系和操作)
A.結(jié)構(gòu)B.關(guān)系C.運(yùn)算D.算法
10,下面程序段的時間復(fù)雜度是(A)。
!■();
while(s<n){
i++;s+=i;
A.O(n)B.O(n2)C.O(logzn)D.Og3)
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ì)量,以下解釋錯誤的
是(D)。
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)生不需要的
運(yùn)行結(jié)果
D.高效性即達(dá)到所需要的時間性能空間
13、下列程序段的時間復(fù)雜度為(B)。
x=n;y=O;
while(x>=(y+l)*(y+l))
y=y+i;
A.O(n)B.。(如c.。⑴D.og2)
二、填空題
1、程序段“i=1;while(i<=n)i=i*2;”的時間復(fù)雜度為bg2n。
2、數(shù)據(jù)結(jié)構(gòu)的四種基本類型中,樹形結(jié)構(gòu)的元素是一對多關(guān)系。
三、綜合題
1、將數(shù)量級。⑴Q(N)Q(N2),O(N3)Q(NLOG2N),O(LC?G2N),O(2')按增長率由小到大排序。
答案:0(1)OQogjN)O(N)O(N]og2N)OCN2)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ù)的存儲結(jié)構(gòu)和數(shù)據(jù)的運(yùn)算這三個方面的內(nèi)容。
3.數(shù)據(jù)結(jié)構(gòu)按邏輯結(jié)構(gòu)可分為兩大類,它們分別是線性結(jié)構(gòu)和非線性結(jié)構(gòu)。
4.線性結(jié)構(gòu)中元素之間存在一對一關(guān)系,樹形結(jié)構(gòu)中元素之間存在一對?多關(guān)系,圖形
結(jié)構(gòu)中元素之間存在多對多關(guān)系。
5.在線性結(jié)構(gòu)中,第一個結(jié)點沒有前驅(qū)結(jié)點,其余每個結(jié)點有且只有L個前驅(qū)結(jié)點;
最后一個結(jié)點沒有后續(xù)結(jié)點,其余每個結(jié)點有且只有7個后續(xù)結(jié)點。
精品
6.在樹形結(jié)構(gòu)中,樹根結(jié)點沒有前驅(qū)結(jié)點,其余每個結(jié)點有且只有L個前驅(qū)結(jié)點;葉子結(jié)
點沒有后續(xù)結(jié)點,其余每個結(jié)點的后續(xù)結(jié)點數(shù)可以彳工,意1多個。
7.在圖形結(jié)構(gòu)中,每個結(jié)點的前驅(qū)結(jié)點數(shù)和后續(xù)結(jié)點數(shù)可以任意多個。
8.數(shù)據(jù)的存儲結(jié)構(gòu)可用四種基本的存儲方法表示,它們分別是順序、鏈?zhǔn)?、索弓|、
散列。
9.數(shù)據(jù)的運(yùn)算最常用的有5種,它們分別是插入、刪除、修改、查找、排序。
10.一個算法的效率可分為時間效率和空間效率。
11.任何一個C程序都由一個主函數(shù)和若干個被調(diào)用的其它函數(shù)組成。
二、單項選擇題
(B)1.非線性結(jié)構(gòu)是數(shù)據(jù)元素之間存在一種:
A)一對多關(guān)系B)多對多關(guān)系C)多對一關(guān)系D)一對
一關(guān)系
C)2.數(shù)據(jù)結(jié)構(gòu)中,與所使用的計算機(jī)無關(guān)的是數(shù)據(jù)的結(jié)構(gòu);
A)存儲B)物理C)邏輯D)物理和存儲
(C)3.算法分析的目的是:
A)找出數(shù)據(jù)結(jié)構(gòu)的合理性B)研究算法中的輸入和輸出的關(guān)系
C)分析算法的效率以求改進(jìn)D)分析算法的易懂性和文檔性
(A)4.算法分析的兩個主要方面5是:
A)空間復(fù)雜性和時間復(fù)雜性B)正確性和簡明性
C)可讀性和文檔性D)數(shù)據(jù)復(fù)雜性和程序復(fù)雜性
精品
(C)5.計算機(jī)算法指的是:
A)計算方法B)排序方法C)解決問題的有限運(yùn)算序列D)調(diào)
度方法
(g)6.計算機(jī)算法必須具備輸入、輸出和等5個特性。
A)可行性、可移植性和可擴(kuò)充性B)可行性、確定性和有窮性
Q確定性、有窮性和穩(wěn)定性D)易讀性、穩(wěn)定性和安全性
三、簡答題
1.數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型兩個概念之間有區(qū)別嗎?
答:簡單地說,數(shù)據(jù)結(jié)構(gòu)定義了?組按某些關(guān)系結(jié)合在一起的數(shù)組
元素。數(shù)據(jù)類型不僅定義了一組帶結(jié)構(gòu)的數(shù)據(jù)元素,而且還在其上定
義了一組操作。
2.簡述線性結(jié)構(gòu)與非線性結(jié)構(gòu)的不同點。
答:線性結(jié)構(gòu)反映結(jié)點間的邏輯關(guān)系是一對一的,非線性結(jié)構(gòu)反映結(jié)
,點:間的邏輯關(guān)系是多對多的。
四、分析下面各程序段的時間復(fù)雜度2.s=0;
for(i=0;i<n;i++)
1.for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(j=0;j<m;j++)
s+=B[i]U];
A[i]U]=O;
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),試按各小題所給條件畫出這些邏輯結(jié)構(gòu)的圖
精品
示,并確定其是哪種邏輯結(jié)構(gòu)。
精品
1.D={d1,d2,d3,d4}R={(d1,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)}樹
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、若長度為n的線性表采用順序存儲結(jié)構(gòu),在其第i個位置插入一個新元素算法的時間復(fù)
雜度()。
A.O(lo空n)B.O(l)C.Q(n)D.O^2)
2、若一個線性表中最常用的操作是取第i個元素和找第i個元素的前趨元素,則采用()
存儲方式最節(jié)省時間。
A.順序表B.單鏈表C.雙鏈表D.單循環(huán)鏈表
3、具有線性結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)是()。
A.圖B.樹C.廣義表D.棧
4、在一個長度為n的順序表中,在第i個元素之前插入一個新元素時,需向后移動()
個元素。
A.n-iB.n-i+1C.n-i-1D.i
5、非空的循環(huán)單鏈表head的尾結(jié)點p滿足()o
A.p->next=zzhcaclB.p->next==NULL
C.p==NULLD.p==head
6、鏈表不具有的特點是()o
A.可隨機(jī)訪問任一元素B.插入刪除不需要移動元素
C.不必事先估計存儲空間D.所需空間與線性表長度成正比
7、在雙向循環(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->ncxt=p->ncxt;q->prior=p;p->ncxt=q;p->ncxt=q;
8、線性表采用鏈?zhǔn)酱鎯r,結(jié)點的存儲地址()o
精品
A.必須是連續(xù)的B,必須是不連續(xù)的
C.連續(xù)與否均可D.和頭結(jié)點的存儲地址相連續(xù)
9、在一個長度為n的順序表中刪除第i個元素,需要向前移動()個元素。
A.n-iB.n-i+1C.n-i-1D.i+1
10、線性表是n個()的有限序列。
A.表元素B.字符C.數(shù)據(jù)元素D.數(shù)據(jù)項
11、從表中任一結(jié)點出發(fā),都能掃描整個表的是()。
A.單鏈表B.順序表C.循環(huán)鏈表D.靜態(tài)鏈表
12、在具有n個結(jié)點的單鏈表上查找值為x的元素時,其時間復(fù)雜度為()o
A.O(n)B.0(1)C.(Xn2)D.O(n-l)
13、線性表L=(al,a2,……,an),下列說法正確的是()。
A.每個元素都有一個直接前驅(qū)和一個直接后繼
B.線性表中至少要有一個元素
C.表中諸元素的排列順序必須是由小到大或由大到小
D.除第一個和最后個元素外,其余每個元素都由一個且僅有?個直接前驅(qū)和直接后
繼
14、一個順序表的第一個元素的存儲地址是90,每個元素的長度為2,則第6個元素的存儲
地址是()o
A.98B.100C.102D.106
15、在線性表的下列存儲結(jié)構(gòu)中,讀取元素花費(fèi)的時間最少的是()o
A.單鏈表B.雙鏈表C.循環(huán)鏈表D.順序表
16、在一個單鏈表中,若刪除p所指向結(jié)點的后續(xù)結(jié)點,則執(zhí)行()。
A.p->ncxt=p->ncxt->ncxt;
B.p=p->next;p->next=p->next->next;
C.p=p->next;
D.p=p->next->next;
17、將長度為n的單鏈表連接在長度為tn的單鏈表之后的算法的時間復(fù)雜度為()。
A.0(1)B.O(n)C.O(m)D.O(m+n)
18、線性表的順序存儲結(jié)構(gòu)是一種()存儲結(jié)構(gòu)。
A.隨機(jī)存取B.順序存取C.索引存取D.散列存取
19、順序表中,插入一個元素所需移動的元素平均數(shù)是()。
A.(n-1)/2B.nC.n+1D.(n+l)/2
10、循環(huán)鏈表的主要優(yōu)點是()o
A.不再需要頭指針B.已知某結(jié)點位置后能容易找到其直接前驅(qū)
C.在進(jìn)行插入、刪除運(yùn)算時能保證鏈表不斷開
D.在表中任一結(jié)點出發(fā)都能掃描整個鏈表
11、不帶頭結(jié)點的單鏈表head為空的判定條件是()。
A.head==NULLB.head->next==NULL
C.hcad->next==hcadD.head!=NULL
12、在下列對順序表進(jìn)行的操作中,算法時間復(fù)雜度為。⑴的是()。
A.訪問第i個元素的前驅(qū)(l<i4n)B.在第i個元素之后插入一個新元素
(l<i<n)
C.刪除第i個元素(154n)D.對順序表中元素進(jìn)行排序
13、已知指針p和q分別指向某單鏈表中第一個結(jié)點和最后一個結(jié)點。假設(shè)指針s指向另一個
精品
單鏈表中某個結(jié)點,則在S所指結(jié)點之后插入上述鏈表應(yīng)執(zhí)行的語句為
精品
()o
A.q->next=s->next;s->next=p;
B.s->ncxt=p;q->ncxt=s->ncxt;
C.p->next=s->next;s->next=q;
D.s->next=q;p->next=s->next;
14、在以下的敘述中,正確的是()。
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ù)為()o
A.(n-l)/2B.n/2C.(n+l)/2D.n
16、在一個單鏈表中,已知q所指結(jié)點是p所指結(jié)點的前驅(qū)結(jié)點,若在q和p之間插入一個
結(jié)點s,則執(zhí)行()。
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->ncxt=s;s->ncxt=q;
17、在單鏈表中,指針p指向元素為x的結(jié)點,實現(xiàn)刪除x的后繼的語句是()0
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,則()。
A.p指向頭結(jié)點B.p指向尾結(jié)點C.p的直接后繼是頭結(jié)點
D.p的直接后繼是尾結(jié)點
二、填空題
1、設(shè)單鏈表的結(jié)點結(jié)構(gòu)為(data,next)。已知指針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ù)稱為線性表的______長
度。
答案:線性結(jié)構(gòu)長度
3、寫出帶頭結(jié)點的雙向循環(huán)鏈表L為空表的條件L-prior=L-next=L。
答案:L->prior==L->next==L
4、帶頭結(jié)點的單鏈表head為空的條件是head-next==null。
答案:head->next==NUIJ,
5、在一個單鏈表中刪除p所指結(jié)點的后繼結(jié)點時,應(yīng)執(zhí)行以下操作:
q=p->next;
p->next=q-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ù)GctElcm實現(xiàn)返回單鏈表的第i個元素,請在空格處將算法補(bǔ)充完整。
intGetElemfUnkListLjnti,Elemtype*e){
LinkListp;intj;
p=L->next;j=l;
while(p&&j<i){
p=p-next(1);++j;
)
if(!p||j>i)returnERROR;
p-da【a(2);
returnOK;
)
答案:(l)p=p->next⑵p->data
2、函數(shù)實現(xiàn)單鏈表的插入算法,請在空格處將算法補(bǔ)充完整。
intTistInsert(TjnkListLjnti,ElemTypee){
LNode*p,*s;intj;
p=L;j=O;
while((p!=NULL)&&(j<i-l)){
p=p->next;j++;
}
if(p==NULL||j>i-l)returnERROR;
s=(LNodc*)malloc(sizeof(LNode));
s->data=e;
(1)s-next-p-next;
(2)pnext=s;
returnOK;
}/*ListInsert*/
答案:(l)s->next=p->next(2)p->next=s
3、函數(shù)ListDelete_sq實現(xiàn)順序表刪除算法,請在空格處將算法補(bǔ)充完整。
intListDcletc_sq(Sqlist*L,inti){
intk;
if(i<l||i>L->lcngth)returnERROR;
for(k=i-l;k<L->length-l;k++)
精品
L->sHst[k]=L->slist[k+l](1);
(2)-L>Len"h;
returnOK;
)
答案:(1)L->slistlk+l](2)-L->Length
4、函數(shù)實現(xiàn)單鏈表的刪除算法,請在空格處將算法補(bǔ)充完整。
intListDelete(LinkListL,inti,ElcmType*s){
LNode*p,*q;
intj;
p=L;j=O;
while((p-next!-null(1))&&(j<i-l)){
p=p->next;j++;
}
if(p->next==NULL||j>i-l)returnERROR;
q=p->ncxt;
p?next=q?next(2);
*s=q->data;
free(q);
returnOK;
}/*listDelete*/
答案:⑴p->ncxt!二NULL(2)p->next=q->ncxt
5、寫出算法的功能。
intL(hcad){
node*head;
intn=0;
node*p;
p=hcad;
while?=NULL)
{p=p->ncxt;
n++;
)
return(n);
)
答案:求單鏈表head的長度
五、綜合題
1、編寫算法,實現(xiàn)帶頭結(jié)點單鏈表的逆置算法。
答案:voidinvent(I.node*head)
{Lnodc*p,*q;
if(!head->next)returnERROR;
p=hcacl->next;q=p->next;p->next二NULL;
while(q)
精品
{p=q;q=q->next;p->ncxt=hcad->next;hcad->next=p;}
2、有兩個循環(huán)鏈表,鏈頭指針分別為LI和L2,要求寫出算法將L2鏈表鏈到L1鏈表之后,
且連接后仍保持循環(huán)鏈表形式。
答案:voidmerge(Lnodc*L1,Lnodc*L2)
{Lnode*p,*q;
whilc(p->ncxt!zzLl)
p=p->next;
while(q->next!=L2)
q=q->next;
q->ncxt=Ll;p->ncxt=L2;
)
3、設(shè)一個帶頭結(jié)點的單向鏈表的頭指針為head,設(shè)計算法,將鏈表的記錄,按照data域的
值遞增排序。
答案:voidassending(Lnodc*hcad)
{Lnode*p,*q,*r,*s;
p=hcad->ncxt;q=p->ncxt;p->ncxt=NULL;
while(q)
{kq;q=q->ncxt;
if(r->data<=p->data)
{r->ncxt=p;hcad->next=r;p=r;}
else
{while(!p&&r->data>p->data)
{s=p;p=p->next;}
r->ncxt=p;s->ncxt=r;}
p=head->next;}
}
4、編寫算法,將一個頭指針為head不帶頭結(jié)點的單鏈表改造為一個單向循環(huán)鏈表,并分析算
法的時間復(fù)雜度。
答案:
voidlinklist__c(Lnodc*head)
{I.node*p;p=head;
if(!p)returnERROR;
while(p->next!=NULL)
p=p->ncxt;
p->next=head;
}
設(shè)單鏈表的長度(數(shù)據(jù)結(jié)點數(shù))為N,則該算法的時間主要花費(fèi)在查找鏈表最后一個結(jié)點上
(算法中的while循環(huán)),所以該算法的時間復(fù)雜度為。(N)。
5、已知head為帶頭結(jié)點的單循環(huán)鏈表的頭指針,鏈表中的數(shù)據(jù)元素依次為(al,
a2,a3,a4,…,an),A為指向空的順序表的指針。閱讀以下程序段,并回答問題:
(1)寫出執(zhí)行下列程序段后的順序表A中的數(shù)據(jù)元素;
(2)簡要敘述該程序段的功能。
if(head->next!=head)
精品
p=head->next;
A->lcngth=O;
while(p->next!=head)
{
p=p->next;
A->data[A->lcngth++]=p->data;
if(p->next!=head)p=p->next;
)
)
答案:
(1)(a2,a4,…⑵將循環(huán)單鏈表中偶數(shù)結(jié)點位置的元素值寫入順序表A
6、設(shè)順序表va中的數(shù)據(jù)元數(shù)遞增有序。試寫一算法,將x插入到順序表的適當(dāng)位置上,以
保持該表的有序性。
答案:
voidInsert_sq(Sqli$tva[|,ElemTypex)
{inti,j,n;
n=length(va[]);
if(x>=va[i])
va[n]=x;
else
{i=0;
while(x>va[i])i++;
for(j=n-l;j>=I;j-)
va[j4-l]=va[j];
va[i]=x;}
n++;
}
7、假設(shè)線性表采用順序存儲結(jié)構(gòu),表中元素值為整型。閱讀算法f2,設(shè)順序表
L=(3,7,3,2,l,1,8,7,3),寫出執(zhí)行算法f2后的線性表L的數(shù)據(jù)元素,并描述該算法的功能。
voidf2(ScqList*L){
inti,j,k;
k=0;
for(i=O;i<L->length;i++){
for(j=O;j<k&&L->data[i]!=L->data[j];j+-l-);
if(j==k){
if(k!=i)L->data[k]=L->data[i];
k++;
}
}
L->lcngth=k;
答案:
精品
(3,7,2,1,8)刪除順序表中重復(fù)的元素
8、已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲結(jié)構(gòu)。試寫一算法,刪除表
中所有大于x且小于y的元素(若表中存在這樣的元素)同時釋放被刪除結(jié)點空間。
答案:
voidDelete_list(I>node*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)
{hcad=p->ncxt;frec(p);
p=head;q=p;}
else
{q->next=p->next;free(p);
p=q->ncxt;}
else
{q=p;p=p->ncxt;}
9、在帶頭結(jié)點的循環(huán)鏈表L中,結(jié)點的數(shù)據(jù)元素為整型,且按值遞增有序存放。給定兩個
整數(shù)a和b,且a<b,編寫算法刪除鏈表L中元素值大于a且小于b的所有結(jié)點。
第三章棧和隊列
一、選擇題
1、一個棧的輸入序列為:a,b,c,d,e,則棧的不可能輸出的序列是()。
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個元素)為滿的條件是()。
A.Q->rear==Q->frontB.Q->rear==Q->frontH-l
C.Q->front==(Q->rcar+l)%nD.Q->front==(Q->rear-l)%n
3、設(shè)計一個判別表達(dá)式中括號是否配對的算法,采用()數(shù)據(jù)結(jié)構(gòu)最佳。
A.順序表B,鏈表C.隊列D.棧
4、帶頭結(jié)點的單鏈表head為空的判定條件是()o
A.head二二NULLB.hcad->ncxt==NULL
C.head->next!=NULLD.head!=NULL
5、一個棧的輸入序列為:123,4,則棧的不可能輸出的序列是()。
A.1243B.2134C.1432D.4312E.3214
精品
6、若用一個大小為6的數(shù)組來實現(xiàn)循環(huán)隊列,且當(dāng)rear和front的值分別為0,3。當(dāng)從隊列中
刪除一個元素,再加入兩個元素后,rear和front的值分別為()。
A.1和5B.2和4C.4和2D.5和1
7、隊列的插入操作是在()o
A.隊尾B.隊頭C.隊列任意位置D.隊頭元素后
8、循環(huán)隊列的隊頭和隊尾指針分別為fron而rear,則判斷循環(huán)隊列為空的條件是()。
A.front==rearB.front==0
C.rear==0D.front=rear+1
9、一個順序棧S,其棧頂指針為top,則將元素c入棧的操作是()。
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á)式是()o
A.abcd+-B.abc+*d-C.abc*+d-D.-4-*abcd
11、將遞歸算法轉(zhuǎn)換成對應(yīng)的非遞歸算法時,通常需要使用()來保存中間結(jié)果。
A.隊列B.棧C.鏈表D.樹
12、棧的插入和刪除操作在()o
A.棧底B.棧頂C.任意位置D.指定位置
13、五節(jié)車廂以編號1,2,3,4,5順序進(jìn)入鐵路調(diào)度站(棧),可以得到()的編組。
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.S->top==0B.S->top!=0
C.S->top==nD.S->top!=n
15、在一個鏈隊列中,front和rear分別為頭指針和尾指針,則插入一個結(jié)點s的操作為()。
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,則隊列的出隊序列是()o
A.1,2,3,4B.4,3,2,1
C.1,4,3,2D.3,4,1,2
17、依次在初始為空的隊列中插入元素a,b,c,d以后,緊接著做了兩次刪除操作,此時的隊頭
元素是()。
A.aB.bC.cD.d
18、正常情況下,刪除非空的順序存儲結(jié)構(gòu)的堆棧的棧頂元素,棧頂指針top的變化是()。
A.top不變B.top=0C.top=top-+-lD.top=top-1
19、判斷一個循環(huán)隊列Q(空間大小為M)為空的條件是()。
A.Q->front==Q->rearB.Q->rear-Q->front-1==M
C.Q->front+l=Q->rearD.Q->rcar+l=Q->front
20、設(shè)計一個判別表達(dá)式中左右括號是否配對出現(xiàn)的算法,采用()數(shù)據(jù)結(jié)構(gòu)最佳。
A.線性表的順序存儲結(jié)構(gòu)B.隊列C.棧D,線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)
21、當(dāng)用大小為N的數(shù)組存儲順序循環(huán)隊列時,該隊列的最大長度為()。
A.NB.N+lC.N-lD.N-2
22、隊列的刪除操作是在()o
精品
A.隊首B.隊尾C.隊前D.隊后
23、若讓元素1,2,3依次進(jìn)棧,則出棧次序不可能是()o
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ù)是()o
A.(rear-front+m)%mB.rear-front+l
C.rear-front-1D.rear-front
25、在解決計算機(jī)主機(jī)和打印機(jī)之間速度不匹配問題時,通常設(shè)置一個打印數(shù)據(jù)緩沖區(qū),主
機(jī)將要輸出的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機(jī)則從該緩沖區(qū)中取走數(shù)據(jù)打印。該緩沖區(qū)應(yīng)
該是一個()結(jié)構(gòu)。
A.堆棧B.隊列C.數(shù)組D.線性表
26、棧和隊列都是()o
A.鏈?zhǔn)酱鎯Φ木€性結(jié)構(gòu)B.鏈?zhǔn)酱鎯Φ姆蔷€性結(jié)構(gòu)
C.限制存取點的線性結(jié)構(gòu)D.限制存取點的非線性結(jié)構(gòu)
27、在一個鏈隊列中,假定front和rear分別為隊頭指針和隊尾指針,刪除一個結(jié)點的操作是
()o
A.front=front->nextB.rcar=rcar->ncxt
C.rear->next=frontD.front->next=rear
28、隊和棧的主要區(qū)別是()o
A.邏輯結(jié)構(gòu)不同B.存儲結(jié)構(gòu)不同
C.所包含的運(yùn)算個數(shù)不同D.限定插入和刪除的位置不同
二、填空題
1、設(shè)棧S和隊列Q的初始狀態(tài)為空,元素€1£2£*便5河依次通過棧5,一個元素出棧后即進(jìn)
入隊列Q,若6個元素出隊的序列是e2,c4,e3,c6,c5,cl,則棧的容量至少應(yīng)該是。
答案:3
2、一個循環(huán)隊列Q的存儲空間大小為M淇隊頭和隊尾指針分別為fron而rear,則循環(huán)隊列中
元素的個數(shù)為:。
答案:(rear-front+M)%M
3、在具有n個元素的循環(huán)隊列中,隊滿時具有個元素。
答案:n-1
4、設(shè)循環(huán)隊列的容量為70,現(xiàn)經(jīng)過一系列的入隊和出隊操作后,front為20,rear為11,則隊
列中元素的個數(shù)為。
答案:61
5、已知循環(huán)隊列的存儲空間大小為20,且當(dāng)前隊列的頭指針和尾指針的值分別為8和3,且
該隊列的當(dāng)前的長度為。
三、判斷題
1、棧和隊列都是受限的線性結(jié)構(gòu)。
2、在單鏈表中,要訪問某個結(jié)點,只要知道該結(jié)點的地址即可;因此,單鏈表是一種隨機(jī)
存取結(jié)構(gòu)。
3、以鏈表作為棧的存儲結(jié)構(gòu),出棧操作必須判別??盏那闆r。
精品
四、程序分析填空題
1、已知棧的基本操作函數(shù):
intInitStack(SqStack*S);〃構(gòu)造空棧
intStackEmpty(SqStack*S);〃判斷???/p>
intPush(SqStack*S,ElcmTypcc);//入棧
intPop(SqStack*S,ElemType*e);〃出棧
函數(shù)conversion實現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)換為八進(jìn)制數(shù),請將函數(shù)補(bǔ)充完整。
voidconversion0{
InitStack(S);
scanf("%d",&N);
whUe(N){
____(1);
N=N/8;
)
while((2)){
Pop(S,&e);
printf("%d”,e);
}
}//conversion
答案:(1)Push(S,N%8)(2)!StackEmpty(S)
2、寫出算法的功能。
intfunction(SqQueue*Q,ElemType*e){
if(Q->front==Q->rear)
returnERROR;
*e=Q->basc[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
returnOK;
)
3、閱讀算法包,并回答下列問題:
(1)設(shè)隊列Q=(1,3,5,2,4,6)o寫出執(zhí)行算法f2后的隊列Q;
(2)簡述算法f2的功能。
voidf2(Queue*Q){
DataTypce;
if(!QueueEmpty(Q)){
c=DcQueuc(Q);
f2(Q);
EnQucuc(Q,c);
}
)
答案:⑴6,4,253,1⑵將隊列倒置
五、綜合題
1、假設(shè)以帶頭結(jié)點的循環(huán)鏈表表示隊列,并且只設(shè)一個指針指向隊尾結(jié)點,但不設(shè)頭指針,
精品
請寫出相應(yīng)的入隊列算法
精品
(用函數(shù)實現(xiàn))。
答案:voidEnQueue(I,node*rear,ElemTypee)
{Lnode*new;
New=(Lnode*)malloc(sizeof(T,node));
If(!nc\v)returnERROR;
new->data=e;ne\v->next=rear->next;
rcar->ncxt=ncw;rear二new;
j
2、已知Q是一個非空隊列,S是一個空棧。編寫算法,僅用隊列和棧的ADT函數(shù)和少量工
作變量,將隊列Q的所有元素逆置。
棧的ADT函數(shù)有:
voidmakeEmpty(SqStacks);置空棧
voidpush(SqStacks,ElemTypee);元素c入棧
ElemTypepop(SqStacks);出棧,返回棧頂元素
intisEmpt\T(SqStacks);判斷???/p>
隊列的ADT函數(shù)有:
voidcnQucuc(Queucq,ElemTypec);元素。入隊
ElemTypedeQueue(Queueq);出隊,返回隊頭元素
intisEmpty(Queucq);判斷隊空
答案:voidQueuelnvent(Queueq)
{ElemTypex;
makeEmpty(SqStacks);
whilc(!isEmptyr(Qucucq))
{x=deQueue(Queueq);
push(SqStacks,ElcmTypcx);}
while(!isEmpty(SqStacks))
{x=pop(SqStacks);
enQueue(Queueq,ElemTypex);}
}
3、對于一個棧,給出輸入項A,B,C,D,如果輸入項序列為A,B,C,D,試給出全部可能的輸出
序列。
答案:出棧的可能序列:
ABCDABDCACDBACBDADCBBACDBADCBCADBCDA
CBDACBADCDBADCBA
第四章串
一、選擇題
1、設(shè)有兩個串S1和S2,求串S2在S1中首次出現(xiàn)位置的運(yùn)算稱作(C)。
精品
A.連接B.求子串C.模式匹配D.判斷子串
2、已知串S='aaab',則next數(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)o
A.相同B.不相同C.可能相同D.無法確定
6、與線性表相比,串的插入和刪除操作的特點是()。
A.通常以串整體作為操作對象B.需要更多的輔助空間
C.算法的時間復(fù)雜度較高D.涉及移動的元素更多
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í)行效率低的原因是有回溯存在。
(M)2、KMP算法的最大特點是指示主串的指針不需要回溯。
(M)3、完全二叉樹某結(jié)點有右子樹,則必然有左子樹。
三、填空題
1、求子串在主串中首次出現(xiàn)的位置的運(yùn)算稱為模式匹配。
2、設(shè)$='I-AM—A—TEACHER',其長度是____。
3、兩個串相等的充分必要條件是兩個串的長度相等且
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年個人住房抵押借款協(xié)議(家庭財富傳承)3篇
- 2025版新能源汽車充電站建設(shè)合同含政府補(bǔ)貼及稅收優(yōu)惠條款
- 2025年二零二五班主任學(xué)生社會實踐與志愿服務(wù)合同3篇
- 2024年環(huán)保型圍墻材料采購及安裝合作協(xié)議3篇
- 2025版高效節(jié)能型10KV線路及變臺安裝工程施工及驗收合同2篇
- 2025版游樂場游樂設(shè)施檢測合同3篇
- 2023年全腦開發(fā)項目融資計劃書
- 2024年版:高等教育機(jī)構(gòu)實驗室設(shè)備管理合同
- 2025年度智慧城市建設(shè)合同范本3篇
- 2025版科技研發(fā)中心租賃承包經(jīng)營服務(wù)協(xié)議3篇
- 國家開放大學(xué)法學(xué)本科《商法》歷年期末考試試題及答案題庫
- 金匱要略知到智慧樹章節(jié)測試課后答案2024年秋浙江中醫(yī)藥大學(xué)
- 【MOOC】有機(jī)化學(xué)實驗-南京工業(yè)大學(xué) 中國大學(xué)慕課MOOC答案
- 2024年婦??乒ぷ骺偨Y(jié)及計劃
- 北京理工大學(xué)《數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計》2022-2023學(xué)年第一學(xué)期期末試卷
- 錨桿(索)支護(hù)工技能理論考試題庫200題(含答案)
- 人教版2024年小學(xué)二年級上學(xué)期語文期末考試往年真題
- 新版高中物理必做實驗?zāi)夸浖捌鞑?(電子版)
- 中國慢性冠脈綜合征患者診斷及管理指南2024版解讀
- 跟著音樂游中國智慧樹知到期末考試答案章節(jié)答案2024年廣州大學(xué)
- (正式版)SHT 3551-2024 石油化工儀表工程施工及驗收規(guī)范
評論
0/150
提交評論