数据结构习题
1.在線性表中最常用的操作是存取第i個元素及其前驅(qū)的值,采用( ?A )存儲方式最省時間。
A.順序表 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? B.帶頭結(jié)點(diǎn)的單鏈表 ? C.帶頭指針的雙向循環(huán)鏈表 ? ? ?D.帶頭指針的單向循環(huán)鏈表
2.在一個單鏈表中,已知z結(jié)點(diǎn),若在z后插入j結(jié)點(diǎn),則須執(zhí)行( C ?)。
A. z->next=j->next; j->next=z;?? ??? ??? ?B. j->next=z; z->next=j->next C. j->next=z->next; z->next=j;?? ??? ??? ?D. z->next=j; j->next=z;
3. 一個稀疏矩陣采用三元組表示壓縮存儲后,和直接采用二維數(shù)組存儲相比會失去( B ?)特性。
? ?A.順序存儲?? ??? ??? ?B.隨機(jī)存取?? ??? ? ? ? ?C.輸入輸出?? ??? ??? ?D.以上都不對
4. 假設(shè)以行序?yàn)橹餍虼鎯ΧS數(shù)組A=array[1..40,1..90],設(shè)每個數(shù)據(jù)元素占2個存儲單元,基地址LOC[1,1]為500,則LOC[35,63]的存儲位置為(? ?D)。
解析:Loc(i,j)=Loc(1,1)+[n×(i-1)+j-1]×b,其中,Loc(1,1)是第一個元素A[1][1]的首地址,b是每個元素占用的存儲單元個數(shù)。代入數(shù)據(jù)便得LOC[35,63] =500+[90*(35-1)+63-1]*2=6744
?? ?A.6746 ?? ? B.6924?? ??? ?C.6926?? ??? ?D.6744
5.遞歸過程或函數(shù)調(diào)用時,處理參數(shù)及返回地址要用一種稱為( ?C )的數(shù)據(jù)結(jié)構(gòu)。
A.隊(duì)列 ? ? ? ? ? ?B.數(shù)組 ? ? ? ? C.棧 ? ? ? ? ?D.線性表
6.一個棧的輸入序列為12345,則下列序列中不可能是棧的輸出序列的是( B ?)。
A.23415 ? ? ? ? ? B.54132 ? ? ? ?C.23145 ? ? ? D.15432
7.設(shè)數(shù)組Data[m]作為循環(huán)隊(duì)列SQ的存儲空間,front為頭指針,rear為尾指針,則執(zhí)行出隊(duì)操作后,頭指針front的值為( ?D )。
A. front=fornt+1 ? ? ? ? B. front=(fornt+1)%(m-1) C. front=(fornt-1)%m ? ? D. front=(fornt+1)%m
8.設(shè)循環(huán)隊(duì)列中數(shù)組的下標(biāo)范圍是1至n,其頭尾指針分別為f和r,則隊(duì)列中的元素個數(shù)為( D ?)。 ?
?A.r-f ? ? ? ? ? B.r-f+1 ? ? ? ? C.(r-f+1)%n ? ? D.(r-f+n)%n
9.對于棧操作數(shù)據(jù)的原則是( B ?)。
A.先進(jìn)先出 ? ? ?B.后進(jìn)先出 ? ? ?C.后進(jìn)后出 ? ? ?D.不分順序
10.一個棧的輸入序列為1,2,3,…,n,若輸出序列的第一個元素是n,輸出第i(1≤i≤n)個元素是( B?)。
?A.不確定 ? ? ? B.n-i+1 ? ? ? ? ?C. i ? ? ? ? ? D. n-i
11. 樹的后序遍歷序列和其轉(zhuǎn)換的二叉樹的哪種遍歷序列相同( A ?)。
A.中序遍歷?? ??? ?B.層次遍歷?? ??? ?C.后序遍歷?? ??? ?D.先序遍歷
12.如果節(jié)點(diǎn)A有3個兄弟,B是A的雙親,則節(jié)點(diǎn)B的度為( D ?)。
A.1 ? ? ? ? ? ? B.2 ? ? ? ? ? ? C.3 ? ? ? ? ? ? ?D.4
13. 已知順序表L中有n個數(shù)據(jù)元素,則讀取第i個數(shù)據(jù)元素的平均時間復(fù)雜度為( B ?)。
A.O(n)?? ? ? ??? ?B. O(1)?? ? ? ? C. O(n2)?? ??? ? ? ? ?D. O(nlgn)
14.有10個葉子節(jié)點(diǎn)的二叉樹有( ?B )個度為2的節(jié)點(diǎn)。
A.8 ? ? ? ? ? ? B.9 ? ? ? ? ? ? ?C.10 ? ? ? ? ? ? ?D.11
15. 一棵二叉樹中總結(jié)點(diǎn)個數(shù)為200,其中單分支結(jié)點(diǎn)個數(shù)為19,其葉子結(jié)點(diǎn)個數(shù)為( ?B )。
A.90?? ??? ??? ?B.91?? ? ? ? ??? ?C.92?? ? ? ? ? ? ?D.93
16. 強(qiáng)連通分量是( ? ?B ?)的極大連通子圖。
A.網(wǎng)?? ??? ??? ?B.有向圖?? ??? ?C.圖?? ??? ? ? ? ?D.無向圖
17.一棵二叉樹的先序序列和后序序列正好相反,則該二叉樹一定是( ?D )。
A.空樹或只有一個節(jié)點(diǎn) ? ? ? B.完全二叉樹 C.滿二叉樹 ? ? ? ? ? ? ? ? D.高度等于其節(jié)點(diǎn)數(shù)
18.設(shè)有13個值,用它們組成一棵哈夫曼樹,則哈夫曼樹共有( D ?)個節(jié)點(diǎn)。
A.13 ? ? ? ? ? ? ?B.12 ? ? ? ? ? C.26 ? ? ? ? ? ? D.25
19.無向圖的鄰接矩陣是一個( A ?)。
A.對稱矩陣 ? ? ? ?B.零矩陣 ? ? ? ?C.上三角矩陣 ? ? D.對角矩陣
20. 具有12個頂點(diǎn),36條邊的有向圖,所有頂點(diǎn)度的和為(? A? ?)。
A.72?? ? ? ? ??? ?B.24?? ??? ? ? ? C.36?? ? ? ? ? ? ?D.66
(1)簡述棧和隊(duì)列的相同點(diǎn)和不同點(diǎn)。
棧和隊(duì)列都是線性表,都是限制了插入刪除點(diǎn)的線性表。 共同點(diǎn):都是只能在線性表的端點(diǎn)插入和刪除 不同點(diǎn):棧的插入和刪除都在線性表的同一端點(diǎn),該點(diǎn)統(tǒng)稱棧頂,相應(yīng)的,不能插入刪除的另一個端點(diǎn)統(tǒng)稱棧底,特性是后進(jìn)先出 隊(duì)列在線性表的表尾插入,表頭刪除,其特性是先進(jìn)先出。
(2)簡述哈夫曼樹的構(gòu)造方法。
哈夫曼樹又稱最優(yōu)二叉樹,大致分為四步:①初始化②找最小樹,也就是選兩個最小權(quán)值的樹,并計(jì)算權(quán)值之和,最小的兩個權(quán)值分別作為權(quán)值和的左右子樹(左小右大)。③刪除并加入,刪除那兩個最小的數(shù),把新樹加入到森林中。④判斷,重復(fù)②③操作,直到森林里只剩下最后一棵樹就是哈夫曼樹。
(3)簡述圖的深度優(yōu)先搜索算法。
①從圖中找到某個頂點(diǎn)v0出發(fā),首先訪問v0.②找到剛訪問過的頂點(diǎn)的第一個未被訪問的鄰接點(diǎn),然后訪問該頂點(diǎn)。以該頂點(diǎn)為新頂點(diǎn),重復(fù)此步驟,直到剛訪問過的頂點(diǎn)沒有未被訪問的鄰接點(diǎn)為止。③返回前一個訪問過的且仍有未被訪問的鄰接點(diǎn)的頂點(diǎn),找出該頂點(diǎn)的下一個未被訪問的鄰接點(diǎn),訪問該頂點(diǎn);然后執(zhí)行步驟②
1.寫出下列程序段的輸出結(jié)果(棧的元素類型SElemType為char)。
(1) ? ? void main() {
Stack S;
char x,y;
InitStack(S);
x= ‘c’; y= ‘k’;
Push(S,x);??
?Push(S, ‘a(chǎn)’);?
? ?Push(S,y);
Pop(S,x);??
?Push(S, ‘t’);??
?Push(S,x);
Pop(S,x);??
?Push(S, ‘s’);
while(!StackEmpty(S)) { Pop(S,y); printf(y); } printf(x); }
解析:Push(S,x)后棧內(nèi)為 c,Push(S, ‘a(chǎn)’);Push(S,y)后棧內(nèi)為cak; ?Pop(S,x)后出棧k, 此時x=k,棧內(nèi)為 ca; Push(S, ‘t’)后棧內(nèi)為 cat; Push(S,x)后棧內(nèi)為catk; ?Pop(S,x)后出棧k,此時x=k,棧內(nèi)為cat; ?Push(S, ‘s’)后,棧內(nèi)為cats; Pop(S,y) ?printf(y)循環(huán)打印棧內(nèi)元素stac , ?printf(x)打印出k ,故結(jié)果為stack
(2) ?root為根指針,對右圖二叉樹B,執(zhí)行下列算法traversal(root),試指出其輸出結(jié)果。 ?
? ?struct node { char data; struct node *lchild, rchild; };? ? ? ? ? ? ??
void traversal(struct node *root) {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?if (root) {printf(“%c”, root->data);
traversal(root->lchild);
printf(“%c”, root->data);
traversal(root->rchild); } }
解析:這是“先根再左再根再右”,比前序遍歷多打印各節(jié)點(diǎn)一次,輸出結(jié)果為:ABCCEEBADFFDGG
①每個結(jié)點(diǎn)肯定都會被打印兩次;②但出現(xiàn)的順序不同,其規(guī)律是:凡是有左子樹的結(jié)點(diǎn),必間隔左子樹的全部結(jié)點(diǎn)后再重復(fù)
出現(xiàn);如A,B,D等結(jié)點(diǎn)。反之馬上就會重復(fù)出現(xiàn)。如C,E,F,G等結(jié)點(diǎn)。
一、假定用于通信的電文由8個字母A,B,C,D,E,F,G,H組成,各字母在電文中出現(xiàn)的頻率為:5,25,4,7,9,12,30,8,試畫出哈夫曼樹并為這8個字母設(shè)計(jì)哈夫曼編碼。(編碼左0右1)
二、已知二維數(shù)組表示的圖的鄰接矩陣如圖所示。試分別畫出自頂點(diǎn)1出發(fā)進(jìn)行遍歷所得的深度優(yōu)先生成樹和廣度優(yōu)先生成樹。
?
?
三、寫出下面樹的先根遍歷和后根遍歷結(jié)果,并把它轉(zhuǎn)換為二叉樹
四、畫出下圖的鄰接表存儲結(jié)構(gòu)
?
?
?
總結(jié)
- 上一篇: 易到要在网约车市场突围并不容易
- 下一篇: scipy.ndimage.measur