1. 程式人生 > >資料結構習題及解析一

資料結構習題及解析一

來源:我是碼農,轉載請保留出處和連結!
本文連結:資料結構習題解析一
一、選擇題
1、順序表是線性表的( )
A.鏈式儲存結構
B.順序儲存結構
C.索引儲存結構
D.雜湊儲存結構
解析:本題考點是順序表的基本特點。
順序表是在計算機記憶體中以陣列的形式儲存的線性表,是指用一組地址連續的儲存單元依次儲存資料元素的線性結構。線性表採用順序儲存的方式儲存就稱之為順序表。順序表是將表中的結點依次存放在計算機記憶體中一組地址連續的儲存單元中。
因此,本題參考答案是B。
2、以下說法錯誤的是( )
A.求表長、定位這二種運算在採用順序儲存結構時實現的效率不比採用鏈式儲存結構時實現的效率低
B.順序儲存的線性表可以隨機存取
C.由於順序儲存要求連續的儲存區域,所以在儲存管理上不夠靈活
D.線性表的鏈式儲存結構優於順序儲存結構
解析:本題考點是線性表相關基本概念。
“線性表的鏈式儲存結構優於順序儲存結構"這種說法是不準確的,可能在某種情況下是對的。比如在隨機查詢時,順序表比較有優勢。因此,本題參考答案是D。
3、某二叉樹的前序和後序序列正好相同,則該二叉樹一定是( )的二叉樹。
A.空或只有一個結點
B.高度等於其結點數
C.任一結點無左孩子
D.任一結點無右孩子
解析:本題考點是二叉樹的基本特點。
二叉樹的每個結點至多隻有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。某二叉樹的前序和後序序列正好相同,則該二叉樹一定是空或只有一個結點的二叉樹。
因此,本題參考答案是A。
4、以下說法錯誤的是( )
A.每個儲存結點只能存放一個數據元素
B.資料元素之間的關聯方式可由儲存結點之間的關聯方式直接表達
C.一種儲存結構可以在兩個級別上討論。其一是機器級,其二是語言級
D.語言級描述可經編譯自動轉換成機器級,因此也可以看成是一種機內表示
解析:本題考點是資料結構相關基本概念。
資料元素之間的關聯方式不可以由儲存結點之間的關聯方式直接表達。
因此,本題參考答案是B。
5、用連結方式儲存的佇列,在進行插入運算時( )。
A.僅修改頭指標
B.頭、尾指標都要修改
C.僅修改尾指標
D.頭、尾指標可能都要修改
解析:本題考點是佇列的操作。
佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。用連結方式儲存的佇列,在進行插入運算時頭、尾指標可能都要修改。
因此,本題參考答案是D。
6、迴圈佇列的出隊操作為( )
A.sq.front=(sq.ftont+1)% maxsize
B.sq.front=sq.front+1
C.sq.rear=(sq.rear+1)% maxsize
D.sq.rear=sq.rear+1
解析:本題考點是迴圈佇列的基本操作。
迴圈佇列中,由於入隊時尾指標向前追趕頭指標;出隊時頭指標向前追趕尾指標,造成隊空和隊滿時頭尾指標均相等。因此,無法通過條件front==rear來判別佇列是"空"還是"滿”。迴圈佇列的出隊操作為sq.front=(sq.ftont+1)% maxsize。
因此,本題參考答案是A。
7、下列排序演算法中,其中( )是穩定的。
A.堆排序,氣泡排序
B.快速排序,堆排序
C.直接選擇排序,希爾排序
D.歸併排序,氣泡排序
解析:本題考點是演算法穩定性的度量。
假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,ri=rj,且ri在rj之前,而在排序後的序列中,ri仍在rj之前,則稱這種排序演算法是穩定的;否則稱為不穩定的。歸併排序,氣泡排序是穩定的。
因此,本題參考答案是D。
8、最小堆是一個鍵值序列{k1,k2,…, kn},對i=1,2,…,|n/2

