版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)試題庫及答案
第一章概論
一、選擇題
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.棧
6、算法是[D)。
A.計算機程序B.解決問題的計算方法C.排序算法D.解決問題的有限運算序列
7、某算法的語句執(zhí)行頻度為〔3n+nlog2n+n2+8),其時間復(fù)雜度表示(C)。
A.0(n)B.0(nlogzn)C.0(n2)D.0(logzn)
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ù)類型
二、填空題
三、綜合題
23
1、將數(shù)量級0(1),0(N),0(N),0(N),0(NL0G2N),0(L0G2N),0⑵)按增長率由小到大排序。
23N
答案:0(1)O(log2N)0(N)O(Nlog2N)0(N)0(N)0(2)
一、填空題
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ù)的運算這三個方面的內(nèi)容。
3.數(shù)據(jù)結(jié)構(gòu)按邏輯結(jié)構(gòu)可分為兩大類,它們分別是線性結(jié)構(gòu)和非線性結(jié)構(gòu)。
8.數(shù)據(jù)的存儲結(jié)構(gòu)可用四種根本的存儲方法表示,它們分別是順序、鏈式、索引、散歹鼠
9.數(shù)據(jù)的運算最常用的有5種,它們分別是插入、刪除、修改、查找、排序。
二、單項選擇題
〔C)2.數(shù)據(jù)結(jié)構(gòu)中,與所使用的計算機無關(guān)的是數(shù)據(jù)的結(jié)構(gòu);
A)存儲B)物理C)邏輯D)物理和存儲
三、簡答題
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;
1.for(i=0;i<n;i++)
for(i=0;i<n;i++)
3.x=0;
4.i=l;
for(i=l;i<n;i++)
各小題所Wwhile(i<=n)[示,并確定
for(j=l;j<=n-i;j++)
i=i*3;
x++:
3),(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、假設(shè)長度為n的線性表采用順序存儲結(jié)構(gòu),在其第i個位置插入一個新元素算法的時間復(fù)雜度1)。
2
A.0(log2n)B.0(1)C.0(n)D.O(n)
2、假設(shè)一個線性表中最常用的操作是取第i個元素和找第i個元素的前趨元素,那么采用()存儲方
式最節(jié)省時間。
A.順序表B.單鏈表C.雙鏈表D.單循環(huán)鏈表
7、在雙向循環(huán)鏈表中,在p指針所指的結(jié)點后插入一個指針q所指向的新結(jié)點,修改指針的操作是(c)o
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;
10、線性表是n個U的有限序列。
A.表元素B.字符C.數(shù)據(jù)元素D.數(shù)據(jù)項
11、從表中任一結(jié)點出發(fā),都能掃描整個表的是
A.單鏈表B.順序表C.循環(huán)鏈表D.靜態(tài)鏈表
12、在具有n個結(jié)點的單鏈表上查找值為x的元素時,其時間復(fù)雜度為
A.0(n)B.0(1)C.0(n2)D.0(n-1)
15、在線性表的以下存儲結(jié)構(gòu)中,讀取元素花費的時間最少的是1)。
A.單鏈表B.雙鏈表C.循環(huán)鏈表D.順序表
16、在一個單鏈表中,假設(shè)刪除p所指向結(jié)點的后續(xù)結(jié)點,那么執(zhí)行()。
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ù)雜度為
A.0(1)B.0(n)C.0(m)D.0(m+n)
18、線性表的順序存儲結(jié)構(gòu)是一種[a)存儲結(jié)構(gòu)。N
A.隨機存取B.順序存取C.索引存取D.散列存取
19、順序表中,插入一個元素所需移動的元素平均數(shù)是()。
A.(n-1)/2B.nC.n+lD.(n+l)/2
11、不帶頭結(jié)點的單鏈表head為空的判定條件是[b)。
A.head==NULLB.head->next==NULL
C.head->next==headD.head!=NULL
12、在以下對順序表進行的操作中,算法時間復(fù)雜度為0(1)的是〔)。
A.訪問第i個元素的前驅(qū)[l<i<n)B.在第i個元素之后插入一個新元素(lViWn)
C.刪除第i個元素(1<iWn)D.對順序表中元素進行排序
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;
15、在表長為n的順序表中,當(dāng)在任何位置刪除一個元素的概率相同時,刪除一個元素所需移動的平均
個數(shù)為〔a〕。
A.(n-1)/2B.n/2C.(n+1)/2D.n
二、填空題
1、設(shè)單鏈表的結(jié)點結(jié)構(gòu)為〔data,next)。指針p指向單鏈表中的結(jié)點,q指向新結(jié)點,欲將q插入到p
結(jié)點之后,那么需要執(zhí)行的語句:;。
答案:q->next=p->nextp->next=q
3、寫出帶頭結(jié)點的雙向循環(huán)鏈表L為空表的條件。
答案:L->prior==L->next==L
5、在一個單鏈表中刪除p所指結(jié)點的后繼結(jié)點時,應(yīng)執(zhí)行以下操作:
q=p->next;
p->next=__q->next;
三、判斷題
3、用循環(huán)單鏈表表示的鏈隊列中,可以不設(shè)隊頭指針,僅在隊尾設(shè)置隊尾指針。X
4、順序存儲方式只能用于存儲線性結(jié)構(gòu)。*
5、在線性表的順序存儲結(jié)構(gòu)中,邏輯上相鄰的兩個元素但是在物理位置上不一定是相鄰的。乂
6、鏈式存儲的線性表可以隨機存取。乂
四、程序分析填空題
1、函數(shù)GetElem實現(xiàn)返回單鏈表的第i個元素,請在空格處將算法補充完整。
intGetElem(LinkListL,intirElemtype*e){
LinkListp;intj;
p=L->next;j=l;
while(p&&j<i){
p=p->next;++j;
}
if(!p||j>i)returnERROR;
*e=p->data;
returnOK;
}
2、函數(shù)實現(xiàn)單鏈表的插入算法,請在空格處將算法補充完整。
intListinsert(LinkListL,intirElemTypee){
LNode*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*/
3、函數(shù)ListDelet一_sq實現(xiàn)順序表刪除算法,請在空格處將算法補充完整。
intListDelete_sq(Sqlistinti){
intk;
if(i<l||i>L->length)returnERROR;
for(k=i-l;k<L->length-l;k++)
L->slist[k]=L->slist[k+1];
一一L->Length;
returnOK;
}
4、函數(shù)實現(xiàn)單鏈表的刪除算法,請在空格處將算法補充完整。
intListDelete(LinkListL,inti,ElemType*s){
LNoci一*p,*q;
intj;
p=L;j=0;
while((p->next!=NULL)&&(j<i-l)){
p=p->next;j++;
)
if(p->next==NULL|returnERROR;
q=p->next;
p->next=q->next;
*s=q->data;
free(q);
returnOK;
}/*listDelete*/
5、寫出算法的功能。
intL(head){
node*head;
intn=0;
node*p;
p=head;
while(p!=NULL)
{p=p->next;
n++;
)
return(n);
答案:求單鏈表head的長度
五、綜合題
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)鏈表,鏈頭指針分別為LI和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=Ll;p->next=L2;
)
3、設(shè)一個帶頭結(jié)點的單向鏈表的頭指針為head,設(shè)計算法,將鏈表的記錄,按照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不帶頭結(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,那么該算法的時間主要花費在查找鏈表最后一個結(jié)點上(算法中
的while循環(huán)),所以該算法的時間復(fù)雜度為0(N)。
5、head為帶頭結(jié)點的單循環(huán)鏈表的頭指針,鏈表中的數(shù)據(jù)元素依次為〔al,a2,a3,a4,an),a為
指向空的順序表的指針。閱讀以下程序段,并答復(fù)以下問題:
(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)位置上,以保持該表的
有序性。
答案:
voidInsert_sq(Sqlistva[],ElemTypex)
{inti,j,n;
n=length(va[]);
if(x>=va[i])
va[n]=x;
else
{i=0;
while(x>va[i])i++;
fbr(j=n-l;j>=I;j—)
va[j+l]=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){
int
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)刪除順序表中重復(fù)的元素
8、線性表中的元素以值遞增有序排列,并以單鏈表作存儲結(jié)構(gòu)。試寫一算法,刪除表中所有大于x且
小于y的元素〔假設(shè)表中存在這樣的元素)同時釋放被刪除結(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
{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é)點。
第三章棧和隊列
一、選擇題
2、判斷一個循環(huán)隊列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、設(shè)計一個判別表達式中括號是否配對的算法,采用〔)數(shù)據(jù)結(jié)構(gòu)最正確。
A.順序表B.鏈表C.隊列D.棧
4、帶頭結(jié)點的單鏈表head為空的判定條件是()。
A.head==NULLB.head->next==NULL
C.head->next!=NULLD.head!=NULL
5、一個棧的輸入序列為:1,2,3,4,那么棧的不可能輸出的序列是()。
A.1243B.2134C.1432D.4312E.3214
6、假設(shè)用一個大小為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、隊列的插入操作是在()。
A.隊尾B.隊頭C.隊列任意位置D.隊頭元素后
8、循環(huán)隊列的隊頭和隊尾指針分別為front和rear,那么判斷循環(huán)隊列為空的條件是〔)。
A.front==rearB.front==0
C.rear==0D.front=rear+l
9、一個順序棧S,其棧頂指針為top,那么將元素e入棧的操作是Uo
A.*S->top=e;S->top++;B.S->top++;*S->top=e;
C.*S->top=eD.S->top=e;
10、表達式a*(b+c)-d的后綴表達式是()。
A.abcd+-B.abc+*d-C.abc*+d-D.-+*abcd
11、將遞歸算法轉(zhuǎn)換成對應(yīng)的非遞歸算法時,通常需要使用〔)來保存中間結(jié)果。
A.隊列B.棧C.鏈表D.樹
12、棧的插入和刪除操作在()。
A.棧底B.棧頂C.任意位置D.指定位置
13、五節(jié)車廂以編號1,2,3,4,5順序進入鐵路調(diào)度站〔棧),可以得到()的編組。
A.3,4,5,1,2B.2,4,1,3,5
C.3,5,4,2,ID.1,3,5,2,4
14、判定一個順序棧S[棧空間大小為n)為空的條件是〔)。
A.S->top==0B.S->top!=0
C.S->top==nD.S->top!=n
15、在一個鏈隊列中,front和rear分別為頭指針和尾指針,那么插入一個結(jié)點s的操作為1)。
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,那么隊列的出隊序列是Uo
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-l
19、判斷一個循環(huán)隊列Ql空間大小為M)為空的條件是()。
A.Q->front==Q->rearB.Q->rear-Q->front-l==M
C.Q->front+l=Q->rearD.Q->rear+l=Q->front
20、設(shè)計一個判別表達式中左右括號是否配對出現(xiàn)的算法,采用1)數(shù)據(jù)結(jié)構(gòu)最正確。
A.線性表的順序存儲結(jié)構(gòu)B.隊列C.棧D.線性表的鏈式存儲結(jié)構(gòu)
21、當(dāng)用大小為N的數(shù)組存儲順序循環(huán)隊列時,該隊列的最大長度為〔)。
A.NB.N+1C.N-1D.N-2
22、隊列的刪除操作是在〔)。
A.隊首B.隊尾C.隊前D.隊后
23、假設(shè)讓元素1,2,3依次進棧,那么出棧次序不可能是1)。
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.(rear-front+m)%mB.rear-front+1
C.rear-front-lD.rear-front
25、在解決計算機主機和打印機之間速度不匹配問題時,通常設(shè)置一個打印數(shù)據(jù)緩沖區(qū),主機將要輸出
的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機那么從該緩沖區(qū)中取走數(shù)據(jù)打印。該緩沖區(qū)應(yīng)該是一個〔)結(jié)構(gòu)。
A.堆棧B.隊列C.數(shù)組D.線性表
26、棧和隊列都是()。
A.鏈式存儲的線性結(jié)構(gòu)B.鏈式存儲的非線性結(jié)構(gòu)
C.限制存取點的線性結(jié)構(gòu)D.限制存取點的非線性結(jié)構(gòu)
27、在一個鏈隊列中,假定front和rear分別為隊頭指針和隊尾指針,刪除一個結(jié)點的操作是〔)。
A.front=front->nextB.rear=rear->next
C.rear->next=frontD.front->next=rear
28、隊和棧的主要區(qū)別是1)。
A.邏輯結(jié)構(gòu)不同B.存儲結(jié)構(gòu)不同
C.所包含的運算個數(shù)不同D.限定插入和刪除的位置不同
二、填空題
1、設(shè)棧S和隊列Q的初始狀態(tài)為空,元素61,€2,€3,64送5,66依次通過棧5,一個元素出棧后即進入
隊列Q,假設(shè)6個元素出隊的序列是e2,e4,e3,e6,e5,el,那么棧的容量至少應(yīng)該是。
答案:3
2、一個循環(huán)隊列Q的存儲空間大小為M,其隊頭和隊尾指針分別為front和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é)點的地址即可;因此,單鏈表是一種隨機存取結(jié)構(gòu)。乂
3、以鏈表作為棧的存儲結(jié)構(gòu),出棧操作必須判別??盏那闆r。/
四、程序分析填空題
1、棧的根本操作函數(shù):
intInitStack(SqStack*S);//構(gòu)造空棧
intStackEmpty(SqStack*S);//判斷???/p>
intPush(SqStack*S,ElemTypee);//入棧
intPop(SqStack*S,ElemType*e);//出棧
函數(shù)conversion實現(xiàn)十進制數(shù)轉(zhuǎn)換為八進制數(shù),請將函數(shù)補充完整。
voidconversion(){
InitStack(S);
scanf('、%d",&N);
while(N){
⑴;
N=N/8;
)
while(12[){
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,并答復(fù)以下問題:
(1)設(shè)隊列Q=[1,3,5,2,4,6)0寫出執(zhí)行算法f2后的隊列Q;
(2)簡述算法f2的功能。
voidf2(Queue*Q){
DataTypee;
if(!QueueEmpty(Q)){
e=DeQueue(Q);
f2(Q);
EnQueue(Q,e);
}
}
答案:⑴6,425,3/⑵將隊列倒置
五、綜合題
1、假設(shè)以帶頭結(jié)點的循環(huán)鏈表表示隊列,并且只設(shè)一個指針指向隊尾結(jié)點,但不設(shè)頭指針,請寫出相應(yīng)
的入隊列算法〔用函數(shù)實現(xiàn))。
答案: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函數(shù)和少量工作變量,將隊列
Q的所有元素逆置。
棧的ADT函數(shù)有:
voidmakeEmpty(SqStacks);置空棧
voidpush(SqStackszElemType一);兀素一入棧
ElemTypepop(SqStacks);出棧,返回棧頂元素
intisEmpty(SqStacks);判斷棧空
隊列的ADT函數(shù)有:
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
第五章數(shù)組和廣義表
一、選擇題
1、設(shè)廣義表L=((a,b,c)),那么L的長度和深度分別為(C)o
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ù)組A[0..5,0..6]的每個元素占5個字節(jié),將其按列優(yōu)先次序存儲在起始地址為1000的內(nèi)存單元
中,那么元素A[5][5]的地址是(A)o
A.1175B.1180C.1205D.1210
6、廣義表G=(a,b(c,d,(e,f)),g)的長度是(A)。
A.3B.4C.7D.8
7、采用稀疏矩陣的三元組表形式進行壓縮存儲,假設(shè)要完成對三元組表進行轉(zhuǎn)置,只要將行和列對換,
這種說法(B)。
A.正確B.錯誤C.無法確定D.以上均不對
8、廣義表(a,b,c)的表尾是1B)o
A.b,cB.(b,c)C?cD.(c)
9、常對數(shù)組進行兩種根本操作是[C)。
A.建立和刪除B.索引和修改C.查找和修改D.查找與索引
10、對一些特殊矩陣采用壓縮存儲的目的主要是為了[D)。
A.表達變得簡單B.對矩陣元素的存取變得簡單
C.去掉矩陣中的多余元素D.減少不必要的存儲空間的開銷
11、設(shè)有一個10階的對稱矩陣A,采用壓縮存儲方式,以行序為主存儲,all為第1一個元素,其存儲地
址為1,每元素占1個地址空間,那么a85的地址為〔)。
A.13B.33C.18D.40
12、設(shè)矩陣A是一個對稱矩陣,為了節(jié)省存儲,將其下三角局部按行序存放在一維數(shù)組n-1)/2]
中,對下三角局部中任一元素ai,j(i>=j),在一維數(shù)組B的下標位置k的值是[B)。
A.i(i-1)/2+j-lB.i(i-1)/2+jC.i(i+1)/2+j-lD.i(i+1)/2+j
13、廣義表A=((a),a)的表頭是(B)o
A.aB.(a)C.bD.((a))
14、稀疏矩陣一般的壓縮存儲方法有兩種,即9)。
A.二維數(shù)組和三維數(shù)組B.三元組和散列C.三元組和十字鏈表D.散列和十字鏈表
15、假設(shè)以三元組表表示稀疏矩陣,那么與如下圖三元組表對應(yīng)的4X5的稀疏矩陣是(注:矩陣的行
列下標均從1開始)〔B)。
‘0-8060)(0-8060、
7000070003
A.B.012-8
00000-50400]
1-50400)00000J2146
217
3253
,0-8060](0-8060]431-5
00003700005334
C.D.
70000-50403
「50400)100000,
16、以下有關(guān)廣義表的表述中,正確的選項是[A)。
A.由0個或多個原子或子表構(gòu)成的有限序列B.至少有一個元素是子表
C.不能遞歸定義D.不能為空表
17、對廣義表1=((a,b),((c,d),(e,f)))執(zhí)行head(tail(head(tail(L))))操作的結(jié)果是()。
A.的B.eC.(e)D.(e,f)
二、判斷題
。1、廣義表中原子個數(shù)即為廣義表的長度。
。2、一個稀疏矩陣采用三元組表示,假設(shè)把三元組中有關(guān)行下標與列下標的值互換,并把mu和nu的
值進行互換,那么完成了矩陣轉(zhuǎn)置。
[?)3、稀疏矩陣壓縮存儲后,必會失去隨機存取功能。
【)4、廣義表的長度是指廣義表中括號嵌套的層數(shù)。
[?)5、廣義表是一種多層次的數(shù)據(jù)結(jié)構(gòu),其元素可以是單原子也可以是子表。
三、填空題
1、二維數(shù)組采用行序為主方式存儲,每個元素占k個存儲單元,并且第一個元素的存儲地址是
LOC(A[0][0]),那么A[i][j]的地址是Lo那A[0][O])+(i*N+j)*k。
2、廣義表運算式HEAD(TA工L((a,b,c),(x,y,z)))的結(jié)果是:(x,y,z)□
3、二維數(shù)組,可以按照兩種不同的存儲方式。
4、稀疏矩陣的壓縮存儲方式有:和。
四、綜合題
1、現(xiàn)有一個稀疏矩陣,請給出它的三元組表。
答案:
第六章樹
一、選擇題
1、二叉樹的深度為k,那么二叉樹最多有1C)個結(jié)點。
A.2kB.C.2k-lD.2k-l
2、用順序存儲的方法,將完全二叉樹中所有結(jié)點按層逐個從左到右的順序存放在一維數(shù)組R[l..N]中,
假設(shè)結(jié)點R[i]有右孩子,那么其右孩子是[B)。
A.R[2i-1]B.R[2i+1]C.R[2i]D.R[2/i]
3、設(shè)a,b為一棵二叉樹上的兩個結(jié)點,在中序遍歷時,a在b前面的條件是〔B)o
A.a在b的右方B.a在b的左方C.a是b的祖先D.a是b的子孫
4、設(shè)一棵二叉樹的中序遍歷序列:badce,后序遍歷序列:bdeca,那么二叉樹先序遍歷序列為〔)。
A.adbceB.decabC.debacD.abode
5、在一棵具有5層的滿二叉樹中結(jié)點總數(shù)為(A)。
A.31B.32C.33D.16
6、由二叉樹的前序和后序遍歷序列(B)惟一確定這棵二叉樹。
A.能B.不能
7、某二叉樹的中序序列為ABCDEFG,后序序列為BDCAFGE,那么其左子樹中結(jié)點數(shù)目為[C)。
A.3B.2C.4D.5
8、假設(shè)以{4,5,6,7,8}作為權(quán)值構(gòu)造哈夫曼樹,那么該樹的帶權(quán)路徑長度為〔C)。
A.67B.68C.69D.70
9、將一棵有100個結(jié)點的完全二叉樹從根這一層開始,每一層上從左到右依次對結(jié)點進行編號,根結(jié)點
的編號為1,那么編號為49的結(jié)點的左孩子編號為[A)。
A.98B.99C.50D.48
10、表達式a*(b+c)-d的后綴表達式是[B)o
A.abcd+-B.abc+*d-C.abc*+d-D.-+*abcd
11、對某二叉樹進行先序遍歷的結(jié)果為ABDEFC,中序遍歷的結(jié)果為DBFEAC,那么后序遍歷的結(jié)果是
A.DBFEACB.DFEBCAC.BDFECAD.BDEFAC
12、樹最適合用來表示[C)。
A.有序數(shù)據(jù)元素B.無序數(shù)據(jù)元素C.元素之間具有分支層次關(guān)系的數(shù)據(jù)D.元
素之間無聯(lián)系的數(shù)據(jù)
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所指結(jié)點沒有左子樹的充要條件是1)。
A.t->left==NULLB.t->ltag==lC.t->ltag==l&&t->left==NULLD.以上都不對
15、任何一棵二叉樹的葉結(jié)點在先序、中序和后序遍歷序列中的相對次序()。
A.不發(fā)生改變B.發(fā)生改變C.不能確定D.以上都不對
16、假定在一棵二叉樹中,度為2的結(jié)點數(shù)為15,度為1的結(jié)點數(shù)為30,那么葉子結(jié)點數(shù)為〔)個。
A.15B.16C.17D.47
17、在以下情況中,可稱為二叉樹的是(B)o
A.每個結(jié)點至多有兩棵子樹的樹B.哈夫曼樹
C.每個結(jié)點至多有兩棵子樹的有序樹D.每個結(jié)點只有一棵子樹
18、用順序存儲的方法,將完全二叉樹中所有結(jié)點按層逐個從左到右的順序存放在一維數(shù)組R[L.n]中,
假設(shè)結(jié)點R用有左孩子,那么其左孩子是()。
A.R[2i-1]B.R[2i+1]C.R[2i]D.R[2/i]
19、下面說法中正確的選項是1)。
A.度為2的樹是二叉樹B.度為2的有序樹是二叉樹
C.子樹有嚴格左右之分的樹是二叉樹D.子樹有嚴格左右之分,且度不超過2的樹是二叉樹
20、樹的先根序列等同于與該樹對應(yīng)的二叉樹的()。
A.先序序列B.中序序列C.后序序列D.層序序列
21、按照二叉樹的定義,具有3個結(jié)點的二叉樹有(C)種。
A.3B.4C.5D.6
22、由權(quán)值為3,6,7,2,5的葉子結(jié)點生成一棵哈夫曼樹,它的帶權(quán)路徑長度為(A)。
A.51B.23C.53D.74
二、判斷題
。1、存在這樣的二叉樹,對它采用任何次序的遍歷,結(jié)果相同。
。2、中序遍歷一棵二叉排序樹的結(jié)點,可得到排好序的結(jié)點序列。
U3、對于任意非空二叉樹,要設(shè)計其后序遍歷的非遞歸算法而不使用堆棧結(jié)構(gòu),最適合的方法是對
該二叉樹采用三叉鏈表。
〔)4、在哈夫曼編碼中,當(dāng)兩個字符出現(xiàn)的頻率相同時,其編碼也相同,對于這種情況應(yīng)做特殊處理。
[?)5、一個含有n個結(jié)點的完全二叉樹,它的高度是Llog2n」+1。
〔J〕6、完全二叉樹的某結(jié)點假設(shè)無左孩子,那么它必是葉結(jié)點。
三、填空題
1、具有n個結(jié)點的完全二叉樹的深度是Llo&n」+1。
2、哈夫曼樹是其樹的帶權(quán)路徑長度最小的二叉樹。
3、在一棵二叉樹中,度為0的結(jié)點的個數(shù)是nO,度為2的結(jié)點的個數(shù)為n2,那么有110=二+1。
4、樹內(nèi)各結(jié)點度的最大值稱為樹的度。
四、代碼填空題
1、函數(shù)工nOrderTraverse(Bitreebt)實現(xiàn)二叉樹的中序遍歷,請在空格處將算法補充完整。
voidInOrderTraverse(BiTreebt){
if0(
InOrderTraverse(bt->lchild);
printf(''%c〃rbt->data);
r
}
}
2、函數(shù)depth實現(xiàn)返回二叉樹的高度,請在空格處將算法補充完整。
intdepth(Bitree*t){
if(t==NULL)
return0;
else{
hl=depth(t->lchild);
hr=depth(t->rchild);
if(hl>hr)
returnhl+1;
else
returnhr+1;
}
}
3、寫出下面算法的功能。
Bitree*function(Bitree*bt){
Bitree
if(bt==NULL)
t=NULL;
else(
t=(Bitree*)malloc(sizeof(Bitree));
t->data=bt->data;
tl=function(bt->left);
t2=function(bt->right);
t->left=t2;
t->right=tl;
}
return(t);
}
答案:交換二叉樹結(jié)點左右子樹的遞歸算法
4、寫出下面算法的功能。
voidfunction(Bitree*t){
if(p!=NULL){
function(p->lchild);
function(p->rchild);
printf(''%d",p->data);
答案:二叉樹后序遍歷遞歸算法
五、綜合題
1、假設(shè)以有序?qū)Γ糚,C>表示從雙親結(jié)點到孩子結(jié)點的一條邊,假設(shè)樹中邊的集合為
{<a,b>,<a,d>,<a,c>,<c,e>,<c,f>,<c,g>,<c,h>,<e,i>,<e,j>,<g,k>},請答復(fù)以下問
(1)哪個結(jié)點是根結(jié)點?
〔2)哪些結(jié)點是葉子結(jié)點?
〔3)哪些結(jié)點是k的祖先?
[4)哪些結(jié)點是j的兄弟?
[5)樹的深度是多少?。
2、假設(shè)一棵二叉樹的先序序列為EBADCFHG工KJ,中序序列為ABCDEFGH工JK,請畫出該二叉樹。
3、假設(shè)用于通訊的電文僅由8個字母A、B、C、D、E、F、G、H組成,字母在電文中出現(xiàn)的頻率分別為:
0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。請為這8個字母設(shè)計哈夫曼編碼。
答案:?!?/p>
4、二叉樹的先序遍歷序列為ABCDEFGH,中序遍歷序列為CBEDFAGH,畫出二叉樹。
答案:二叉樹形態(tài)
5、試用權(quán)集合{12,4,5,6,1,2}構(gòu)造哈夫曼樹,并計算哈夫曼樹的帶權(quán)路徑長度。
答案:
WPL=12*1+(4+5+6)*3+(1+2)*4=12+45+12=69
6、權(quán)值集合為{5,7,2,3,6,9},要求給出哈夫曼樹,并計算帶權(quán)路徑長度WPL。
答案:(1)樹形態(tài):
(2)帶權(quán)路徑長度:WPL=(6+7+9)*2+5*3+(2+3)*4=44+15+20=79
7、一棵二叉樹的先序序列:ABDGJEHCFIKL;中序序列:DJGBEHACKILFo畫出二叉樹的形態(tài)。
A
答案:'
8、一份電文中有6種字符:A,B,C,D,E,F,它們的出現(xiàn)頻率依次為16,5,9,3,30,1,完成問題:
[1)設(shè)計一棵哈夫曼樹;〔畫出其樹結(jié)構(gòu))
〔2)計算其帶權(quán)路徑長度WPL;
答案:(1)樹形態(tài):
(2)帶權(quán)路徑長度:WPL=30*l+16*2+9*3+5*4+(l+3)*5=30+32+27+20+20=129
9、某森林的二叉樹如下所示,試畫出它所表示的森林。
答案:
10、有一分電文共使用5個字符;a,b,c,d,e,它們的出現(xiàn)頻率依次為4、7、5、2、9,試構(gòu)造哈夫曼樹,
并給出每個字符的哈夫曼編碼。
11、畫出與以下圖所示的森林相對應(yīng)的二叉樹,并指出森林中的葉子結(jié)點在二叉樹中具有什么特點。
12、如下所示的二叉樹,請寫出先序、中序、后序遍歷的序列。
答案:先序:FDBACEGIHJ
中序:ABCDEFGHIJ
后序:ACBEDHJIGF
六、編程題
1、編寫求一棵二叉樹中結(jié)點總數(shù)的算法。
答案:〔以先序遍歷的方法為例)
voidcount_preorder(Bitree*t,int*n)
(
if(t!=NULL)
{*n++;
count_preorder(t->lchild);
count_preorder(t->lchild);}
第七章圖
一、選擇題
1、12、對于具有n個頂點的圖,假設(shè)采用鄰接矩陣表示,那么該矩陣的大小為Uo
A.nB.n2C.n-lD.(n-1)2
2、如果從無向圖的任一頂點出發(fā)進行一次深度優(yōu)先搜索即可訪問所有頂點,那么該圖一定是〔)。
A.完全圖B.連通圖C.有回路D.一棵樹
3、關(guān)鍵路徑是事件結(jié)點網(wǎng)絡(luò)中〔)。
A.從源點到匯點的最長路徑B.從源點到匯點的最短路徑
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年民政局婚姻解除協(xié)議規(guī)范格式
- 2024年家居裝修中介服務(wù)協(xié)議
- 2024專業(yè)外包工作人員勞動協(xié)議
- 2024年紡織用紗線采購協(xié)議
- 2024專業(yè)化成品油交易協(xié)議典范
- 2024個人貸款反擔(dān)保協(xié)議典范
- 2024年度房產(chǎn)銷售專屬代理協(xié)議
- 文書模板-《產(chǎn)業(yè)園咨詢服務(wù)合同》
- 定制化技術(shù)服務(wù)方案協(xié)議2024
- 2024年杭州勞務(wù)派遣服務(wù)協(xié)議樣本
- 《護理文書書寫》課件
- 2024年小轎車買賣合同標準版本(三篇)
- 動火作業(yè)施工方案5篇
- 河南省鄭州市第四中學(xué)教育集團2024-2025學(xué)年七年級上學(xué)期期中地理試題
- 八年級生物中考備考計劃
- 2024-2030年全球及中國濕巾和衛(wèi)生紙行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 2024高考物理一輪復(fù)習(xí) 第13講 牛頓第二定律的基本應(yīng)用(課件)
- 公務(wù)員2019年國考《申論》真題及答案(省級)
- 浙江省金華市蘭溪市2023-2024學(xué)年五年級上學(xué)期期中數(shù)學(xué)試卷
- 2024新人教版道法一年級上冊第三單元:養(yǎng)成良好習(xí)慣大單元整體課時教學(xué)設(shè)計
- 醫(yī)療器械質(zhì)量安全風(fēng)險會商管理制度
評論
0/150
提交評論