一、選擇題
-
下面關於串的敘述中,哪一個是不正確的?( B )
A.串是字符的有限序列 B.空串是由空格構成的串
C.模式匹配是串的一種重要運算 D.串既可以采用順序存儲,也可以采用鏈式存儲
-
設無向圖的頂點個數為n,則該圖最多有( B)條邊。
A.n-1 B.n(n-1)/2 C. n(n+1)/2 D.0
-
以下數據結構中,( A )是非線性數據結構。
A.樹 B.字符串 C.隊列 D.棧
-
下面關於線性表的敘述中,錯誤的是哪一個?( B )
A.線性表采用順序存儲,必須占用一片連續的存儲單元。
B.線性表采用順序存儲,便於進行插入和刪除操作。
C.線性表采用鏈接存儲,不必占用一片連續的存儲單元。
-
假設以數組A[m]存放循環隊列的元素,其頭尾指針分別為front和rear,則當前隊列中的元素個數為( A )。
A.(rear-front+m)%m B.rear-front+1
C.(front-rear+m)%m D.(rear-front)%m
-
在單鏈表指針為p的結點之后插入指針為s的結點,正確的操作是( B )。
A.p->next=s; s->next=p->next; B.s->next=p->next; p->next=s;
C.p->next=s; p->next=s->next; D.p->next=s->next; p->next=s;
-
設棧的輸入序列是1,2,3,4,則( D )不可能是其出棧序列。
A.1,2,4,3 B.2,1,3,4 C.1,4,3,2 D.4,3,1,2,
-
棧和隊都是( C )
A.順序存儲的線性結構 B.鏈式存儲的非線性結構
C.限制存取點的線性結構 D.限制存取點的非線性結構
-
從邏輯上可以把數據結構分為( C )兩大類。
A.動態結構、靜態結構 B.順序結構、鏈式結構
C.線性結構、非線性結構 D.初等結構、構造型結構
-
下列四個序列中,哪一個是堆( C )。
A.75,65,30,15,25,45,20,10 B.75,65,45,10,30,25,20,15
C.75,45,65,30,15,25,20,10 D.75,45,65,10,25,30,20,15
-
在下述結論中,正確的是( D )
①只有一個結點的二叉樹的度為0;
②二叉樹的度為2;
③二叉樹的左右子樹可任意交換;
④深度為K的完全二叉樹結點個數小於或等於深度相同的滿二叉樹。
A.①②③ B.②③④ C.②④ D.①④
-
若一棵二叉樹具有10個度為2的結點,5個度為1的結點,則度為0的結點個數是( B )
A.9 B.11 C.15 D.不確定
(n0=n2+1)
-
在下面的程序段中,對x的賦值語句的頻度為( C )。
for ( i=1;i< n;i++)
for( j=1;j<i;j++)
x=x+1;
A. O(2n) B.O(n) C.O(n2) D.O(log2n)
-
一個n個頂點的連通無向圖,其邊的個數至少為( A )。
A.n-1 B.n C.n+1 D.nlogn;
-
根結點在第1層的二叉樹的第I層上最多含有結點數為( C )
A.2^I B. 2^(I-1)-1 C. 2^(I-1) D.2^I -1
-
下列排序算法中( C )排序在一趟結束后不一定能選出一個元素放在其最終位置上。
A.選擇 B.冒泡 C.歸並 D.堆
-
散列文件使用散列函數將記錄的關鍵字值計算轉化為記錄的存放地址,因為散列函數是一對一的關系,則選擇好的( D )方法是散列文件的關鍵。
A.散列函數 B.除余法中的質數
C.沖突處理 D.散列函數和沖突處理
-
在一個長度為n的順序表中,向第i個元素(1≤i≤n+1)之前插入一個新元素時,需向后移動( B )個元素。
A. n-1 B. n-i+1 C. n-i-1 D. i
-
在一個具有n個單元的順序棧中,假定以地址低端作為棧底,以top作為棧頂指針, 則當做退棧處理時,top變化為( C )。
A. top不變 B. top= -n C. top=top-1 D. top=top+1
-
向順序棧中壓入元素時,是 ( ) 。
A. 先存入元素,后移動棧頂指針 B.先移動棧頂指針,后存入元素
說明:若順序棧top初始值為-1,則選B,若初始值為0,則可以選A
-
在一個順序存儲的循環隊列中,隊首指針指向隊首元素的 ( C )。
A. 前一個位置 B. 后一個位置 C. 隊首元素位置 D. 隊尾元素位置
-
若進棧序列為1,2,3,4,進棧過程中可以出棧,則( C )不可能是一個出棧序列。
A. 3,4,2,1 B. 2,4,3,1 C. 1,4,2,3 D. 3,2,1,4
-
在具有n個單元的順序存儲的循環隊列中,假定front和rear分別為隊首指針和隊尾指針,則判斷隊空的條件是( C ) 。
A. front= =rear+1 B. front+1= =rear C. front= =rear D. front= =0
-
在具有n個單元的順序存儲的循環隊列中,假定front和rear分別為隊首指針和隊尾指針,則判斷隊滿的條件是( D ) 。
A. rear % n= =front B. (rear-1) % n= =front
C. (rear-1) % n= =rear D. (rear+1) % n= =front
-
從一個具有n個節點的單鏈表中查找其值等於x結點時,在查找成功的情況下,需平均比較( D )個結點。
A. n B. n/2 C. (n-1)/2 D. (n+1)/2
-
在一個單鏈表中,已知*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;
-
向一個帶頭結點的鏈棧中插入一個*s結點時,其中棧頂指針為hs,則執行( B)。
A. hs->next=s; B. s->next=hs->next; hs->next=s;
C. s->next=hs;hs=s; D. s->next=hs; hs=hs->next;
注:若不帶頭結點,C也可以
-
在一個鏈隊列中,假定front和rear分別為隊首指針和隊尾指針,則進行插入*s結點的操作時應執行( B ) 。
A. front->next=s; front=s; B. rear->next=s; rear=s;
C. front=front->next; D. front=rear->next;
-
線性表是( A )。
A. 一個有限序列,可以為空 B. 一個有限序列,不能為空
C. 一個無限序列,可以為空 D. 一個無限序列,不能為空
-
對順序存儲的線性表,設其長度為n,在任何位置上插入或刪除操作都是等概率的, 刪除一個元素時大約要移動表中的( C )個元素。
A. n+1 B. n-1 C. (n-1)/2 D. n
-
線性表采用鏈式存儲時,其地址( D )。
A. 必須是連續的 B. 部分地址必須是連續的
C. 一定是不連續的 D. 連續與否均可以
-
設單鏈表中指針p指着結點(數據域為m),指針f指着將要插入的新結點(數據域為x),當x插在結點m之后時,只要先修改( B )后修改p->link=f即可。
A. f->link=p; B. f->link=p->link;
C. p->link=f->link; D. f=nil;
-
根據線性表的鏈式存儲結構,每個結點所含指針的個數,鏈表分為單鏈表和( B )。
A. 循環鏈表 B. 多重鏈表 C. 普通鏈表 D. 無頭結點鏈表
-
在數據結構中,與所使用的計算機無關的數據叫( C )結構。
A. 存儲 B. 物理 C. 邏輯 D. 物理和存儲
-
二分法查找( A )存儲結構。
A. 只適用於順序 B. 只適用於鏈式 C. 既適用於順序也適用於鏈式
D. 既不適合於順序也不適合於鏈式
-
在線性表的鏈式存儲結構中,邏輯上相鄰的元素在物理位置上( B )。
A. 一定相鄰 B. 不一定相鄰 C. 有時相鄰
-
設字符串s1='abcdefg',s2='pqrst',則運算 s=concat(sub(s1,2,len(s2)),sub(s1,len(s2),2))后串值為( D )。
-
'bcdef' B. 'bcdefg' C. 'bcpqrst' D. 'bcdefef'
注:concat連接字符串,sub求子串
-
假定在一棵二叉樹中,雙分支結點數為15個,單分支結點數為32個,則葉子結點數為 ( B )。
A. 15 B. 16 C. 17 D. 47
-
假定一棵二叉樹的結點數為18個,則它的最小高度( B )。
A. 4 B. 5 C. 6 D. 18
-
在一棵二叉樹(根結點所在的層為1)中第五層上的結點數最多為( C ) 。
A. 8 B. 15 C. 16 D. 32
-
在一棵具有五層的滿二叉樹中,結點總數為( A )。
A. 31 B. 32 C. 33 D. 16
-
已知8個數據元素為(34、76、45、18、26、54、92、65),按照依次插入結點的方法生成一棵二叉排序樹后,最后兩層上的結點總數為( B )。
A. 1 B. 2 C. 3 D. 4
-
由分別帶權為9、2、5、7的四個葉子結點構造一棵哈夫曼樹,該樹的帶權路徑長度為 ( C )。
A. 23 B. 37 C. 44 D. 46
-
下面答案( D )是查找二叉樹(又稱二叉排序樹)。
A. 二叉樹中的每個結點的兩棵子樹的高度差的絕對值不大於1
B. 二叉樹中的每個結點的兩棵子樹的高度差等於1
C. 二叉樹中的每個結點的兩棵子樹是有序的
D. 二叉樹中的每個結點的關鍵字大於其左子樹(如果存在)所有結點的關鍵字值, 且小於其右子樹(如果存在)所有結點的關鍵字值。
-
如果結點A有三個兄弟,而且B是A的雙親,則B的出度是( B )。
A. 3 B. 4 C. 5 D. 1
-
一個深度為L的滿k叉樹有如下性質:第L層上的結點都是葉子結點,其余各層上每個結點都有k棵非空子樹。如果按層次順序從1開始對全部結點編號,編號為n的有右兄弟的條件是( B )。
-
(n-1) % k= =0 B. (n-1) % k!=0 C. n % k= =0 D. n % k!=0
注:以滿三叉樹為例
-
在完全二叉樹(結點編號從1開始)中,當i為奇數且不等於1時,結點i的左兄弟是結點( D ),否則沒有左兄弟。
A. 2i-1 B. i+1 C. 2i+1 D. i-1
-
在一個有向圖中,所有頂點的入度之和等於所有頂點的出度之和的( B )倍。
A. 1/2 B. 1 C. 2 D. 4
-
對於一個具有n個頂點和e條邊的無向圖,若采用鄰接表表示,則表頭向量的大小 為 ( A ) 。
A. n B. n+1 C. n-1 D. n+e
-
具有n個頂點的無向完全圖,邊的總數為( D )條。
A. n-1 B. n C. n+1 D. n*(n-1)/2
-
設圖G有n個頂點和e條邊,當G是非孤立頂點的連通圖時有2e>=n,故可推得深度優先搜索的時間復雜度為( A )。(最壞的情況就是把所有的邊都遍歷了一邊)
A. O(e) B. O(n) C. O(ne) D. O(n+e)
-
最小代價生成樹( B )。
A.是唯一的 B.不一定是唯一的,但最小代價是唯一的。
-
在無向圖G的鄰接矩陣A中,若A[i,j]等於1,則A[j,i]等於( C ) 。
A. i+j B. i-j C. 1 D. 0
-
對於長度為9的順序存儲的有序表,若采用折半查找,在等概率情況下的平均查找長度為( C )。
A. 20/9 B. 18/9 C. 25/9 D. 22/9
-
已知一個有序表為(12、18、24、35、47、50、62、83、90、115、134),當二分查找值為90的元素時,( B )次比較后查找成功;當二分查找值為47的元素時,( D )次比較后查找成功。
A. 1 B. 2 C. 3 D. 4
-
散列函數有一個共同性質,即函數值應當以( D )取其值域的每個值。
A. 最大概率 B. 最小概率 C. 平均概率 D. 同等概率
-
設散列地址空間為0~m-1,k為關鍵字,用p去除k,將所得的余數作為k的散列地址,即H(k)=k % p。為了減少發生沖突的頻率,一般取p為( D )。
A. 小於m的最大奇數 B. 小於m的最大偶數
C. m D. 小於等於m的最大素數
-
設關鍵字序列為:3,7,6,9,8,1,4,5,2。進行簡單選擇排序的最少交換次數是( A ) 。
A. 6 B. 7 C. 8 D. 20
-
一組記錄排序碼為(46、79、56、38、40、84),則利用堆排序的方法建立的初始堆為 ( B ) 。
A. (79、46、56、38、40、80) B. (84、79、56、38、40、46)
C. (84、79、56、46、40、38) D. (84、56、79、40、46、38)
-
一組記錄的關鍵碼為(46、79、56、38、40、84),則利用快速排序的方法,以第一個記錄為基准得到的一次划分結果為( C ) 。
A. (38、40、46、56、79、84) B. (40、38、46、79、56、84)
C. (40、38、46、56、79、84) D. (40、38、46、84、56、79)
二、填空題
-
在線性結構中第一結點 無 前驅結點,其余每個結點有且只有 一 個前驅結點;最后一個結點 無 后繼結點,其余每個結點有且只有 一 個后繼結點。
-
在樹型結構中,樹根結點沒有 父親 結點,其余每個結點有且僅有 一 個父親結點;樹葉結點沒有 孩子 結點,其余每個結點的 孩子 結點數不受限制。
-
廣義表((((a),b),c),d,(c))的表頭(head)是 (((a),b),c) ;表尾(tail)是 (d,(c)) 。
-
一個n階下三角矩陣A按行優先順序壓縮存放在一維數組B中,則B中的元素個數是 n(n+1)/2+1 。 (需要一個元素,存儲非下三角元素的值)
-
對於長度為n的順序表,插入或刪除元素的時間復雜性為 O(n) ;對於順序棧或隊列,插入或刪除元素的時間復雜性為 O(1) 。
-
設有一順序棧S,元素s1,s2,s3,s4,s5,s6依次進棧,如果6個元素出棧的順序是s2,s3,s4, s6 , s5,s1,則棧的容量至少應該是 3 。
-
在線性表的順序存儲中,元素之間的邏輯關系是通過 下標 決定的;在線性表的鏈接存儲中,元素之間的邏輯關系是通過 指針 決定的。
-
一棵結點總數為9的完全二叉樹,有 5 個葉子結點。
-
單鏈表如下圖,完成對它的基本操作
-
刪除*p結點時,應執行如下操作:
(1)q=p->next;
(2)p->data=p->next->data;
(3)p->next= q->next ;
(4)free(q);
-
若要在一個單鏈表中的*p結點之前插入一個*s結點時,可執行如下操作
(1)s->next= p->next ;
(2)p->next=s;
(3)t=p->data;
(4)p->data= s->data ;
(5)s->data= t ;
-
無論對於順序存儲還是鏈接存儲的棧和隊列來說,進行插入或刪除運算的時間復雜性均相同,則為 O(1) 。
┏0 0 2 0┓
-
一個稀疏矩陣為 ┃3 0 0 0┃,則對應的三元組線性表為
┃0 0 -1 5┃
┗0 0 0 0┛
{{0,2,2},{1,0,3},{2,2,-1},{2,3,5}} 。
-
對於一棵具有n個結點的樹,則該樹中所有結點的度之和為 n-1 。
-
在一棵二叉樹中,度為0的結點的個數為n0 ,度為2的結點的個數為n2 ,則n0 = n2+1 。
-
在二叉樹的順序存儲中(下標從1開始),對於下標為5的結點,它的雙親結點的下標為 2 , 若它存在左孩子,則左孩子結點的下標為 10 ,若它存在右孩子,則右孩子結點的下標為 11 。
-
若廣義表表示為(b(c,d(e,f),g(h)),i(j,k(x,y))),則廣義表的長度為 2 ,深度為 3 (假設根結點的層數為1) (長度的求法為最大括號中的逗號數加1,深度的求法為最大括號中每個元素的括號匹配數加1的最大值)
-
假定一棵二叉樹的廣義表表示為A(B(,D),C(E(,G),F)),則該樹的深度為 4 , 度為0的結點數為 3 ,度為1的結點數為 2 ,度為2的結點數為 2 ;C結點是A 結點的 右 孩子,E結點是C結點的 左 孩子。
-
在一棵二叉排序樹中,按 中序 遍歷得到的結點序列是一個有序序列。
-
由分別帶權為3,9,6,2,5的共五個葉子結點構成一棵哈夫曼樹,則帶權路徑長度為 55 。
left |
data |
right |
-
假定在二叉樹的鏈接存儲中,每個結點的結構為
data為值域,left和right分別為鏈接左、右孩子結點的指針域,請在下面中序遍歷算法 中畫有橫線的地方填寫合適的語句。
void inorder(node *bt) (bt是指向結點的指針)
{ if (bt!=null ){
(1) inorder(bt->left) ;
(2) printf(bt->data) ;
(3) inorder(bt->right) ;}
}
-
在圖G的鄰接表表示中,每個頂點鄰接表中所含的結點數,對於無向圖來說等於該頂點的 度數 ,對於有向圖來說等於該頂點的 出度數 。
-
假定一個無向連通網圖具有n個頂點和e條邊,則采用鄰接矩陣表示的空間復雜性為 O(n2) , 采用鄰接表表示的空間復雜性為 O(n+e) ,采用Prim算法求最小生成樹的時間復雜度是 O(n2) ,采用克魯斯卡爾算法求最小生成樹的時間復雜度是 O(elog2e) 。
-
已知一個無向圖的鄰接矩陣如下所示,則從頂點A出發按深度優先搜索遍歷得到的頂點序列為 ABCDFE ,按廣度優先搜索遍歷得到的頂點序列為ABCEFD 。
-
在索引查找或分塊查找中,首先查找 索引表 ,然后再查找相應的 子表 ,整個索引查找的平均查找長度等於查找索引表的平均查找長度與查找相應子表的平均查找長度之 和 。
-
在散列存儲中,裝填因子α的值越大,存取元素時發生沖突的可能性就 大 ,當α的值越小,存取元素時發生沖突的可能性就 小 。
-
給定線性表(18,25,63,50,42,32,90),用散列方式存儲,若選用h(K)=K % 9作為散列函數,則元素18的同義詞元素共有 2 個,元素25的同義詞元素共有 0 個,元素50的同義詞元素共有 1 個。
-
在對一組記錄(54,38,96,23,15,72,60,45,83)進行直接選擇排序時,第四次選擇和交換后,未排序記錄(即無序表)為 (54,72,60,96,83) 。
-
已知一個圖如下所示,在該圖的最小生成樹的代價為 47 。
-
給出從頂點1到頂點8的關鍵路徑長度 97 。(最長路徑)
-
假定在有序表A[1..20]上進行二分查找,則比較一次查找成功的結點數為 1 , 比較兩次查找成功的結點數為 2 ,比較三次查找成功的結點數為 4 ,比較四次查找成功結點數為 8 ,比較五次查找成功的結點數為 5 ,平均查找長度為 74/20 。
-
在對一組記錄(54,38,96,23,15,72,60,45,38)進行冒泡排序時,第一趟需進行相鄰記錄交換的次數為 7 ,在整個冒泡排序過程中共需進行 6 趟后才能完成。
注:這里是從后往前冒泡的結果
-
在歸並排序中,若待排序記錄的個數為20,則共需要進行 5 趟歸並,在第三趟歸並中,是把長度為 4 的有序表歸並為長度為 8 的有序表。
-
在直接插入和簡單選擇排序中,若初始數據基本正序,則選用 直接插入 ,若初始數據基本反序,則選用 簡單選擇 。
-
在堆排序、快速排序和歸並排序中,若只從節省空間考慮,則應首先選取 堆排序 方法,其次選取 快速排序 方法,最后選取 歸並排序 方法;若只從排序結果的穩定性考慮,則應選取 歸並排序 ;若只從平均情況下排序最快考慮,則應選取 快速 方法;若只從最壞情況下排序最快並且要節省內存考慮,則應選取 堆排序 方法。
三、判斷題
-
數據元素是數據的最小單位( Ⅹ )。(數據項是最小單位,數據元素是基本單位)
-
數據項是數據的基本單位(Ⅹ)。
-
順序存儲的線性表可以隨機存取( √ )。
-
線性表中的元素可以是各種各樣的,但同一線性表中的數據元素具有相同的特性, 因此,是屬於同一數據對象(√ )。
-
在單鏈表中,任何兩個元素的存儲位置之間都有固定的聯系,因為可以從頭結點查找任何一個元素( Ⅹ )。(鏈表中的元素的存儲位置,沒有固定聯系)
-
在單鏈表中,要取得某個元素,只要知道該元素的指針即可,因此,單鏈表是隨機存取的存儲結構( Ⅹ )。 (順序表才是隨機存儲)
-
鏈表的每個結點中,都恰好包含一個指針( Ⅹ )。(雙向鏈表就有兩個指針)
-
使用三元組表示稀疏矩陣的元素,有時並不能節省存儲時間( √)。(如果非零元個數太多,就不節省時間了)
-
由樹轉換成二叉樹,其根結點的右子樹總是空的(√ )。(根結點沒有兄弟)
-
后序遍歷樹和中序遍歷與該樹對應的二叉樹,其結果不同(Ⅹ )。 (可能相同,也可能不同)
-
若有一個結點是某二叉樹子樹的中序遍歷序列中的最后一個結點,則它必是該子樹的前序遍歷序列中的最后一個結點(√)。(都是最右的結點)
-
已知二叉樹的前序遍歷和后序遍歷序列並不能唯一地確定這棵樹,因為不知道樹的根結點的左子樹和右子樹中分別包含哪些結點。(√ )
-
有回路的圖不能進行拓撲排序( √ )。
-
連通分量是無向圖中的極小連通子圖( Ⅹ )。
-
散列法存儲的基本思想是由關鍵碼的值決定數據的存儲地址( √ )。
-
散列表的查找效率取決於散列表造表時選取的散列函數和處理沖突的方法( √ )。
-
中序遍歷二叉排序樹的結點就可以得到排好序的結點序列( √)。
-
在二叉排序樹上插入新的結點時,不必移動其它結點,僅需改動某個結點的指針, 由空變為非空即可( √ )。
-
當待排序的元素很多時,為了交換元素的位置,移動元素要占用較多的時間,這是影響時間復雜性的主要因素(Ⅹ)。(比較次數多才是主要因素)
-
對於n個記錄的集合進行快速排序,所需要的平均時間是O(nlog2 n)(√)。
-
對於n個記錄的集合進行歸並排序,所需要的平均時間是O(nlog2 n)(√)。
-
堆中所有非終端結點的值均小於或等於(大於或等於)左右子樹的值( √)。
-
順序存儲方式只能用於存儲線性結構。( Ⅹ) (完全二叉樹也可以順序存儲)
-
對任何數據結構鏈式存儲結構一定優於順序存儲結構。(Ⅹ)
-
有向圖的鄰接矩陣是對稱矩陣,無向圖的鄰接矩陣是非對稱矩陣。(Ⅹ)
-
所有二叉樹的度均為2。(Ⅹ )(均小於等於2)
-
滿二叉樹一定是完全二叉樹,但完全二叉樹不一定是滿二叉樹。(√)
-
循環鏈表不是線性表。 (Ⅹ )
-
線性表的特點是每個元素都有一個前驅和一個后繼。( Ⅹ )(首個元素沒有前驅)
-
按中序遍歷二叉排序樹所得到中序序列是一個遞增有序序列。( √ )
-
若哈夫曼樹中含有n個節點,則整一顆哈夫曼樹中必然有2n-1個節點。(√)
- 樹可以轉換成二叉樹,但不是所有的二叉樹都可以轉換成樹。(√)(若二叉樹根節點有右孩子,則會轉換為多棵樹的森林,因此由樹轉換過來的二叉樹的根節點沒有右孩子。)
四、簡答題
-
線性表有兩種存儲結構:一是順序表,二是鏈表。試問:
(1)如果有n個線性表同時並存,並且在處理過程中各表的長度會動態發生變化,線性 表的總數也會自動地改變。在此情況下,應選用哪種存儲結構?為什么?
(2)若線性表的總數基本穩定,且很少進行插入和刪除,但要求以最快的速度存取線性表中的元素,那么,應采用哪種存儲結構?為什么?
答:(1)選用鏈表比較合適。因為這n個線性表需要頻繁的插入和刪除元素,則使用鏈表,可更方便插入和刪除,且全局考慮,n個鏈表可以共享存儲空間,所需要的總的空間大小,比順序表要少。
(2)但若線性表總數穩點,插入和刪除也很少,則使用順序表更適合,因為其隨機訪問的特點,使得其在讀數據的時候更快更方便。
-
何謂隊列的上溢現象?解決它有哪些方法,且分別簡述其工作原理。
答:隊列上是指順序隊列中的隊尾位置,已經超出了數組的位置,不能再插入元素了,若此時在數組的低端位置中還用空余的位置,則稱為假溢出。解決的辦法是,盡量把存儲隊列的空間定義得足夠大(但這樣很費空間),或者是當低端位置中有空余位置的時候,就把隊列中的元素往前移動(但是這樣又很費時),常用的方法就是使用循環隊列,使得數組的最后一個元素的下一個元素位置變為數組的首個元素的位置。(另附:順序循環隊列,區分隊空和隊滿的方法有:使用一個變量對隊列中的元素進行計數,或者犧牲隊列中的一個存儲單元,當隊列中只剩下一個單元的存儲空間時,就認為是滿了,則此時隊列空的條件是:front==rear,隊列滿的條件是:(rear+1)%maxsize==front。)
-
簡述二叉樹與度小於等於2的有序樹之間的區別。
答:二叉樹是一定是度小於等於2的有序樹,但是度小於等於2的有序樹不等於而二叉樹。二叉樹的的子樹是有嚴格的左右子樹的分別,特別是當某結點只有一棵子樹的時候,在有序樹中是不區分左右性,但在二叉樹中是區分左右性的。
-
若有5000個元素,如果僅要求求出其中最大的3個元素,會采用哪種排序算法最節省時間。
答:因為只需要去最大的3個元素,則使用冒泡、簡單選擇都能在每一趟中得到一個最值,所以比較省時。(堆也可以在每趟中得到最值,但是初始化建堆相對比較費時,所有不建議使用。)
-
有一個2000項的表,欲采用索引查找(分塊)方法進行查找,問若每塊長度為20,平均查找長度是多少?
答:把2000個元素分成20塊,每塊有100個元素,則索引表的表長就是100,子表是20,若索引表和子表內都是順序查找,則平均查找長度是(100+1+20+1)/2=61
-
解析稠密圖和稀疏圖的定義,在鄰接矩陣和鄰接表兩種圖的存儲結構中,稠密圖適用哪種存儲結構,稀疏圖又適用哪種存儲結構,為什么?
答:n階圖中的邊的數量大於等於nlog2n,則可以稱之為稠密圖,否則就是稀疏圖。稠密圖選用鄰接矩陣進行存儲,而稀疏圖則是選用鄰接表存儲。因為鄰接矩陣存儲的空間復雜度是O(n2),而鄰接表的空間復雜度是O(n+e),當邊數較多是就應該使用與邊數無關的鄰接矩陣,否則選用鄰接表。
五、應用題
-
判斷下列序列是否是堆。若不是堆,則把它們依次調整為堆。
-
(100,85,98,77,80,60,82,40,20,10,66);
把上面的序列構造一棵完全二叉樹
,由此判斷是大根堆
-
(100,98,85,82,80,77,66,60,40,20,10)
大根堆
-
(100,85,40,77,80,60,66,98,82,10,20);
,由此不是堆,調整后為
序列為(100,98,66,85,80,60,40,77,82,10,20)
-
(10,20,40,60,66,77,80,82,85,98,100);
小根堆
-
已知一組元素為(46、25、78、62、18、34、12、40、73),試畫出按元素排列順序輸入而生成的一棵二叉排序樹,並求其平均查找長度。
ASL=(1+2*2+3*3+4*3)/9
-
已知一棵二叉樹先序遍歷結果為ABCDEFGHIJ,中序遍歷的結果為CBEDAHGIJF,試畫出該二叉樹。
-
設無向圖G如下圖:
試給出:
-
該圖的鄰接矩陣;
-
該圖的鄰接表;
-
該圖的各頂點的度;
A |
B |
C |
D |
E |
F |
G |
2 |
2 |
2 |
4 |
2 |
2 |
2 |
-
從A出發的“深度優先”遍歷序列;
ABDEGFC
-
從A出發的“廣度優先”遍歷序列。
ABCDEFG
-
假定一個待散列存儲的線性表為(32、75、63、48、94、25、36、18、70),采用散列函數H(k)=k MOD 11,試畫出以下兩種情況的散列表,並求出在等概率情況下的平均查找長度。
由於H(k)=k%11,散列表長為11
H(32)=32%11=10 H(75)=75%11=9 H(63)=63%11=8 H(48)=48%11=4
H(94)=94%11=6 H(25)=25%11=3 H(36)=36%11=3 H(18)=18%11=7
H(70)=70%11=4
-
采用線性探查法處理沖突。
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
70 |
|
|
25 |
48 |
36 |
94 |
18 |
63 |
75 |
32 |
ASL=(1+1+1+1+1+1+3+1+8)/9
-
采用拉鏈法處理沖突。
ASL=(7+2*2)/9
-
假設用於通信的電文由字符集{a,b,c,d,e,f,g,h}中的字母構成。它們在電文中出現的頻度分別為{27,10,12,6,30,3,21,15}。要求:
-
請為這8個字母設計哈夫曼編碼,並畫出對應的哈夫曼樹;
a:00 b:1101 c:010 d:11001 e:10 f:11000 g:111 h:011
-
計算該哈夫曼樹的最小加權路徑長度WPL。
WPL=(27+30)*2+(12+15+21)*3+10*4+(3+6)*5
-
設圖G=(V,E),其中V={A,B,C,D,E,F},其鄰接矩陣如下所示。若將該圖用鄰接表存儲,請寫出圖的鄰接表。按照Prim方法,從頂點A出發,求該網的最小生成樹的產生過程,並計算該最小生成樹的代價值。
|
B |
C |
D |
E |
F |
adjvert |
A C |
A |
A C E |
A |
A E D |
lowcost |
∞ 5 0 |
10 0 |
∞ 50 20 0 |
30 0 |
100 60 10 0 |
最小生成樹的邊為BC、CA、DE、EA、FD
圖 最小生成樹
最小代價=10+30+10+20+5
注:克魯斯卡爾算法求最小生成樹請自行完成。
-
請畫出利用下面的順序存儲結構表示的二叉樹,#表示相應的位置沒有結點存在。
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
A |
B |
# |
C |
D |
# |
# |
# |
E |
F |
G |
# |
# |
# |
# |
-
寫出該二叉樹的先序遍歷,中序遍歷,后序遍歷及層次遍歷結果。
先序:ABCEDFG
中序:CEBFDGA
后序:ECFGDBA
層序:ABCDEFG
-
將此二叉樹用仿真指針孩子雙親表示法存儲。
|
Parent |
Lchild |
Rchild |
A |
-1 |
1 |
-1 |
B |
0 |
2 |
3 |
C |
1 |
-1 |
4 |
D |
1 |
5 |
6 |
E |
2 |
-1 |
-1 |
F |
3 |
-1 |
-1 |
G |
3 |
-1 |
-1 |
-
對關鍵碼序列(1, 5, 2, 4 , 6, 7, 8, 3),執行升序排序,寫出以下排序算法在每一趟排序結束時的關鍵碼序列。
-
冒泡排序;
第一趟:1, (2, 5, 3 , 4, 6, 7, 8)
第二趟:1, 2,(3, 5 , 4, 6, 7, 8)
第三趟:1, 2,3,(4 , 5, 6, 7, 8)
第四趟:1, 2,3, 4 ,(5, 6, 7, 8)
提前結束排序
-
簡單選擇排序
第一趟:1, (5, 2, 4 , 6, 7, 8, 3)
第二趟:1, 2, (5, 4 , 6, 7, 8, 3)
第三趟:1, 2, 3, (4 , 6, 7, 8, 5)
第四趟:1, 2, 3, 4 ,( 6, 7, 8, 5)
第五趟:1, 2, 3, 4 ,5, ( 7, 8, 6)
第六趟:1, 2, 3, 4 ,5, 6,( 8, 7)
第七趟:1, 2, 3, 4 ,5, 6, 8,(7)
-
希爾排序(d={5,2,1})
第一趟:(1, 5, 2, 4 , 6, 7, 8, 3)
第二趟:(1, 3, 2, 4 , 6, 5, 8, 7)
第三趟:(1, 2, 3, 4 , 5, 6, 7, 8)
-
請把圖1的樹轉換為二叉樹,對二叉樹進行前,中,后,層序遍歷,把圖2的二叉樹轉換為樹,對樹進行先根,后根,層序遍歷。
圖1 圖2
圖1對應的二叉樹為:
前序:ABEFICHJGD
中序:EIFBHJGCDA
后序:IFEGJHDCBA
層序:ABECFHDIJG
圖2對應的樹為:
先根序列:ABCEFGD
后根序列:BEGFCDA
層序序列:ABCDEFG
-
有如下圖所示的帶權有向圖G,試回答以下問題。
-
給出G的一個拓撲序列
-
給出從頂點1到頂點8的最短路徑
G的一個拓撲序列:1、2、4、6、5、3、7、8
S集 1(頂點) |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
1 |
6 1 |
∞ 1 |
1 1 |
∞ 1 |
50 1 |
∞ 1 |
∞ 1 |
1,4 |
6 1 |
∞ 1 |
|
13 4 |
50 1 |
∞ 1 |
∞ 1 |
1,4,2 |
|
49 2 |
|
12 2 |
50 1 |
∞ 1 |
∞ 1 |
1,4,2,5 |
|
49 2 |
|
|
50 1 |
36 5 |
∞ 1 |
1,4,2,5,7 |
|
49 2 |
|
|
50 1 |
|
56 7 |
1,4,2,5,7,3 |
|
|
|
|
50 1 |
|
56 7 |
1,4,2,5,7,3,6 |
|
|
|
|
|
|
56 7 |
1,4,2,5,7,3,6,8 |
|
|
|
|
|
|
|
所以,1到8最短路徑為56,路徑為:1->2->5->7->8
六、算法設計題
1、單鏈表的插入和刪除,雙向鏈表的插入和刪除。
2、括號匹配算法。
3、二叉樹的先序、中序、后續遍歷的遞歸算法,求二叉樹的高度的遞歸算法。
4、圖的深度優先遍歷的遞歸算法。