太原理工大學(xué)數(shù)據(jù)結(jié)構(gòu)試題庫(kù)及答案
《太原理工大學(xué)數(shù)據(jù)結(jié)構(gòu)試題庫(kù)及答案》由會(huì)員分享,可在線閱讀,更多相關(guān)《太原理工大學(xué)數(shù)據(jù)結(jié)構(gòu)試題庫(kù)及答案(40頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 數(shù)據(jù)結(jié)構(gòu)試題庫(kù)及答案 第一章 概論 一、選擇題 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. 樹 C. 廣
2、義表 D. 棧 6、算法是( D )。 A. 計(jì)算機(jī)程序 B. 解決問題的計(jì)算方法 C. 排序算法 D. 解決問題的有限運(yùn)算序列 7、某算法的語(yǔ)句執(zhí)行頻度為(3n+nlog2n+n2+8),其時(shí)間復(fù)雜度表示( C )。 A. O(n) B. O(nlog2n) C. O(n2) D. O(log2n) 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ù)類型
3、 二、填空題 三、綜合題 1、將數(shù)量級(jí)O(1),O(N),O(N2),O(N3),O(NLOG2N),O(LOG2N),O(2N)按增長(zhǎng)率由小到大排序。 答案: O(1) O(log2N) O(N) O(Nlog2N) O(N2) 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ù)的存儲(chǔ)結(jié)構(gòu)和數(shù)據(jù)的運(yùn)算這三個(gè)方面的內(nèi)容。 3. 數(shù)據(jù)結(jié)構(gòu)按邏輯結(jié)構(gòu)可分為兩大類,它們分別是線性結(jié)構(gòu)和非線性結(jié)構(gòu)。 授課:XXX 8.?dāng)?shù)據(jù)的存儲(chǔ)
4、結(jié)構(gòu)可用四種基本的存儲(chǔ)方法表示,它們分別是順序、鏈?zhǔn)?、索引、散列? 9. 數(shù)據(jù)的運(yùn)算最常用的有5種,它們分別是插入、刪除、修改、查找、排序。 二、單項(xiàng)選擇題 ( C )2. 數(shù)據(jù)結(jié)構(gòu)中,與所使用的計(jì)算機(jī)無(wú)關(guān)的是數(shù)據(jù)的 結(jié)構(gòu); A) 存儲(chǔ) B) 物理 C) 邏輯 D) 物理和存儲(chǔ) 三、簡(jiǎn)答題 1.數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型兩個(gè)概念之間有區(qū)別嗎? 答:簡(jiǎn)單地說,數(shù)據(jù)結(jié)構(gòu)定義了一組按某些關(guān)系結(jié)合在一起的數(shù)組元素。數(shù)據(jù)類型不僅定義了一組帶結(jié)構(gòu)的數(shù)據(jù)元素,而且還在其上定義了一組操作。 2. 簡(jiǎn)述線性結(jié)構(gòu)與非線性結(jié)構(gòu)
5、的不同點(diǎn)。
答:線性結(jié)構(gòu)反映結(jié)點(diǎn)間的邏輯關(guān)系是一對(duì)一的,非線性結(jié)構(gòu)反映結(jié)點(diǎn)間的邏輯關(guān)系是多對(duì)多的。
四、分析下面各程序段的時(shí)間復(fù)雜度2. s=0;
for (i=0; i 6、i=1;
while(i<=n)
i=i*3;
Mn nn nn log3n
五、設(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) }
授課:XXX
2. D={d1,d2,…,d9}
R={(d1,d2),(d1,d3),(d3,d4),(d3,d6),(d6,d8),(d4,d5), (d6,d7),(d8,d9) }
7、3.D={d1,d2,…,d9}
R={(d1,d3),(d1,d8),(d2,d3),(d2,d4),(d2,d5),(d3,d9), (d5,d6),(d8,d9),(d9,d7), (d4,d7), (d4,d6)}
第二章 線性表
一、選擇題
1、若長(zhǎng)度為n的線性表采用順序存儲(chǔ)結(jié)構(gòu),在其第i個(gè)位置插入一個(gè)新元素算法的時(shí)間復(fù)雜度( )。
A. O(log2n) B.O(1) C. O(n) D.O(n2)
2、若一個(gè)線性表中最常用的操作是取第i個(gè)元素和找第i個(gè)元素的前趨元素,則采用( )存儲(chǔ)方式最節(jié)省時(shí)間。
A. 順序表 8、 B. 單鏈表 C. 雙鏈表 D. 單循環(huán)鏈表
7、在雙向循環(huán)鏈表中,在p指針?biāo)傅慕Y(jié)點(diǎn)后插入一個(gè)指針q所指向的新結(jié)點(diǎn),修改指針的操作是( 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= 9、p;p->next=q;p->next=q;
10、線性表是n個(gè)( )的有限序列。
A. 表元素 B. 字符 C. 數(shù)據(jù)元素 D. 數(shù)據(jù)項(xiàng)
11、從表中任一結(jié)點(diǎn)出發(fā),都能掃描整個(gè)表的是( )。
A. 單鏈表 B. 順序表 C. 循環(huán)鏈表 D. 靜態(tài)鏈表
12、在具有n個(gè)結(jié)點(diǎn)的單鏈表上查找值為x的元素時(shí),其時(shí)間復(fù)雜度為( )。
A. O(n) B. O(1) C. O(n2) D. O(n-1)
15、在線性表的下列存儲(chǔ)結(jié)構(gòu)中,讀取元素花費(fèi)的時(shí)間最少的是( )。
A. 單鏈表 B. 雙鏈表 10、 C. 循環(huán)鏈表 D. 順序表
16、在一個(gè)單鏈表中,若刪除p所指向結(jié)點(diǎn)的后續(xù)結(jié)點(diǎn),則執(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、將長(zhǎng)度為n的單鏈表連接在長(zhǎng)度為m的單鏈表之后的算法的時(shí)間復(fù)雜度為( )。
A. O(1) B. O(n) C. O(m) D. O(m+n)
18、線性表的順序存儲(chǔ)結(jié)構(gòu)是一種( a )存儲(chǔ)結(jié)構(gòu)。 N
A. 隨機(jī)存取 B. 順序存取 C 11、. 索引存取 D. 散列存取
19、順序表中,插入一個(gè)元素所需移動(dòng)的元素平均數(shù)是( )。
A. (n-1)/2 B. n C. n+1 D. (n+1)/2
11、不帶頭結(jié)點(diǎn)的單鏈表head為空的判定條件是( b )。
授課:XXX
A. head==NULL B. head->next==NULL
C. head->next==head D. head!=NULL
12、在下列對(duì)順序表進(jìn)行的操作中,算法時(shí)間復(fù)雜度為O(1)的是( )。
A. 12、訪問第i個(gè)元素的前驅(qū)(1<) B. 在第i個(gè)元素之后插入一個(gè)新元素()
C. 刪除第i個(gè)元素() 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;
15、 13、在表長(zhǎng)為n的順序表中,當(dāng)在任何位置刪除一個(gè)元素的概率相同時(shí),刪除一個(gè)元素所需移動(dòng)的平均個(gè)數(shù)為( a )。
A. (n-1)/2 B. n/2 C. (n+1)/2 D. n
二、填空題
1、設(shè)單鏈表的結(jié)點(diǎn)結(jié)構(gòu)為(data,next)。已知指針p指向單鏈表中的結(jié)點(diǎn),q指向新結(jié)點(diǎn),欲將q插入到p結(jié)點(diǎn)之后,則需要執(zhí)行的語(yǔ)句: ; 。
答案:q->next=p->next p->next=q
3、寫出帶頭結(jié)點(diǎn)的雙向循環(huán)鏈表L為空表的條件 。
答案:L->pr 14、ior==L->next==L
5、在一個(gè)單鏈表中刪除p所指結(jié)點(diǎn)的后繼結(jié)點(diǎn)時(shí),應(yīng)執(zhí)行以下操作:
q = p->next;
p->next=_ q->next ___;
三、判斷題
3、用循環(huán)單鏈表表示的鏈隊(duì)列中,可以不設(shè)隊(duì)頭指針,僅在隊(duì)尾設(shè)置隊(duì)尾指針。x
4、順序存儲(chǔ)方式只能用于存儲(chǔ)線性結(jié)構(gòu)。O
5、在線性表的順序存儲(chǔ)結(jié)構(gòu)中,邏輯上相鄰的兩個(gè)元素但是在物理位置上不一定是相鄰的。O
6、鏈?zhǔn)酱鎯?chǔ)的線性表可以隨機(jī)存取。O
四、程序分析填空題
1、函數(shù)GetElem實(shí)現(xiàn)返回單鏈表的第i個(gè)元素,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。
int GetElem(LinkList 15、L,int i,Elemtype *e){
LinkList p;int j;
p=L->next;j=1;
while(p&&jnext ;++j;
}
if(!p||j>i) return ERROR;
授課:XXX
*e= p->data ;
return OK;
}
2、函數(shù)實(shí)現(xiàn)單鏈表的插入算法,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。
int ListInsert(LinkList L,int i,ElemType e){
LNode *p,*s;int j;
p=L;j=0;
16、 while((p!=NULL)&&(j 17、
int ListDelete_sq(Sqlist *L,int i){
int k;
if(i<1||i>L->length) return ERROR;
for(k=i-1;k 18、ype *s){
LNode *p,*q;
int j;
p=L;j=0;
while(( p->next!=NULL )&&(j 19、*listDelete*/
5、寫出算法的功能。
int L(head){
node * head;
int n=0;
授課:XXX
node *p;
p=head;
while(p!=NULL)
{ p=p->next;
n++;
}
return(n);
}
答案:求單鏈表head的長(zhǎng)度
五、綜合題
1、編寫算法,實(shí)現(xiàn)帶頭結(jié)點(diǎn)單鏈表的逆置算法。
答案:void invent(Lnode *head)
{Lnode *p,*q;
if(!head->next) return ERROR; 20、
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(zhǎng)1和L2,要求寫出算法將L2鏈表鏈到L1鏈表之后,且連接后仍保持循環(huán)鏈表形式。
答案:void merge(Lnode *L1, Lnode *L2)
{Lnode *p,*q ;
while(p->next!=L1)
p=p->next;
while(q->next!= 21、L2)
q=q->next;
q->next=L1; p->next =L2;
}
3、設(shè)一個(gè)帶頭結(jié)點(diǎn)的單向鏈表的頭指針為head,設(shè)計(jì)算法,將鏈表的記錄,按照data域的值遞增排序。
答案:void assending(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; }
els 22、e
{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ù)雜度。
授課:XXX
答案:
void linklist_c(Lnode *head)
{Lnode *p; p=head;
if(!p) return ERROR;
while(p->next!=NULL)
p=p->next;
p->next=head;
23、 }
設(shè)單鏈表的長(zhǎng)度(數(shù)據(jù)結(jié)點(diǎn)數(shù))為N,則該算法的時(shí)間主要花費(fèi)在查找鏈表最后一個(gè)結(jié)點(diǎn)上(算法中的while循環(huán)),所以該算法的時(shí)間復(fù)雜度為O(N)。
5、已知head為帶頭結(jié)點(diǎn)的單循環(huán)鏈表的頭指針,鏈表中的數(shù)據(jù)元素依次為(a1,a2,a3,a4,…,an),A為指向空的順序表的指針。閱讀以下程序段,并回答問題:
(1)寫出執(zhí)行下列程序段后的順序表A中的數(shù)據(jù)元素;
(2)簡(jiǎn)要敘述該程序段的功能。
if(head->next!=head)
{
p=head->next;
A->length=0;
while(p->next!=head)
{
p=p->next;
A- 24、>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)位置上,以保持該表的有序性。
答案:
void Insert_sq(Sqlist va[], ElemType x)
{int i, j, n;
n=length(va[]);
if(x>=va[i])
va[n]=x;
else
{i=0;
25、
while(x>va[i]) i++;
for(j=n-1;j>=I;j--)
va[j+1]=va[j];
va[i]=x; }
n++;
}
授課:XXX
7、假設(shè)線性表采用順序存儲(chǔ)結(jié)構(gòu),表中元素值為整型。閱讀算法f2,設(shè)順序表L=(3,7,3,2,1,1,8,7,3),寫出執(zhí)行算法f2后的線性表L的數(shù)據(jù)元素,并描述該算法的功能。
void f2(SeqList *L){
int i,j,k;
k=0;
for(i=0;i 26、
if(j==k){
if(k!=i)L->data[k]=L->data[i];
k++;
}
}
L->length=k;
}
答案:
(3,7,2,1,8) 刪除順序表中重復(fù)的元素
8、已知線性表中的元素以值遞增有序排列,并以單鏈表作存儲(chǔ)結(jié)構(gòu)。試寫一算法,刪除表中所有大于x且小于y的元素(若表中存在這樣的元素)同時(shí)釋放被刪除結(jié)點(diǎn)空間。
答案:
void Delete_list(Lnode *head, ElemType x, ElemType y)
{Lnode *p, *q;
if(!he 27、ad) return ERROR;
p=head; q=p;
while(!p)
{if(p->data>x) && (p->data 28、大于a且小于b的所有結(jié)點(diǎn)。
第三章 棧和隊(duì)列
授課:XXX
一、選擇題
2、判斷一個(gè)循環(huán)隊(duì)列Q(最多n個(gè)元素)為滿的條件是(c )。
A. Q->rear==Q->front B. Q->rear==Q->front+1
C. Q->front==(Q->rear+1)%n D. Q->front==(Q->rear-1)%n
3、設(shè)計(jì)一個(gè)判別表達(dá)式中括號(hào)是否配對(duì)的算法,采用( )數(shù)據(jù)結(jié)構(gòu)最佳。
A. 順序表 B. 鏈表 C. 隊(duì)列 D. 棧
4、帶頭結(jié)點(diǎn)的單鏈表head為空的判定條件是( )。 29、
A. head==NULL B. head->next==NULL
C. head->next!=NULL D. head!=NULL
5、一個(gè)棧的輸入序列為:1,2,3,4,則棧的不可能輸出的序列是( )。
A. 1243 B. 2134 C. 1432 D. 4312 E. 3214
6、若用一個(gè)大小為6的數(shù)組來實(shí)現(xiàn)循環(huán)隊(duì)列,且當(dāng)rear和front的值分別為0,3。當(dāng)從隊(duì)列中刪除一個(gè)元素,再加入兩個(gè)元素后,rear和front的值分別為( )。
A. 1和5 B. 2和4 C. 4和2 D 30、. 5和1
7、隊(duì)列的插入操作是在( )。
A. 隊(duì)尾 B. 隊(duì)頭 C. 隊(duì)列任意位置 D. 隊(duì)頭元素后
8、循環(huán)隊(duì)列的隊(duì)頭和隊(duì)尾指針分別為front和rear,則判斷循環(huán)隊(duì)列為空的條件是( )。
A. front==rear B. front==0
C. rear==0 D. front=rear+1
9、一個(gè)順序棧S,其棧頂指針為top,則將元素e入棧的操作是( )。
A. *S->top=e;S->top++; B. S->top++;*S->top=e;
C. *S->top=e 31、 D. S->top=e;
10、表達(dá)式a*(b+c)-d的后綴表達(dá)式是( )。
A. abcd+- B. abc+*d- C. abc*+d- D. -+*abcd
11、將遞歸算法轉(zhuǎn)換成對(duì)應(yīng)的非遞歸算法時(shí),通常需要使用( )來保存中間結(jié)果。
A. 隊(duì)列 B. 棧 C. 鏈表 D. 樹
12、棧的插入和刪除操作在( )。
A. 棧底 B. 棧頂 C. 任意位置 D. 指定位置
13、五節(jié)車廂以編號(hào)1,2,3,4,5順序進(jìn)入鐵路調(diào)度站(棧),可以得到( )的編組。
A. 3, 32、4,5,1,2 B. 2,4,1,3,5
C. 3,5,4,2,1 D. 1,3,5,2,4
14、判定一個(gè)順序棧S(??臻g大小為n)為空的條件是( )。
A. S->top==0 B. S->top!=0
C. S->top==n D. S->top!=n
15、在一個(gè)鏈隊(duì)列中,front和rear分別為頭指針和尾指針,則插入一個(gè)結(jié)點(diǎn)s的操作為( )。
A. front=front->next B. s->next=rear;rear=s
C. rear->next=s;rear=s; D. s->next=front;front= 33、s;
16、一個(gè)隊(duì)列的入隊(duì)序列是1,2,3,4,則隊(duì)列的出隊(duì)序列是( )。
A. 1,2,3,4 B. 4,3,2,1
C. 1,4,3,2 D. 3,4,1,2
授課:XXX
17、依次在初始為空的隊(duì)列中插入元素a,b,c,d以后,緊接著做了兩次刪除操作,此時(shí)的隊(duì)頭元素是( )。
A. a B. b C. c D. d
18、正常情況下,刪除非空的順序存儲(chǔ)結(jié)構(gòu)的堆棧的棧頂元素,棧頂指針top的變化是( )。
A. top不變 B. top=0 C. top=top+1 D. t 34、op=top-1
19、判斷一個(gè)循環(huán)隊(duì)列Q(空間大小為M)為空的條件是( )。
A. Q->front==Q->rear B. Q->rear-Q->front-1==M
C. Q->front+1=Q->rear D. Q->rear+1=Q->front
20、設(shè)計(jì)一個(gè)判別表達(dá)式中左右括號(hào)是否配對(duì)出現(xiàn)的算法,采用( )數(shù)據(jù)結(jié)構(gòu)最佳。
A. 線性表的順序存儲(chǔ)結(jié)構(gòu) B. 隊(duì)列 C. 棧 D. 線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
21、當(dāng)用大小為N的數(shù)組存儲(chǔ)順序循環(huán)隊(duì)列時(shí),該隊(duì)列的最大長(zhǎng)度為( )。
A. N B. N+1 35、 C. N-1 D. N-2
22、隊(duì)列的刪除操作是在( )。
A. 隊(duì)首 B. 隊(duì)尾 C. 隊(duì)前 D. 隊(duì)后
23、若讓元素1,2,3依次進(jìn)棧,則出棧次序不可能是( )。
A. 3,2,1 B. 2,1,3 C. 3,1,2 D. 1,3,2
24、循環(huán)隊(duì)列用數(shù)組A[0,m-1]存放其元素值,已知其頭尾指針分別是front和rear,則當(dāng)前隊(duì)列中的元素個(gè)數(shù)是( )。
A. (rear-front+m)%m B. rear-front+1
C. rear-front-1 D. rear-front
25、在解決計(jì)算機(jī)主機(jī) 36、和打印機(jī)之間速度不匹配問題時(shí),通常設(shè)置一個(gè)打印數(shù)據(jù)緩沖區(qū),主機(jī)將要輸出的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機(jī)則從該緩沖區(qū)中取走數(shù)據(jù)打印。該緩沖區(qū)應(yīng)該是一個(gè)( )結(jié)構(gòu)。
A. 堆棧 B. 隊(duì)列 C. 數(shù)組 D. 線性表
26、棧和隊(duì)列都是( )。
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. front=front->next B. rear= 37、 rear->next
C. rear->next=front D. front->next=rear
28、隊(duì)和棧的主要區(qū)別是( )。
A. 邏輯結(jié)構(gòu)不同 B. 存儲(chǔ)結(jié)構(gòu)不同
C. 所包含的運(yùn)算個(gè)數(shù)不同 D. 限定插入和刪除的位置不同
二、填空題
1、設(shè)棧S和隊(duì)列Q的初始狀態(tài)為空,元素e1,e2,e3,e4,e5,e6依次通過棧S,一個(gè)元素出棧后即進(jìn)入隊(duì)列Q,若6個(gè)元素出隊(duì)的序列是e2,e4,e3,e6,e5,e1,則棧的容量至少應(yīng)該是 。
答案:3
2、一個(gè)循環(huán)隊(duì)列Q的存儲(chǔ)空間大小為M,其隊(duì)頭和隊(duì)尾指針 38、分別為front和rear,則循環(huán)隊(duì)列中元素的個(gè)數(shù)為: 。
授課:XXX
答案:(rear-front+M)%M
3、在具有n個(gè)元素的循環(huán)隊(duì)列中,隊(duì)滿時(shí)具有 個(gè)元素。
答案:n-1
4、設(shè)循環(huán)隊(duì)列的容量為70,現(xiàn)經(jīng)過一系列的入隊(duì)和出隊(duì)操作后,front為20,rear為11,則隊(duì)列中元素的個(gè)數(shù)為 。
答案:61
5、已知循環(huán)隊(duì)列的存儲(chǔ)空間大小為20,且當(dāng)前隊(duì)列的頭指針和尾指針的值分別為8和3,且該隊(duì)列的當(dāng)前的長(zhǎng)度為_______。
三、判斷題
1、棧和隊(duì)列都是受限的線性結(jié)構(gòu)。P
2、在單鏈表中,要訪問某個(gè)結(jié)點(diǎn),只 39、要知道該結(jié)點(diǎn)的地址即可;因此,單鏈表是一種隨機(jī)存取結(jié)構(gòu)。O
3、以鏈表作為棧的存儲(chǔ)結(jié)構(gòu),出棧操作必須判別棧空的情況。P
四、程序分析填空題
1、已知棧的基本操作函數(shù):
int InitStack(SqStack *S); //構(gòu)造空棧
int StackEmpty(SqStack *S);//判斷???
int Push(SqStack *S,ElemType e);//入棧
int Pop(SqStack *S,ElemType *e);//出棧
函數(shù)conversion實(shí)現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)換為八進(jìn)制數(shù),請(qǐng)將函數(shù)補(bǔ)充完整。
void conversion(){
40、InitStack(S);
scanf(“%d”,&N);
while(N){
(1) ;
N=N/8;
}
while( (2) ){
Pop(S,&e);
printf(“%d”,e);
}
}//conversion
答案:(1)Push(S,N%8) (2)!StackEmpty(S)
2、寫出算法的功能。
int function(SqQueue *Q,ElemType *e){
if(Q->front==Q->rear)
return ERROR;
*e=Q->b 41、ase[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
return OK;
}
3、閱讀算法f2,并回答下列問題:
授課:XXX
(1)設(shè)隊(duì)列Q=(1,3,5,2,4,6)。寫出執(zhí)行算法f2后的隊(duì)列Q;
(2)簡(jiǎn)述算法f2的功能。
void f2(Queue *Q){
DataType e;
if (!QueueEmpty(Q)){
e=DeQueue(Q);
f2(Q);
EnQueue(Q,e);
}
}
答案:(1)6,4,2,5,3,1 (2)將隊(duì)列倒 42、置
五、綜合題
1、假設(shè)以帶頭結(jié)點(diǎn)的循環(huán)鏈表表示隊(duì)列,并且只設(shè)一個(gè)指針指向隊(duì)尾結(jié)點(diǎn),但不設(shè)頭指針,請(qǐng)寫出相應(yīng)的入隊(duì)列算法(用函數(shù)實(shí)現(xiàn))。
答案:void EnQueue(Lnode *rear, ElemType e)
{ Lnode *new;
New=(Lnode *)malloc(sizeof(Lnode));
If(!new) return ERROR;
new->data=e; new->next=rear->next;
rear->next=new; rear =new;
}
2、已知Q是一個(gè)非空隊(duì)列,S是一個(gè)空棧。編寫算法,僅 43、用隊(duì)列和棧的ADT函數(shù)和少量工作變量,將隊(duì)列Q的所有元素逆置。
棧的ADT函數(shù)有:
void makeEmpty(SqStack s); 置空棧
void push(SqStack s,ElemType e); 元素e入棧
ElemType pop(SqStack s); 出棧,返回棧頂元素
int isEmpty(SqStack s); 判斷棧空
隊(duì)列的ADT函數(shù)有:
void enQueue(Queue q,ElemType e); 元素e入隊(duì)
ElemType deQueue(Queue q); 出隊(duì),返回隊(duì)頭元素
int isEmpty(Queue q); 判斷隊(duì)空
44、
答案:void QueueInvent(Queue q)
{ ElemType x;
makeEmpty(SqStack s);
while(!isEmpty(Queue q))
{x=deQueue(Queue q);
push(SqStack s, ElemTypex);}
授課:XXX
while(!isEmpty(SqStack s))
{x=pop(SqStack s);
enQueue(Queue q, ElemType x);}
}
3、對(duì)于一個(gè)棧,給出輸入項(xiàng)A,B,C,D,如果輸入項(xiàng)序列為A,B,C,D,試給出全部可能的輸出序列 45、。
答案:出棧的可能序列:
ABCD ABDC ACDB ACBD ADCB BACD BADC BCAD BCDA
CBDA CBAD CDBA DCBA
第五章 數(shù)組和廣義表
一、選擇題
1、設(shè)廣義表L=((a,b,c)),則L的長(zhǎng)度和深度分別為( C )。
A. 1和1 B. 1和3 C. 1和2 D. 2和3
2、廣義表((a),a)的表尾是( B )。
A. a B. (a) C. () D. ((a))
3、稀疏矩陣的常見壓縮存儲(chǔ)方法有( C )兩種。
A. 二維數(shù)組和三維數(shù)組 B. 46、 三元組和散列表 C. 三元組和十字鏈表 D. 散列表和十字鏈表
4、一個(gè)非空廣義表的表頭( D )。
A. 不可能是子表 B. 只能是子表 C. 只能是原子 D. 可以是子表或原子
5、數(shù)組A[0..5,0..6]的每個(gè)元素占5個(gè)字節(jié),將其按列優(yōu)先次序存儲(chǔ)在起始地址為1000的內(nèi)存單元中,則元素A[5][5]的地址是( A )。
A. 1175 B. 1180 C. 1205 D. 1210
6、廣義表G=(a,b(c,d,(e,f)),g)的長(zhǎng)度是( A )。
A. 3 B. 4 C. 7 D. 8
7、采 47、用稀疏矩陣的三元組表形式進(jìn)行壓縮存儲(chǔ),若要完成對(duì)三元組表進(jìn)行轉(zhuǎn)置,只要將行和列對(duì)換,這種說法( B )。
A. 正確 B. 錯(cuò)誤 C. 無(wú)法確定 D. 以上均不對(duì)
8、廣義表(a,b,c)的表尾是( B )。
A. b,c B. (b,c) C. c D. (c)
9、常對(duì)數(shù)組進(jìn)行兩種基本操作是( C )。
A. 建立和刪除 B. 索引和修改 C. 查找和修改 D. 查找與索引
10、對(duì)一些特殊矩陣采用壓縮存儲(chǔ)的目的主要是為了( D )。
A. 表達(dá)變得簡(jiǎn)單 B. 對(duì)矩陣元素 48、的存取變得簡(jiǎn)單
C. 去掉矩陣中的多余元素 D. 減少不必要的存儲(chǔ)空間的開銷
11、設(shè)有一個(gè)10階的對(duì)稱矩陣A,采用壓縮存儲(chǔ)方式,以行序?yàn)橹鞔鎯?chǔ),a11為第一個(gè)元素,其存儲(chǔ)地址為1,每元素占1個(gè)地址空間,則a85的地址為( )。
A. 13 B. 33 C. 18 D. 40
12、設(shè)矩陣A是一個(gè)對(duì)稱矩陣,為了節(jié)省存儲(chǔ),將其下三角部分按行序存放在一維數(shù)組
授課:XXX
B[1,n(n-1)/2]中,對(duì)下三角部分中任一元素ai,j(i>=j),在一維數(shù)組B的下標(biāo)位置k的值是( B )。
A. i(i-1)/2+j-1 B. i(i-1 49、)/2+j C. i(i+1)/2+j-1 D. i(i+1)/2+j
13、廣義表A=((a),a)的表頭是( B )。
A. a B. (a) C. b D. ((a))
14、稀疏矩陣一般的壓縮存儲(chǔ)方法有兩種,即( C )。
A. 二維數(shù)組和三維數(shù)組 B. 三元組和散列 C. 三元組和十字鏈表 D. 散列和十字鏈表
15、假設(shè)以三元組表表示稀疏矩陣,則與如圖所示三元組表對(duì)應(yīng)的4×5的稀疏矩陣是(注:矩陣的行列下標(biāo)均從1開始)( B )。
A. B.
C. D.
16、以下有關(guān)廣義表的表述中,正 50、確的是( A )。
A. 由0個(gè)或多個(gè)原子或子表構(gòu)成的有限序列 B. 至少有一個(gè)元素是子表
C. 不能遞歸定義 D. 不能為空表
17、對(duì)廣義表L=((a,b),((c,d),(e,f)))執(zhí)行head(tail(head(tail(L))))操作的結(jié)果是( )。
A. 的 B. e C. (e) D. (e,f)
二、判斷題
( )1、廣義表中原子個(gè)數(shù)即為廣義表的長(zhǎng)度。
( )2、一個(gè)稀疏矩陣采用三元組表示,若把三元組中有關(guān)行下標(biāo)與列下標(biāo)的值互換,并把mu和nu的值進(jìn)行互換,則完成了矩陣轉(zhuǎn)置。
51、(√ )3、稀疏矩陣壓縮存儲(chǔ)后,必會(huì)失去隨機(jī)存取功能。
( )4、廣義表的長(zhǎng)度是指廣義表中括號(hào)嵌套的層數(shù)。
(√ )5、廣義表是一種多層次的數(shù)據(jù)結(jié)構(gòu),其元素可以是單原子也可以是子表。
三、填空題
1、已知二維數(shù)組A[m][n]采用行序?yàn)橹鞣绞酱鎯?chǔ),每個(gè)元素占k個(gè)存儲(chǔ)單元,并且第一個(gè)元素的存儲(chǔ)地址是LOC(A[0][0]),則A[i][j]的地址是___ Loc(A[0][0])+(i*N+j)*k ____。
2、廣義表運(yùn)算式HEAD(TAIL((a,b,c),(x,y,z)))的結(jié)果是: (x,y,z) 。
3、二維數(shù)組,可以按照 52、 兩種不同的存儲(chǔ)方式。
4、稀疏矩陣的壓縮存儲(chǔ)方式有: 和 。
四、綜合題
1、現(xiàn)有一個(gè)稀疏矩陣,請(qǐng)給出它的三元組表。
授課:XXX
答案:
第六章 樹
一、選擇題
1、二叉樹的深度為k,則二叉樹最多有( C )個(gè)結(jié)點(diǎn)。
A. 2k B. 2k-1 C. 2k-1 D. 2k-1
2、用順序存儲(chǔ)的方法,將完全二叉樹中所有結(jié)點(diǎn)按層逐個(gè)從左到右的順序存放在一維數(shù)組R[1..N]中,若結(jié)點(diǎn)R[i]有右孩子,則其右孩子是( B )。
A. R[2i-1] B. R[2i+ 53、1] C. R[2i] D. R[2/i]
3、設(shè)a,b為一棵二叉樹上的兩個(gè)結(jié)點(diǎn),在中序遍歷時(shí),a在b前面的條件是( B )。
A. a在b的右方 B. a在b的左方 C. a是b的祖先 D. a是b的子孫
4、設(shè)一棵二叉樹的中序遍歷序列:badce,后序遍歷序列:bdeca,則二叉樹先序遍歷序列為( )。
A. adbce B. decab C. debac D. abcde
5、在一棵具有5層的滿二叉樹中結(jié)點(diǎn)總數(shù)為(A)。
A. 31 B. 32 C. 33 D. 16 54、
6、由二叉樹的前序和后序遍歷序列( B )惟一確定這棵二叉樹。
A. 能 B. 不能
7、某二叉樹的中序序列為ABCDEFG,后序序列為BDCAFGE,則其左子樹中結(jié)點(diǎn)數(shù)目為( C )。
A. 3 B. 2 C. 4 D. 5
8、若以{4,5,6,7,8}作為權(quán)值構(gòu)造哈夫曼樹,則該樹的帶權(quán)路徑長(zhǎng)度為( C )。
A. 67 B. 68 C. 69 D. 70
9、將一棵有100個(gè)結(jié)點(diǎn)的完全二叉樹從根這一層開始,每一層上從左到右依次對(duì)結(jié)點(diǎn)進(jìn)行編號(hào),根結(jié)點(diǎn)的編號(hào)為1,則編號(hào)為49的結(jié)點(diǎn)的左孩子編號(hào)為( A )。
A. 98 B. 55、99 C. 50 D. 48
10、表達(dá)式a*(b+c)-d的后綴表達(dá)式是( B )。
A. abcd+- B. abc+*d- C. abc*+d- D. -+*abcd
授課:XXX
11、對(duì)某二叉樹進(jìn)行先序遍歷的結(jié)果為ABDEFC,中序遍歷的結(jié)果為DBFEAC,則后序遍歷的結(jié)果是( B )。
A. DBFEAC B. DFEBCA C. BDFECA D. BDEFAC
12、樹最適合用來表示( C )。
A. 有序數(shù)據(jù)元素 B. 無(wú)序數(shù)據(jù)元素 C. 元素之間具有分支層次關(guān)系的數(shù)據(jù) D. 元素之間無(wú)聯(lián)系的數(shù)據(jù)
13、 56、表達(dá)式A*(B+C)/(D-E+F)的后綴表達(dá)式是( C )。
A. A*B+C/D-E+F B. AB*C+D/E-F+ C. ABC+*DE-F+/ D. ABCDED*+/-+
14、在線索二叉樹中,t所指結(jié)點(diǎn)沒有左子樹的充要條件是( )。
A. t->left==NULL B. t->ltag==1 C. t->ltag==1&&t->left==NULL D. 以上都不對(duì)
15、任何一棵二叉樹的葉結(jié)點(diǎn)在先序、中序和后序遍歷序列中的相對(duì)次序( )。
A. 不發(fā)生改變 B. 發(fā)生改變 C. 不能確定 D. 以上都不對(duì)
16、假定在一棵 57、二叉樹中,度為2的結(jié)點(diǎn)數(shù)為15,度為1的結(jié)點(diǎn)數(shù)為30,則葉子結(jié)點(diǎn)數(shù)為( )個(gè)。
A. 15 B. 16 C. 17 D. 47
17、在下列情況中,可稱為二叉樹的是( B )。
A. 每個(gè)結(jié)點(diǎn)至多有兩棵子樹的樹 B. 哈夫曼樹
C. 每個(gè)結(jié)點(diǎn)至多有兩棵子樹的有序樹 D. 每個(gè)結(jié)點(diǎn)只有一棵子樹
18、用順序存儲(chǔ)的方法,將完全二叉樹中所有結(jié)點(diǎn)按層逐個(gè)從左到右的順序存放在一維數(shù)組R[1..n]中,若結(jié)點(diǎn)R[i]有左孩子,則其左孩子是( )。
A. R[2i-1] B. R[2i+1] C. R[2i] D. R[2/i]
1 58、9、下面說法中正確的是( )。
A. 度為2的樹是二叉樹 B. 度為2的有序樹是二叉樹
C. 子樹有嚴(yán)格左右之分的樹是二叉樹 D. 子樹有嚴(yán)格左右之分,且度不超過2的樹是二叉樹
20、樹的先根序列等同于與該樹對(duì)應(yīng)的二叉樹的( )。
A. 先序序列 B. 中序序列 C. 后序序列 D. 層序序列
21、按照二叉樹的定義,具有3個(gè)結(jié)點(diǎn)的二叉樹有( C )種。
A. 3 B. 4 C. 5 D. 6
22、由權(quán)值為3,6,7,2,5的葉子結(jié)點(diǎn)生成一棵哈夫曼樹,它的帶權(quán)路徑長(zhǎng) 59、度為( A )。
A. 51 B. 23 C. 53 D. 74
二、判斷題
( )1、存在這樣的二叉樹,對(duì)它采用任何次序的遍歷,結(jié)果相同。
( )2、中序遍歷一棵二叉排序樹的結(jié)點(diǎn),可得到排好序的結(jié)點(diǎn)序列。
( )3、對(duì)于任意非空二叉樹,要設(shè)計(jì)其后序遍歷的非遞歸算法而不使用堆棧結(jié)構(gòu),最適合的方法是對(duì)該二叉樹采用三叉鏈表。
( )4、在哈夫曼編碼中,當(dāng)兩個(gè)字符出現(xiàn)的頻率相同時(shí),其編碼也相同,對(duì)于這種情況應(yīng)做特殊處理
授課:XXX
。
(√ )5、一個(gè)含有n個(gè)結(jié)點(diǎn)的完全二叉樹,它的高度是?log2n?+1。
(√ )6、完全二叉樹的某結(jié)點(diǎn)若無(wú)左孩子,則 60、它必是葉結(jié)點(diǎn)。
三、填空題
1、具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度是 ?log2n?+1 。
2、哈夫曼樹是其樹的帶權(quán)路徑長(zhǎng)度 最小 的二叉樹。
3、在一棵二叉樹中,度為0的結(jié)點(diǎn)的個(gè)數(shù)是n0,度為2的結(jié)點(diǎn)的個(gè)數(shù)為n2,則有n0= N2+1 。
4、樹內(nèi)各結(jié)點(diǎn)度的 最大值 稱為樹的度。
四、代碼填空題
1、函數(shù)InOrderTraverse(Bitree bt)實(shí)現(xiàn)二叉樹的中序遍歷,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。
void InOrderTraverse(BiTree bt){
61、if( ){
InOrderTraverse(bt->lchild);
printf(“%c”,bt->data);
;
}
}
2、函數(shù)depth實(shí)現(xiàn)返回二叉樹的高度,請(qǐng)?jiān)诳崭裉帉⑺惴ㄑa(bǔ)充完整。
int depth(Bitree *t){
if(t==NULL)
return 0;
else{
hl=depth(t->lchild);
hr= depth(t->rchild) ;
if( 62、hl>hr )
return hl+1;
else
return hr+1;
}
}
3、寫出下面算法的功能。
Bitree *function(Bitree *bt){
Bitree *t,*t1,*t2;
if(bt==NULL)
t=NULL;
else{
t=(Bitree *)malloc(sizeof(Bitree));
t->data=bt->data;
t1=function(bt->left);
t2=function(bt->right);
t->left 63、=t2;
t->right=t1;
授課:XXX
}
return(t);
}
答案:交換二叉樹結(jié)點(diǎn)左右子樹的遞歸算法
4、寫出下面算法的功能。
void function(Bitree *t){
if(p!=NULL){
function(p->lchild);
function(p->rchild);
printf(“%d”,p->data);
}
}
答案:二叉樹后序遍歷遞歸算法
五、綜合題
1、假設(shè)以有序?qū)?p,c>表示從雙親結(jié)點(diǎn)到孩子結(jié)點(diǎn)的一條邊,若已知樹中邊的集合為{,,, 64、 65、為ABCDEFGH,中序遍歷序列為CBEDFAGH,畫出二叉樹。
答案:二叉樹形態(tài)
授課:XXX
5、試用權(quán)集合{12,4,5,6,1,2}構(gòu)造哈夫曼樹,并計(jì)算哈夫曼樹的帶權(quán)路徑長(zhǎng)度。
答案:
WPL=12*1+(4+5+6)*3+(1+2)*4=12+45+12=69
6、已知權(quán)值集合為{5,7,2,3,6,9},要求給出哈夫曼樹,并計(jì)算帶權(quán)路徑長(zhǎng)度WPL。
答案:(1)樹形態(tài):
(2)帶權(quán)路徑長(zhǎng)度:WPL=(6+7+9)*2+5*3+(2+3)*4=44+15+20=7 66、9
7、已知一棵二叉樹的先序序列:ABDGJEHCFIKL;中序序列:DJGBEHACKILF。畫出二叉樹的形態(tài)。
答案:
8、一份電文中有6種字符:A,B,C,D,E,F,它們的出現(xiàn)頻率依次為16,5,9,3,
授課:XXX
30,1,完成問題:
(1)設(shè)計(jì)一棵哈夫曼樹;(畫出其樹結(jié)構(gòu))
(2)計(jì)算其帶權(quán)路徑長(zhǎng)度WPL;
答案:(1)樹形態(tài):
(2)帶權(quán)路徑長(zhǎng)度:WPL=30*1+16*2+9*3+5*4+(1+3)*5=30+32+27+20+20=129
9、已知某森林的二叉樹如下所示,試畫出它所表示的森林。
答案:
10、有一分電文共使用5個(gè)字符;a,b,c,d,e,它們的出現(xiàn)頻率依次為4、7、5、2、9,試構(gòu)造哈夫曼樹,并給出每個(gè)字符的哈夫曼編碼。
11、畫出與下圖所示的森林相對(duì)應(yīng)的二叉樹,并指出森林中的葉子結(jié)點(diǎn)在二叉樹中具有什么特點(diǎn)。
授課:XXX
12、如下所示的二叉樹,請(qǐng)寫出先序、中序、后序遍歷的序列。
答案:先序:FDBACEGIHJ
中序:ABCDEFGHIJ
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 植樹問題課件PPT
- 實(shí)驗(yàn)九蕨類植物觀察和解剖
- 護(hù)理禮儀講解
- 初中物理_液體的壓強(qiáng)課件
- 武漢市【人教部編版】2019年秋語(yǔ)文一年級(jí)上冊(cè):統(tǒng)編版一年級(jí)上冊(cè)語(yǔ)文期末總復(fù)習(xí)資料課件
- 護(hù)士管理法律制度
- 核心肌群的功能和訓(xùn)練方式
- 在尋找野敗的日子里-PPT
- 安全培訓(xùn)遠(yuǎn)離大貨車
- 《10000以內(nèi)數(shù)的認(rèn)識(shí)(例5、例6)》教學(xué)課件-PPT
- 思達(dá)心臟醫(yī)院心血管病峰會(huì)邀請(qǐng)函
- 臨藥咳嗽和咳痰呼吸困難
- 用友通財(cái)務(wù)培訓(xùn)教程
- 頭頂球與運(yùn)球技術(shù)動(dòng)作分析
- 新城幼兒園中班科學(xué)有趣的石頭課件