|,滿足( )
A.ki≤k2i≤k2i+1
B.ki<k2i+1<k2i
C.ki≤k2i且ki≤k2i+1(2i+1≤n)
D.ki≤k2i 或ki≤k2i+1(2i+1≤n)
解析:本題考點是最小堆的基本概念。
堆是一種經過排序的完全二叉樹,其中任一非終端節點的資料值均不大於(或不小於)其左孩子和右孩子節點的值。最大堆和最小堆是二叉堆的兩種形式。 最大堆:根結點的鍵值是所有堆結點鍵值中最大者。 最小堆:根結點的鍵值是所有堆結點鍵值中最小者。
因此,本題參考答案是C。
9、設陣列Data[0…m]作為迴圈佇列SQ的儲存空間,front為隊頭指標,rear為隊尾指標,則執行出隊操作的語句為( )
A.front=front+1
B.front=(front+1)% m
C.rear=(rear+1)%m
D.front=(front+1)%(m+1)
解析:本題考點是佇列的出隊操作。
佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。出隊操作的語句為front=(front+1)%(m+1)。
因此,本題參考答案是D。
10、以下說法錯誤的是( )
A.樹形結構的特點是一個結點可以有多個直接前趨
B.線性結構中的一個結點至多隻有一個直接後繼
C.樹形結構可以表達(組織)更復雜的資料
D.樹(及一切樹形結構)是一種"分支層次"結構
解析:本題考點是樹形結構的特點。
樹形結構的特點是一個結點最多有一個直接前趨。
因此,本題參考答案是A。
二、判斷題
1、中序遍歷二叉排序樹可以得到一個有序的序列( )
A正確
B錯誤
解析:本題考點是二叉排序樹的遍歷。
二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹:
(1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
(2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值;
(3)左、右子樹也分別為二叉排序樹;
(4)沒有鍵值相等的節點。 中序遍歷二叉排序樹可以得到一個有序的序列。
因此,本題參考答案是A。
2、用非遞迴方法實現遞迴演算法時一定要使用遞迴工作棧。( )
A正確
B錯誤
解析:本題考點是遞迴演算法的非遞實現。
用非遞迴方法實現遞迴演算法時不一定要使用遞迴工作棧,使用普通陣列模擬棧即可。
因此,本題參考答案是B。
3、將f = 1 + 1/2 + 1/3+ … + 1/n轉化為遞迴函式時,遞迴部分為f (n) = f (n-1) + 1/n,遞迴結束條件為f (1) = 1。( )
A正確
B錯誤
解析:本題考點是遞迴函式的轉化。
程式呼叫自身的程式設計技巧稱為遞迴。遞迴做為一種演算法在程式設計語言中廣泛應用。一個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的程式碼量。根據題意,遞迴結束條件為f (1) = 1。
因此,本題參考答案是A。
4、一個廣義表的表頭總是一個廣義表。( )
A正確
B錯誤
解析:本題考點是廣義表的特點。
廣義表的表頭是指表的第一個元素,表尾是指除表頭外的其餘元素構成的表,所以表尾是廣義表,而表頭不一定是。
因此,本題參考答案是B。
5、層次遍歷初始堆可以得到一個有序的序列。( )
A正確
B錯誤
資料結構習題解析解析:本題考點是初始堆的層次遍歷。
根據堆的定義,層次遍歷初始堆不一定得到一個有序的序列。
因此,本題參考答案是B。
6、線性表的順序儲存表示優於鏈式儲存表示。( )
A正確
B錯誤
解析:本題考點是線性表的儲存表示。
線性表的順序儲存表示優於鏈式儲存表示,這種說法是不準確的,比如對線性表進行插入和刪除時,鏈式儲存有優勢。
因此,本題參考答案是B。
7、一個廣義表 ( (a), ( (b), c), ( ( (d) ) ) ) 的表尾是 ( (b), c), ( ( (d) ) )。( )
A正確
B錯誤
解析:本題考點是廣義表相關基本概念。
一個廣義表 ( (a), ( (b), c), ( ( (d) ) ) ) 的表尾是( ( (b), c), ( ( (d) ) ))。
因此,本題參考答案是B。
8、當向一個最小堆插入一個具有最小值的元素時,該元素需要逐層向上調整,直到被調整到堆頂位置為止。( )
A正確
B錯誤
解析:本題考點是堆的調整過程。
堆是一種經過排序的完全二叉樹,其中任一非終端節點的資料值均不大於(或不小於)其左孩子和右孩子節點的值。最大堆和最小堆是二叉堆的兩種形式。 最大堆:根結點的鍵值是所有堆結點鍵值中最大者。 最小堆:根結點的鍵值是所有堆結點鍵值中最小者。 當向一個最小堆插入一個具有最小值的元素時,該元素需要逐層向上調整,直到被調整到堆頂位置為止。
因此,本題參考答案是A。
9、線性表的插入和刪除總是伴隨著大量資料的移動( )
A正確
B錯誤
解析:本題考點是線性表的基本操作。
線性表的插入和刪除並不總是伴隨著大量資料的移動,例如線性表是鏈式儲存時移動代價較小。
因此,本題參考答案是B。
10、二叉樹是一棵無序樹。( )
A正確
B錯誤
解析:本題考點是二叉樹的定義和特點。
二叉樹是每個結點最多有兩個子樹的有序樹。二叉樹常被用於實現二叉查詢樹和二叉堆。值得注意的是,二叉樹不是樹的特殊情形。
因此,本題參考答案是B。
三、分析題
1、設將整數a、b、c、d依次進棧,而只要棧非空,就可以將出棧操作夾入其中。請問能否得到出棧序列adbc和dcba?為什麼?
解析:本題考點是進棧和出棧的特點。
棧是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。棧是一種後進先出的資料結構。 因此,本題答題要點如下:
能得到dcba:push, push, push,push,pop, pop, pop,pop
但不能得到adbc: 因為d出來的時候 b,c還在棧內,次序必然b在下c在上,因此緊跟d下一個出棧的必然是c而不是b。
2、寫出下列二叉樹的前序序列、中序序列和後序序列。
二叉樹

解析:本題考點是二叉樹的前序、中序和後序遍歷演算法的基本思想。
遍歷是對樹的一種最基本的運算,所謂遍歷二叉樹,就是按一定的規則和順序走遍二叉樹的所有結點,使每一個結點都被訪問一次,而且只被訪問一次。由於二叉樹是非線性結構,因此,樹的遍歷實質上是將二叉樹的各個結點轉換成為一個線性序列來表示。
先序遍歷是首先訪問根,再先序遍歷左(右)子樹,最後先序遍歷右(左)子樹。
中序遍歷是首先中序遍歷左(右)子樹,再訪問根,最後中序遍歷右(左)子樹。
後序遍歷是首先後序遍歷左(右)子樹,再後序遍歷右(左)子樹,最後訪問根。
因此,本題答題要點如下:
前序序列:CABEFDHG
中序序列:ABFECHDG
後序序列:BFEAHGDC

3、簡述鏈隊的型別定義。
資料結構習題解析解析:本題考點是佇列的鏈式儲存結構的表示。
佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。在佇列的形成過程中,可以利用線性連結串列的原理,來生成一個佇列。基於連結串列的佇列,要動態建立和刪除節點,效率較低,但是可以動態增長。因此,本題答題要點如下:
typedef struct linked_queue
{
DataType data;
struct linked_queue *next;
}LqueueTp;
typedef struct queueptr
{
LqueueTp *front, *rear;
}QueptrTp;
QueptrTp lq;
4、把下圖中的二叉樹轉化為森林。
image.png
資料結構習題解析解析:本題考點是二叉樹轉化為森林的基本方法。
比如,若二叉樹為空,樹也為空;否則,由二叉樹的根結點開始,延右指標向下走,直到為空,途經的結點個數是相應森林所含樹的棵數;若某個結點的左指標非空,說明這個結點在樹中必有孩子,並且從二叉樹中該結點左指標所指結點開始,延右指標向下走,直到為空,途經的結點個數就是這個結點的孩子數目。因此,本題答題要點如下:
二叉樹轉化成的森林為:
森林