1. 程式人生 > >數據結構模擬題

數據結構模擬題

存儲 歸並排序 首地址 size turn 快速排序 堆排序 一次 子序列

全真模擬試題(一)
一、單項選擇題(在每小題的4個備選答案中,選出正確的答案,並將其號碼填在
題幹的括號內。每小題2分,共24分)
1.若某線性表中最常用的操作是取第i 個元素和找第i個元素的前趨元素,則采用( )存儲方式最節省時間。
①單鏈表 ②雙鏈表 ③單向循環 ④順序表
2.串是任意有限個( )
①符號構成的序列 ②符號構成的集合
③字符構成的序列 ④字符構成的集合
3.設矩陣A(aij ,l≤i,j≤ 10)的元素滿足:
aij≠0(i≥j, l≤i, j≤ 10)
aij=0 (i<j, l≤i, j≤ 10)
現將A的所有非0元素以行序為主序存放在首地址為2000的存儲區域中,每個元素占有4個單元,則元素A[9][5]的首址為
①2340 ②2336 ③2164 ④2160
4.如果以鏈表作為棧的存儲結構,則退棧操作時( )
①必須判別棧是否滿
②對棧不作任何判別
③必須判別棧是否空
④判別棧元素的類型
5.設數組Data[0..m]作為循環隊列SQ的存儲空間,front為隊頭指針,rear為隊尾指針,則執行出隊操作的語句為( )
①front=front+1 ②front=(front+1)% m
③rear=(rear+1)%m ④front=(front+1)%(m+1)
6.深度為6(根的層次為1)的二叉樹至多有( )結點。
①64 ②32 ③31 ④63
7.將含100個結點的完全二叉樹從根這一層開始,每層上從左到右依次對結點編號,根結點的編號為1。編號為49的結點X的雙親編號為( )
①24 ②25 ③23 ④無法確定
8.設有一個無向圖G=(V,E)和G’=(V’,E’)如果G’為G的生成樹,則下面不正確的說法是( )
①G’為G 的子圖 ②G’為G 的邊通分量
③G’為G的極小連通子圖且V’=V ④G’為G的一個無環子圖
9.用線性探測法查找閉散列表,可能要探測多個散列地址,這些位置上的鍵值( )
①一定都是同義詞 ②一定都不是同義詞
③都相同 ④不一定都是同義詞
10.二分查找要求被查找的表是( )
①鍵值有序的鏈接表 ②鏈接表但鍵值不一定有序
③ 鍵值有序的順序表 ④順序表但鍵值不一定有序
11.當初始序列已經按鍵值有序,用直接插入算法對其進行排序,需要循環的次數為( )
①n2 ②nlog2n ③log2n ④n-1
12.堆是一個鍵值序列{k1,k2,…, kn},對i=1,2,…,|n/2|,滿足( )
①ki≤k2i≤k2i+1 ②ki<k2i+1<k2i
③ki≤k2i且ki≤k2i+1(2i+1≤n) ④ki≤k2i 或ki≤k2i+1(2i+1≤n)
二、判斷題(判斷下列各題是否正確,正確在括號內打“V”,錯的找“X”。每小題1分,共10分)
1.雙鏈表中至多只有一個結點的後繼指針為空。( )
2.在循環隊列中,front指向隊列中第一個元素的前一位置,rear指向實際的隊尾元素,隊列為滿的條件是front=rear。( )
3.對鏈表進行插入和刪除操作時,不必移動結點。( )
4.棧可以作為實現程序設計語言過程調用時的一種數據結構。( )
5.在一個有向圖的拓樸序列中,若頂點a在頂點b之前,則圖中必有一條弧<a,b>。( )i
6.對有向圖G,如果從任一頂點出發進行一次深度優先或廣度優先搜索就能訪問每個頂點,則該圖一定是完全圖。( )
7.“順序查找法”是指在順序表上進行查找的方法。( )
8.向二叉排序樹插入一個新結點時,新結點一定成為二叉排序樹的一個葉子結點。()
9.鍵值序列{A,C,D,E,F,E,F}是一個堆。
10.二路歸並時,被歸並的兩個子序列中的關鍵字個數一定要相等。()
三、填空題(每空2 分,共24分)
1.設r指向單鏈表的最後一個結點,要在最後一個結點之後插入s所指的結點,需執行的三條語句是;r=s; r->next=null;。
2.在單鏈表中,指針p 所指結點為最後一個結點的條件是

