




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第一章概論
一、選擇題
1、研究數據結構就是研究(D)。
A.數據的邏輯結構B.數據的存儲結構
C.數據的邏輯結構和存儲結構D.數據的邏輯結構、存儲結構及其基本操作(研
究非數值計算的程序設計問題中,計算機操作對象以及他們之間的關系和操作)
2、算法分析的兩個主要方面是(A)?
A.空間復雜度和時間復雜度B.正確性和簡單性
C.可讀性和文檔性D.數據復雜性和程序復雜性
3,具有線性結構的數據結構是(D)。(線性結構就是:在非空有限集合中,存在為一個
被稱為第一個的數據元素和最后一個元素,有除了笫一個元素,集合中每一個元素均只有一
個前驅,除了最后一個元素有唯一后繼)(鏈表、棧、隊列、數組、串)
A.圖B.樹C.廣義表(線性表的推廣)D.棧
4、計算機中的算法指的是解決某一個問題的有限運算序列,它必須具備輸入、輸出、(B)
等5個特性。
A.可執行性、可移植性和可擴充性B.可執行性、有窮性和確定性
C.確定性、有窮性和穩定性D.易讀性、穩定性和確定性
5、下面程序段的時間復雜度是(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為了解決某一問題而規定的一個有限長的操作序列
A.計算機程序B.解決問題的計算方法C.排序算法
D.解決問題的有限運算序列
2
7、某算法的語句執行頻度為(3n+nlog2n+n+8),其時間復雜度表示(C)。
A.0(n)B.0(nlog2n)C.0(n2)D.0(log2n)
8、下面程序段的時間復雜度為(C)。
i=l;
while(i<=n)
i=i*3;
3
A.0(n)B.0(3n)C.0(log3n)D.0(n)
9、數據結構是一門研究非數值計算的程序設計問題中計算機的數據元素以及它們之間的
(B)和運算等的學科。(關系和操作)
A.結構B.關系C.運算D.算法
10、下面程序段的時間復雜度是(A)0
i=s=0;
while(s<n){
i++;s+=i;
)
A.0(n)B.0(n2)C.0(log2n)D,0(n3)
11、抽象數據類型的三個組成部分分別為(A)。
A.數據對象、數據關系和基本操作B.數據元素、邏輯結構和存儲結構
C.數據項、數據元素和數據類型D.數據元素、數據結構和數據類型
12、通常從正確性、易讀性、健壯性、高效性等4個方面評價算法的質量,以下解釋錯誤的
是(D)。
A.正確性算法應能正確地實現預定的功能
B.易讀性算法應易于閱讀和理解,以便調試、修改和擴充
C.健壯性當環境發生變化時,算法能適當地做出反應或進行處理,不會產生不需要的
運行結果
D.高效性即達到所需要的時間性能空間
13、下列程序段的時間復雜度為(B)。
x=n;y=0;
while(x>=(y+l)*(y+1))
y=y+l;
A.0(n)B,0(標C.0(1)D.0(n2)
二、填空題
1、程序段,(i=l;while(i<=n)i=i*2;”的時間復雜度為log2n。
2、數據結構的四種基本類型中,樹形結構的元素是一對多關系。
三、綜合題
2s
1、將數量級0(1),0(N),0(N),0N),0(NLOG2N),0(LOG2N),0(2)按增長率由小到大排序。
23
答案:0(1)0(log2N)0(N)0(Nlog2N)0(N)0(N)0(2')
一、填空題
1.數據結構被形式地定義為(D,R),其中D是數據元素的有限集合,R是D上的關系有限
集合。
2.數據結構包括數據的邏輯結構、數據的疊脩結構和數據的運算這三個方面的內容。
3.數據結構按邏輯結構可分為兩大類,它們分別是線性結構和非線性結構。
4.線性結構中元素之間存在一對一關系,樹形結構中元素之間存在一對多關系,圖形結構
中元素之間存在多對多關系。
5.在線性結構中,第一個結點沒有前驅結點,其余每個結點有且只有L個前驅結點;最
后一個結點沒有后續結點,其余每個結點有且只有1個后續結點。
6.在樹形結構中,樹根結點沒有前驅結點,其余每個結點有且只有L個前驅結點;葉子結
點沒有后續結點,其余每個結點的后續結點數可以任意多個。
7.在圖形結構中,每個結點的前驅結點數和后續結點數可以任意多個。
8.數據的存儲結構可用四種基本的存儲方法表示,它們分別是順序、鏈式、索引、散列。
9.數據的運算最常用的有5種,它們分別是插入、刪除、修改、查找、排序。
10.一個算法的效率可分為時間效率和空間效率。
11.任何一個C程序都由一個主函數和若干個被調用的其它函數組成。
二、單項選擇題
(B)1.非線性結構是數據元素之間存在一種:
A)一對多關系B)多對多關系C)多對一關系D)一對一
關系
(C)2.數據結構中,與所使用的計算機無關的是數據的.,結構;
A)存儲B)物理0邏輯D)物理和存儲
(C)3.算法分析的目的是:
A)找出數據結構的合理性B)研究算法中的輸入和輸出的關系
0分析算法的效率以求改進D)分析算法的易懂性和文檔性
A)4.算法分析的兩個主要方面5是:
A)空間復雜性和時間復雜性B)正確性和簡明性
0可讀性和文檔性D)數據復雜性和程序復雜性
(C)5.計算機算法指的是:
A)計算方法B)排序方法0解決問題的有限運算序列D)調
度方法
(B)6.計算機算法必須具備輸入、輸出和.等5個特性。
A)可行性、可移植性和可擴充性B)可行性、確定性和有窮性
0確定性、有窮性和穩定性D)易讀性、穩定性和安全性
三、簡答題
1.數據結構和數據類型兩個概念之間有區別嗎?
答:簡單地說,數據結構定義了一組按某些關系結合在一起的數組元素。數據類型不僅定
義了一組帶結構的數據元素,而口還在其上定義了一組操作。
2.簡述線性結構與非線性結構的不同點。
答:線性結構反映結點間的邏輯關系是一對一的,非線性結構反映結點間的邏輯關系是多對
多的。
四、分析下面各程序段的時間復雜度
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++;
五、設有數據邏輯結構s=(D,R),試按各小題所給條件畫出這些邏輯結構的圖示,并確定
其是哪種邏輯結構。
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)}樹
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的線性表采用順序存儲結構,在其第i個位置插入一個新元素算法的時間復
雜度(C)o
2
A.0(log2n)B.0(1)C.0(n)D.0(n)
2、若一個線性表中最常用的操作是取第i個元素和找第i個元素的前趨元素,則采用(a)
存儲方式最節省時間。
A.順序表B.單鏈表C.雙鏈表D.單循環鏈表
3、具有線性結構的數據結構是(d)。
A.圖B.樹C.廣義表D.棧
4、在一個長度為n的順序表中,在第i個元素之前插入一個新元素時,需向后移動(b)
個元素。
A.n-iB.n-i+1C.n-i-1D.i
5、非空的循環單鏈表head的尾結點p滿足(a)。
A.p->next==headB.p->next=NULL
C.p二二NULLD.p==head
6、鏈表不具有的特點是(a)。
A.可隨機訪問任一元素B.插入刪除不需要移動元素
C.不必事先估計存儲空間D.所需空間與線性表長度成正比
7、在雙向循環鏈表中,在p指針所指的結點后插入一個指針q所指向的新結點,修改指針的
操作是(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、線性表采用鏈式存儲時,結點的存儲地址(c
A.必須是連續的B.必須是不連續的
C.連續與否均可D.和頭結點的存儲地址相連續
9、在一個長度為n的順序表中刪除第i個元素,需要向前移動(a)個元素。
A.n-iB.n-i+1C.n-i-1D.i+1
10、線性表是n個(c)的有限序列。
A.表元素B.字符C.數據元素D.數據項
11、從表中任一結點出發,都能掃描整個表的是(c)。
A.單鏈表B.順序表C.循環鏈表D.靜態鏈表
12、在具有n個結點的單鏈表上查找值為x的元素時,其時間復雜度為(a)。
A.O(n)B.0(1)C.0(n2)D.0(n-l)
13、線性表L=(al,a2,……,an),下列說法正確的是(d)。
A.每個元素都有一個直接前驅和一個直接后繼
B.線性表中至少要有一個元素
C.表中諸元素的排列順序必須是由小到大或由大到小
D.除第一個和最后一個元素外,其余每個元素都由一個且僅有一個直接前驅和直接后
繼
14、一個順序表的第一個元素的存儲地址是90,每個元素的長度為2,則第6個元素的存儲
地址是(b)。
A.98B.100C.102D.106
15、在線性表的下列存儲結構中,讀取元素花費的時間最少的是(d
A.單鏈表B.雙鏈表C.循環鏈表D.順序表
16、在一個單鏈表中,若刪除p所指向結點的后續結點,則執行(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、將長度為n的單鏈表連接在長度為m的單鏈表之后的算法的時間復雜度為(c)。
A.0(1)B.0(n)C.0(m)D.0(m+n)
18、線性表的順序存儲結構是一種(a)存儲結構。
A.隨機存取B.順序存取C.索引存取D.散列存取
19、順序表中,插入一個元素所需移動的元素平均數是(d)。
A.(n-l)/2B.nC.n+1D.(n+l)/2
10、循環鏈表的主要優點是(d
A.不再需要頭指針B.已知某結點位置后能容易找到其直接前驅
C.在進行插入、刪除運算時能保證鏈表不斷開
D.在表中任一結點出發都能掃描整個鏈表
11、不帶頭結點的單鏈表head為空的判定條件是()。
A.head==NULLB.head->next==NULL
C.head->next==headD.head!=NULL
12、在下列對順序表進行的操作中,算法時間復雜度為0(1)的是(a).
A.訪問第i個元素的前驅)B.在第i個元素之后插入一個新元素
(l<i<n)
C.刪除第i個元素(14i4n)D.對順序表中元素進行排序
13、已知指針p和q分別指向某單鏈表中第一個結點和最后一個結點。假設指針s指向另一個
單鏈表中某個結點,則在s所指結點之后插入上述鏈表應執行的語句為(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.線性表的順序存儲結構優于鏈表存儲結構
B.線性表的順序存儲結構適用于頻繁插入/刪除數據元素的情況
C.線性表的鏈表存儲結構適用于頻繁插入/刪除數據元素的情況
D.線性表的鏈表存儲結構優于順序存儲結構
15、在表長為n的順序表中,當在任何位置刪除一個元素的概率相同時,刪除一個元素所需
移動的平均個數為(a)。
A.(n-l)/2B.n/2C.(n+l)/2D.n
16、在一個單鏈表中,已知q所指結點是p所指結點的前驅結點,若在q和p之間插入一個
結點s,則執行(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的結點,實現刪除x的后繼的語句是(b)。
A.p=p->next;B.p->next=p->next->next;
C.p->next=p;D.p=p->next->next;
18、在頭指針為head且表長大于1的單循環鏈表中,指針p指向表中某個結點,若
p->next->next==head,則(d)。
A.p指向頭結點B.p指向尾結點C.p的直接后繼是頭結點
D.p的直接后繼是尾結點
二、填空題
1、設單鏈表的結點結構為(data,next)?已知指針p指向單鏈表中的結點,q指向新結點,
欲將q插入到P結點之后,則需要執行的語句:q-next=p-nexl,p-next=q。
答案:q->next=p->nextp->next=q
2、線性表的邏輯結構是線性結構,其所含元素的個數稱為線性表的長度。
答案:線性結構長度
3、寫出帶頭結點的雙向循環鏈表L為空表的條件L-prior=L-next=L。
答案:L->prior==L->next==L
4,帶頭結點的單鏈表head為空的條件是head-next==null。
答案:head->next==NULL
5、在一個單鏈表中刪除p所指結點的后繼結點時,應執行以下操作:
q=p->next;
p->next=q-next;
答案:q->next
四、程序分析填空題
1、函數GetElem實現返回單鏈表的第i個元素,請在空格處將算法補充完整。
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、函數實現單鏈表的插入算法,請在空格處將算法補充完整。
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、函數ListDeletjsq實現順序表刪除算法,請在空格處將算法補充完整。
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、函數實現單鏈表的刪除算法,請在空格處將算法補充完整。
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、寫出算法的功能。
intL(head){
node*head;
intn=0;
node*p;
p=head;
while(p!=NULL)
{p=p->next;
n++;
)
return(n);
}
答案:求單鏈表head的長度
五、綜合題
1、編寫算法,實現帶頭結點單鏈表的逆置算法。
答案: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、有兩個循環鏈表,鏈頭指針分別為L1和L2,要求寫出算法將L2鏈表鏈到L1鏈表之后,
且連接后仍保持循環鏈表形式。
答案: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、設一個帶頭結點的單向鏈表的頭指針為head,設計算法,將鏈表的記錄,按照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、編寫算法,將一個頭指針為head不帶頭結點的單鏈表改造為一個單向循環鏈表,并分析
算法的時間復雜度。
答案:
voidlinklist_c(Lnode*head)
{Lnode*p;p=head;
if(!p)returnERROR;
while(p->next!=NULL)
p=p->next;
p->next=head;
)
設單鏈表的長度(數據結點數)為N,則該算法的時間主要花費在查找鏈表最后一個結點上
(算法中的while循環),所以該算法的時間復雜度為0(N)o
5、已知head為帶頭結點的單循環鏈表的頭指針,鏈表中的數據元素依次為(al,
a2,a3,a4,…,an),A為指向空的順序表的指針。閱讀以下程序段,并回答問題:
(1)寫出執行下列程序段后的順序表A中的數據元素;
(2)簡要敘述該程序段的功能。
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)將循環單鏈表中偶數結點位置的元素值寫入順序表A
6,設順序表va中的數據元數遞增有序。試寫一算法,將x插入到順序表的適當位置上,以
保持該表的有序性。
答案:
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、假設線性表采用順序存儲結構,表中元素值為整型。閱讀算法f2,設順序表
L=(3,7,3,2,1,1,8,7,3),寫出執行算法f2后的線性表L的數據元素,并描述該算法的功能。
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)刪除順序表中重復的元素
8、已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲結構。試寫一算法,刪除表
中所有大于x且小于y的元素(若表中存在這樣的元素)同時釋放被刪除結點空間。
答案:
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、在帶頭結點的循環鏈表L中,結點的數據元素為整型,且按值遞增有序存放。給定兩個
整數a和b,且a〈b,編寫算法刪除鏈表L中元素值大于a且小于b的所有結點。
第三章棧和隊列
一、選擇題
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、判斷一個循環隊列Q(最多n個元素)為滿的條件是(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、設計一個判別表達式中括號是否配對的算法,采用(d)數據結構最佳。
A.順序表B.鏈表C.隊列D.棧
4、帶頭結點的單鏈表head為空的判定條件是(b)o
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的數組來實現循環隊列,且當rear和front的值分別為0,3。當從隊列
中刪除一個元素,再加入兩個元素后,rear和front的值分別為(b)。
A.1和5B.2和4C.4和2D.5和1
7、隊列的插入操作是在(a)。
A.隊尾B.隊頭C.隊列任意位置D.隊頭元素后
8、循環隊列的隊頭和隊尾指針分別為front和rear,則判斷循環隊列為空的條件是(a)。
A.front二二rearB.front==0
C.rear==0D.front=rear+l
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、表達式a*(b+c)-d的后綴表達式是(b)o
A.abcd+-B.abc+*dC.abc*+d-D.-+*abcd
11、將遞歸算法轉換成對應的非遞歸算法時,通常需要使用(b)來保存中間結果。
A.隊列B.棧C.鏈表D.樹
12、棧的插入和刪除操作在(b
A.棧底B.棧頂C.任意位置D.指定位置
13、五節車廂以編號1,2,3,4,5順序進入鐵路調度站(棧),可以得到(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分別為頭指針和尾指針,則插入一個結點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,則隊列的出隊序列是(b)o
A.1,2,3,4B.4,3,2,1
C.1,4,3,2D.3,4,1,2
17、依次在初始為空的隊列中插入元素a,b,c,d以后,緊接著做了兩次刪除操作,此時的隊
頭元素是(c)。
A.aB.bC.cD.d
18、正常情況下,刪除非空的順序存儲結構的堆棧的棧頂元素,棧頂指針top的變化是(d)。
A.top不變B.top=0C.top=top+lD.top=top-l
19、判斷一個循環隊列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、設計一個判別表達式中左右括號是否配對出現的算法,采用()數據結構最佳。
A.線性表的順序存儲結構B.隊列C.棧D.線性表的鏈式存儲
結構
21、當用大小為N的數組存儲順序循環隊列時,該隊列的最大長度為()。
A.NB.N+lC.N-lD,N-2
22、隊列的刪除操作是在()。
A.隊首B.隊尾C.隊前D.隊后
23、若讓元素1,2,3依次進棧,則出棧次序不可能是()。
A.3,2,1B.2,1,3C.3,1,2D.1,3,2
24、循環隊列用數組A[0,m-1]存放其元素值,已知其頭尾指針分別是front和rear,則當前
隊列中的元素個數是()。
A.(rear-front+m)%mB.rear-front+1
C.rear-front-1D.rear-front
25、在解決計算機主機和打印機之間速度不匹配問題時,通常設置一個打印數據緩沖區,主
機將要輸出的數據依次寫入該緩沖區,而打印機則從該緩沖區中取走數據打印。該緩沖區應
該是一個()結構。
A.堆棧B.隊列C.數組D.線性表
26、棧和隊列都是()。
A.鏈式存儲的線性結構B.鏈式存儲的非線性結構
C.限制存取點的線性結構D.限制存取點的非線性結構
27、在一個鏈隊列中,假定front和rear分別為隊頭指針和隊尾指針,刪除一個結點的操作
是()。
A.front=front->nextB.rear-rear->next
C.rear->next=frontD.front->next=rear
28、隊和棧的主要區別是()。
A.邏輯結構不同B.存儲結構不同
C.所包含的運算個數不同D.限定插入和刪除的位置不同
二、填空題
1、設棧S和隊列Q的初始狀態為空,元素61,62,63,64,05,06依次通過棧$,一個元素出棧后
即進入隊列Q,若6個元素出隊的序列是e2,e4,e3,e6,e5,el,則棧的容量至少應該
是0
答案:3
2、一個循環隊列Q的存儲空間大小為M,其隊頭和隊尾指針分別為front和rear,則循環隊列
中元素的個數為:。
答案:(rear-front+M)%M
3、在具有n個元素的循環隊列中,隊滿時具有個元素。
答案:n-1
4、設循環隊列的容量為70,現經過一系列的入隊和出隊操作后,front為20,rear為11,則
隊列中元素的個數為。
答案:61
5、已知循環隊列的存儲空間大小為20,且當前隊列的頭指針和尾指針的值分別為8和3,且
該隊列的當前的長度為。
四、程序分析填空題
1、己知棧的基本操作函數:
intInitStack(SqStack*S);//構造空棧
intStackEmpty(SqStack*S);//判斷棧空
intPush(SqStack*S,ElemTypee);〃入棧
intPop(SqStack*S,ElemType*e);〃出棧
函數conversion實現十進制數轉換為八進制數,請將函數補充完整。
voidconversion(){
InitStack(S);
scanf(“機I”,&N);
while(N){
⑴____________;
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->base[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
returnOK;
}
3、閱讀算法f2,并回答下列問題:
(1)設隊列Q=(1,3,5,2,4,6)。寫出執行算法f2后的隊列Q;
(2)簡述算法f2的功能。
voidf2(Queue*Q){
DataTypee;
if(!QueueEmpty(Q)){
6二DeQueue(Q);
f2(Q);
EnQueue(Q,e);
)
)
答案:(1)6,4,2,5,3,1(2)將隊列倒置
五、綜合題
1、假設以帶頭結點的循環鏈表表示隊列,并且只設一個指針指向隊尾結點,但不設頭指針,
請寫出相應的入隊列算法(用函數實現)。
答案: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是一個非空隊列,S是一個空棧。編寫算法,僅用隊列和棧的ADT函數和少量工
作變量,將隊列Q的所有元素逆置。
棧的ADT函數有:
voidmakeEmpty(SqStacks);置空棧
voidpush(SqStacks,ElemTypee);元素e入棧
ElemTypepop(SqStacks);出棧,返回棧頂元素
intisEmpty(SqStacks);判斷???/p>
隊列的ADT函數有:
voidenQueue(Queueq,ElemTypee);元素e入隊
ElemTypedeQueue(Queueq);出隊,返回隊頭元素
intisEmpty(Queueq);判斷隊空
答案:voidQueueinvent(Queueq)
(ElemTypex;
makeEmpty(SqStacks);
while(!isEmpty(Queueq))
{x=deQueue(Queueq);
push(SqStacks,ElemTypex);}
while(!isEmpty(SqStacks))
{x=pop(SqStacks);
enQueue(Queueq,ElemTypex);}
)
3、對于一個棧,給出輸入項A,B,C,D,如果輸入項序列為A,B,C,D,試給出全部可能的輸出
序列。
答案:出棧的可能序列:
ABCDABDCACDBACBDADCBBACDBADCBCADBCDA
CBDACBADCDBADCBA
第六章樹
一、選擇題
1、二叉樹的深度為k,則二叉樹最多有(C)個結點。
A.2kB.C.2k-lD.2k-1
2、用順序存儲的方法,將完全二叉樹中所有結點按層逐個從左到右的順序存放在一維數組
中,若結點R[i]有右孩子,則其右孩子是(B)?
A.R[2i-1]B.R[2i+1]C.R[2i]D.R[2/i]
3、設a,b為一棵二叉樹上的兩個結點,在中序遍歷時,a在b前面的條件是(B)。
A.a在b的右方B.a在b的左方C.a是b的祖先D.
a是b的子孫
4、設一棵二叉樹的中序遍歷序列:badce,后序遍歷序列:bdeca,則二叉樹先序遍歷序列
為()。
A.adbceB.decabC.debacD.abcde
5、在一棵具有5層的滿二叉樹中結點總數為(A)o
A.31B.32C.33D.16
6、由二叉樹的前序和后序遍歷序列(B)惟一確定這棵二叉樹。
A.能B.不能
7、某二叉樹的中序序列為ABCDEFG,后序序列為BDCAFGE,則其左子樹中結點數目為(C)。
A.3B.2C.4D.5
8、若以{4,5,6,7,8}作為權值構造哈夫曼樹,則該樹的帶權路徑長度為(C)。
A.67B.68C.69D.70
9、將一棵有100個結點的完全二叉樹從根這一層開始,每一層上從左到右依次對結點進行編
號,根結點的編號為1,則編號為49的結點的左孩子編號為(A)。
A.98B.99C.50D.48
10、表達式a*(b+c)-d的后綴表達式是(B
A.abcd+-B.abc+*d-C.abc*+d-D.-+*abcd
11、對某二叉樹進行先序遍歷的結果為ABDEFC,中序遍歷的結果為DBFEAC,則后序遍歷的結
果是(B)?
A.DBFEACB.DFEBCAC.BDFECAD.BDEFAC
12、樹最適合用來表示(C)。
A.有序數據元素B.無序數據元素C.元素之間具有分支層次關系的數
據D.元素之間無聯系的數據
13、表達式A*(B+C)/(D-E+F)的后綴表達式是(C)。
A.A*B+C/D-E+FB.AB*C+D/E-F+C.ABC+*DE-F+/D.ABCDED*+/-+
14、在線索二叉樹中,t所指結點沒有左子樹的充要條件是()。
A.t->left==NULLB.t->ltag==lC.
t->ltag==l&&t->left==NULLD.以上都不對
15、任何一棵二叉樹的葉結點在先序、中序和后序遍歷序列中的相對次序()?
A.不發生改變B.發生改變C.不能確定D.以上都不
對
16、假定在一棵二叉樹中,度為2的結點數為15,度為1的結點數為30,則葉子結點數為()
個。
A.15B.16C.17D.47
17、在下列情況中,可稱為二叉樹的是(B
A.每個結點至多有兩棵子樹的樹B.哈夫曼樹
C.每個結點至多有兩棵子樹的有序樹D.每個結點只有一棵子樹
18、用順序存儲的方法,將完全二叉樹中所有結點按層逐個從左到右的順序存放在一維數組
中,若結點R[i]有左孩子,則其左孩子是()o
A.R[2i-1]B.R[2i+1]C.R[2i]D.R[2/i]
19、下面說法中正確的是()。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網絡協議的詳細分類與分析試題及答案
- 嵌入式技術在智能家居中的應用試題及答案
- 公路工程可行性論證重點試題及答案
- 數據庫數據導入導出試題及答案
- 計算機系統基礎知識試題及答案
- 學習輔助的計算機三級數據庫試題及答案
- 提升公路工程考試通過率試題及答案
- 河道整治與生態修復考核試卷
- 數據庫設計的可擴展性分析試題及答案
- 網絡設備管理及優化試題及答案
- 2024年四川省水電投資經營集團普格電力有限公司招聘筆試參考題庫含答案解析
- MOOC 針灸學-經絡養生與康復-暨南大學 中國大學慕課答案
- 高考語文???80個成語
- 初中生心理健康教育在語文學科中的滲透的開題報告
- 2024年中考語文記敘文閱讀理解題型-詞語表達效果題(含解析)
- 國家勵志獎學金宣講
- 四年級下冊小數加減豎式計算400題及答案
- 酒店康樂項目營銷策劃
- 保護眼睛-家長進課堂課件
- 機床推廣策劃方案
- 《雅克·德里達》課件
評論
0/150
提交評論