一、選擇題
-
用鏈接方式存儲的隊列,在進行插入運算時 ( )
A. 僅修改頭指針
B. 頭、尾指針都要修改
C. 僅修改尾指針
D. 頭、尾指針可能都要修改 -
對 n 個記錄的文件進行快速排序,所需要的輔助存儲空間大致為( )
A. \(O(1)\)
B. \(O(n)\)
C. \(O(log_2n)\)
D. \(O(n^2)\) -
設有 n 個待排序的記錄關鍵字,則在堆排序中需要( )個輔助記錄單元
A. \(1\)
B. \(n\)
C. \(nlog_2n\)
D. \(n^2\) -
在二叉排序樹中插入一個結點的時間復雜度為( )
A. \(O(1)\)
B. \(O(n)\)
C. \(O(log_2n)\)
D. \(O(n^2)\) -
設一組初始記錄關鍵字序列為 (50,40,95,20,15,70,60,45) ,則以增量 d=4 的一趟希爾排序結束后前 4 條記錄關鍵字為( )
A. \(40,50,20,95\)
B. \(15,40,60,20\)
C. \(15,20,40,45\)
D. \(45,40,15,20\) -
設連通圖 G 中的邊集 E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},則從頂點 a 出發不能得到一種深度優先遍歷的頂點序列為( )
A. \(abedfc\)
B. \(acfebd\)
C. \(aebdfc\)
D. \(aedfcb\) -
設某無向圖中有 n 個頂點 e 條邊,則建立該圖鄰接表的時間復雜度為( )
A. \(O(n+e)\)
B. \(O(n^2)\)
C. \(O(ne)\)
D. \(O(n^3)\) -
設順序線性表中有 n 個數據元素,則刪除表中第 i 個元素需要移動( )個元素
A. \(n-i\)
B. \(n+l-i\)
C. \(n-1-i\)
D. \(i\) -
設順序線性表的長度為 30 ,分成 5 塊,每塊 6 個元素,如果采用分塊查找,則其平均查找長度為( )
A. \(6\)
B. \(11\)
C. \(5\)
D. \(6.5\) -
設某散列表的長度為 100 ,散列函數
H(k)=k % P
,則 P 通常情況下最好選擇( )
A. \(99\)
B. \(97\)
C. \(91\)
D. \(93\) -
設有 n 個關鍵字具有相同的 Hash 函數值,則用線性探測法把這 n 個關鍵字映射到 HASH 表中需要做( )次線性探測
A. \(n^2\)
B. \(n(n+1)\)
C. \(n(n+1)\over2\)
D. \(n(n-1)\over2\) -
數據結構作為一門獨立的課程是在( )
A. \(1968\)
B. \(1953\)
C. \(1964\)
D. \(1946\) -
計算機內部數據處理的基本元素是( )
A. 數據
B. 數據元素
C. 數據庫
D. 數據項 -
若長度為 n 的非空線性表采用順序存儲結構,在表的第 i 個位置插入一個數據元素,則 i 的合法值應該是( )
A. \(1 \leq i \leq n\)
B. \(1 \leq i \leq n+1\)
C. \(0 \leq i \leq n-1\)
D. \(0 \leq i \leq n\) -
給定有 n 個元素的一維數組,建立一個有序單鏈表的最低時間復雜度為( )
A. \(O(1)\)
B. \(O(n)\)
C. \(O(n^2)\)
D. \(O(nlog_2n)\) -
一個鏈表最常用的操作是在末尾插入結點和刪除結點,則選用( )最省時間
A. 帶頭結點的雙向循環鏈表
B. 單循環鏈表
C. 帶尾指針的單循環鏈表
D. 單鏈表 -
最適合用作鏈表的鏈隊是( )
A. 帶隊首指針和隊尾指針的循環單鏈表
B. 帶隊首指針和隊尾指針的非循環單鏈表
C. 只帶隊首指針的非循環單鏈表
D. 只帶隊首指針的循環單鏈表 -
樹的路徑長度是指從樹根到每個結點的路徑長度的( )
A. 總和
B. 最小值
C. 最大值
D. 平均值 -
在二叉樹中有兩個結點 m 和 n,若 m 是 n 的祖先,則使用( )可以找到從 m 到 n 的路徑
A. 先序遍歷
B. 中序遍歷
C. 后序遍歷
D. 層序遍歷 -
利用二叉鏈表存儲森林時,根節點的右指針是( )
A. 指向最左兄弟
B. 指向最右兄弟
C. 一定為空
D. 不一定為空 -
設森林 F 對應的二叉樹為 B,它有 m 個結點,B 的根為 p,p 的右子樹結點個數為 n,森林 F 中的第一棵樹結點個數為( )
A. \(m-n\)
B. \(m-n-1\)
C. \(n+1\)
D. \(未可知也\) -
若度為 m 的哈夫曼樹中,葉子結點個數為 n ,則非葉子結點個數為
A. \(n-1\)
B. $\lfloor n/m \rfloor -1 $
C. \(\lceil (n-1)/(m-1) \rceil\)
D. $\lceil n/(m-1) \rceil -1 $
[參考答案]
1-5 | 6-10 | 11-15 | 16-20 | 21-25 |
---|---|---|---|---|
DCABB | BAADB | DABBD | ABACD | AC |
二、填空題
- 后綴算式
9 2 3 + - 10 2 / -
的值為__________。中綴算式(3+4X)-2Y/3
對應的后綴算式為________________。 - 向一棵
B-樹
插入元素的過程中,若最終引起樹根結點的分裂,則新樹比原樹的高度___________。 - 在堆排序的過程中,對任一分支結點進行篩運算的時間復雜度為________,整個堆排序過程的時間復雜度為________。
- 設某無向圖中頂點數和邊數分別為 n 和 e,所有頂點的度數之和為d,則 e=_______。
- 設一組初始記錄關鍵字序列為
(55,63,44,38,75,80,31,56)
,則利用篩選法建立的初始堆為___________________________。 - 設輸入序列為
1、2、3
,則經過棧的作用后可以得到___________種不同的輸出序列。 - 設哈夫曼樹中共有
n
個結點,則該哈夫曼樹中有________個度數為1
的結點。 - 設查找表中有
100
個元素,如果用二分法查找方法查找數據元素X
,則最多需要比較________次就可以斷定數據元素X是否在查找表中。 - 設一組初始記錄關鍵字序列
(k1,k2,……,kn)
是堆,則對i=1,2,…,n/2
而言滿足的條件為_______________________________。 - 散列表中解決沖突的兩種方法是_____________和_____________。
- 完全二叉樹中第
5
層上最少有__________個結點,最多有_________個結點。 - 設連通圖
G
中有n
個頂點e
條邊,則對應的最小生成樹上有___________條邊。 - 設某順序循環隊列中有
m
個元素,且規定隊頭指針F
指向隊頭元素的前一個位置,隊尾指針R
指向隊尾元素的當前位置,則該循環隊列中最多存儲_______隊列元素。 - 設需要對
5
個不同的記錄關鍵字進行排序,則至少需要比較_____________次,至多需要比較_____________次。 - 設二叉排序樹的高度為
h
,則在該樹中查找關鍵字key
最多需要比較_________次。 - 設一棵
m叉樹
的結點數為n
,用多重鏈表表示其存儲結構,則該樹中有_________個空指針域。 - 在一個長度為n的順序表中刪除第i個元素(0<=i<=n)時,需向前移動_________個元素
- 下面程序段的功能是實現二分查找算法,請在下划線處填上正確的語句。
struct record{int key; int others;};
int bisearch(struct record r[ ], int k)
{
int low=0,mid,high=n-1;
while(low<=high)
{
________________________________;
if(r[mid].key==k) return(mid+1); else if(____________) high=mid-1;else low=mid+1;
}
return(0);
}
- 設散列函數
H(k)=k mod p
,解決沖突的方法為鏈地址法。要求在下列算法划線處填上正確的語句完成在散列表hashtalbe
中查找關鍵字值等於k
的結點,成功時返回指向關鍵字的指針,不成功時返回標志0
。
typedef struct node {int key; struct node *next;} lklist;
void createlkhash(lklist *hashtable[ ])
{
int i,k; lklist *s;
for(i=0;i<m;i++)_____________________;
for(i=0;i<n;i++)
{
s=(lklist *)malloc(sizeof(lklist)); s->key=a[i];
k=a[i] % p; s->next=hashtable[k];_______________________;
}
}
- 下面程序段的功能是實現在二叉排序樹中插入一個新結點,請在下划線處填上正確的內容。
typedef struct node{int data;struct node *lchild;struct node *rchild;}bitree;
void bstinsert(bitree *&t,int k)
{
if (t==0 ) {____________________________;t->data=k;t->lchild=t->rchild=0;}
else if (t->data>k) bstinsert(t->lchild,k);else__________________________;
}
- 下面程序段的功能是建立二叉樹的算法,請在下划線處填上正確的內容。
typedef struct node{int data;struct node *lchild;________________;}bitree;
void createbitree(bitree *&bt)
{
scanf(“%c”,&ch);
if(ch=='#') ___________;else
{ bt=(bitree*)malloc(sizeof(bitree)); bt->data=ch; ________;createbitree(bt->rchild);}
}
三、應用題
-
畫出向小根堆中加入數據
4, 2, 5, 8, 3
時,每加入一個數據后堆的變化。 -
設一組有序的記錄關鍵字序列為
(13,18,24,35,47,50,62,83,90)
,查找方法用二分查找,要求計算出查找關鍵字62時的比較次數並計算出查找成功時的平均查找長度。 -
已知待散列的線性表為
(36,15,40,63,22)
,散列用的一維地址空間為[0..6]
,假定選用的散列函數是H(K)= K mod 7
,若發生沖突采用線性探查法處理,試:
①計算出每一個元素的散列地址並在下圖中填寫出散列表:
②求出在查找每一個元素概率相等情況下的平均查找長度。hash
0 1 2 3 4 5 6 key
-
畫出廣義表
LS=(( ) , (e) , (a , (b , c , d )))
的頭尾鏈表存儲結構。 -
設散列表的地址范圍是
[ 0..9 ]
,散列函數為H(key)= (key 2 +2)MOD 9
,並采用鏈表處理沖突,請畫出元素7、4、5、3、6、2、8、9
依次插入散列表的存儲結構。 -
設散列表的長度為
8
,散列函數H(k)=k mod 7
,初始記錄關鍵字序列為(25,31,8,27,13,68)
,要求分別計算出用線性探測法和鏈地址法作為解決沖突方法的平均查找長度。