3.設一個鏈棧的棧頂指針是ls,棧中結點格式為info | link ,棧空的條件是__.如果棧不為空,則退棧操作為p=ls;_;free(p);。
4.已知一棵度為3的樹有2個度為1的結點,3個度為2的結點,4個度為3的結點,則該樹中有____ 個葉子的結點。
5.樹有三種常用的存儲結構,即孩子鏈表法、孩子兄弟鏈表法和___
.
6.N個頂點的連通圖的生成樹有條邊。
7.一個有向圖G中若有弧<vi,vj>、<vj,vk>和<vi,vk>, 則在圖G的拓撲序列中,頂點vi,vj和vk的相對位置為____

8.設表中元素的初始狀態是按鍵值遞增的,分別用堆排序、快速排序、冒泡排序和歸並排序方法對其進行(按遞增排序),     最省時間,     最費時間。
9.下面是將鍵值為x 的結點插入到二叉排序樹中的算法,請在劃線處填上適當的內容。
typedef struct pnode
{int key;
struct pnode left, right;
}pnode;
void searchinsert(int x, pnode t ) /t為二叉排序樹根結點的指針
{if ( )
{p=malloc(size);
p->key=x;p->lchild=null;
p->rchild=null;t=p;
} else if (x<t->key) searchinsert(x,t->lchild)
else
;
}
四、應用題(本題共28分)
1.樹的後根遍歷方法是:若樹非空則(4分)
(1)依據次後根遍歷根的各個子樹T1,T2,……Tm;
(2)訪問根結點。
對下圖所示的樹,用後根遍歷方法進行遍歷,請寫出遍歷所得到的結點訪問序列。

2.將下圖的森林轉換為二叉樹。(4分)

3.下圖表示一個地區的交通網,頂點表示城市,邊表示連結城市間的公路,邊上的權表示修建公路花費的代價。怎樣選擇能夠溝通每個城市且總造價最省的n-1條公路,畫出所有可能的方案。(4分)

4.已知一個無向圖的鄰接表如下圖所示。(本題4分,每小題2分)

(1)畫出這個圖。
(2) 以v1為出發點,對圖進行廣度優先搜索,寫出所有可能的訪問序列。
5.設n個元素的有序表為R,K為一個給定的值,二分查找算法如下:
int binsearch(sqlist R, keytype K)
{j=1;h=n ;suc=0;
while((j<=h)&&(!suc))
{mid =(j+h)/2;
switch
{case K=R[mid].key: suc=1; break;
case K<R[mid].key: h=mid-1; break;
case K>R[mid].key: j=mid+1
}
}
if (suc) return(mid); else return(0);
}
將上述算法中劃線語句改為:K<R[mid].key: h=mid.
(1)改動後,算法能否正常工作?請說明原因。
(2)若算法不能正常工作,給出一個查找序列和一個出錯情況的查找鍵值;若能正常工作,請給出一個查找序列和查找某個鍵值的比較次數。(本題6分,每小題3分)
6.有一組鍵值25,84,21,47,15,27,68,35,24,采用快速排序方法由小到大進行排序,請寫出每趟的結果,並標明在第一趟排序過程中鍵值的移動情況。(本題6分)
五、設計題(共14分)
1.設棵二叉樹以二叉鏈表為存儲結構,結點結構為 lchild |data |rchild 。設計一個算法,求在前根序列中處於第k個位置的結點。(本題6分)
2.設某單鏈表L的結點結構為data |next,試畫出該鏈表的結構圖,並用類C語言編寫算法判斷該鏈表的元素是否是遞增的。(本題8分)

數據結構模擬題