【最详细】数据结构(C语言版 第2版)第二章课后习题答案 严蔚敏 等 编著
所有章節(jié)答案合集——>傳送門
第 2 章線性表
1.選擇題
( 1)順 序表中 第一個 元 素的存儲 地址 是 100 ,每 個元素的 長度 為 2,則 第 5 個 元 素 的 地 址 是 ( )。 A. 110 B . 108 C. 100 D. 120
答案: B
解釋:順序表中的數(shù)據(jù)連續(xù)存儲,所以第 5 個元素的地址為: 100+2*4=108 。
( 2)在 n 個結(jié)點的順序表中,算法的時間復(fù)雜度是 O(1) 的操作是() 。 A .訪問第 i 個結(jié)點( 1≤ i≤ n)和求第 i 個結(jié)點的直接前驅(qū)( 2≤ i≤ n) B .在第 i 個結(jié)點后插入一個新結(jié)點( 1≤ i≤ n) C.刪除第 i 個結(jié)點( 1≤ i≤ n) D .將 n 個結(jié)點從小到大排序
答案: A
解釋: 在順序表中插入一個結(jié)點的時間復(fù)雜度都是 O(n 2) ,排序的時間復(fù)雜度為 O(n 2 ) 或 O(nlog 2n)。順序表是一種隨機存取結(jié)構(gòu),訪問第 i 個結(jié)點和求第 i 個結(jié)點的直接前驅(qū)都可
以直接通過數(shù)組的下標直接定位,時間復(fù)雜度是 O(1) 。
( 3)向一個有 127 個元素的順序表中插入一個新元素并保持原來順序不變, 平均要移動的元素個數(shù)為() 。 A. 8 B . 63.5 C . 63 D. 7
答案: B
解釋:平均要移動的元素個數(shù)為: n/2 。
( 4)鏈接存儲的存儲結(jié)構(gòu)所占存儲空間() 。
A .分兩部分,一部分存放結(jié)點值,另一部分存放表示結(jié)點間關(guān)系的指針
B .只有一部分,存放結(jié)點值
C.只有一部分,存儲表示結(jié)點間關(guān)系的指針
D .分兩部分,一部分存放結(jié)點值,另一部分存放結(jié)點所占單元數(shù)
答案: A
( 5)線性表若采用鏈式存儲結(jié)構(gòu)時,要求內(nèi)存中可用存儲單元的地址() 。
A .必須是連續(xù)的 B.部分地址必須是連續(xù)的
C.一定是不連續(xù)的 D.連續(xù)或不連續(xù)都可以
答案: D
( 6)線性表L在()情況下適用于使用鏈式結(jié)構(gòu)實現(xiàn)。
A .需經(jīng)常修改L中的結(jié)點值B.需不斷對L進行刪除插入
C.L中含有大量的結(jié)點D.L中結(jié)點結(jié)構(gòu)復(fù)雜
答案: B
解釋:鏈表最大的優(yōu)點在于插入和刪除時不需要移動數(shù)據(jù),直接修改指針即可。
( 7)單鏈表的存儲密度() 。
A .大于 1 B .等于 1 C.小于 1 D.不能確定
答案: C
解釋:存儲密度是指一個結(jié)點數(shù)據(jù)本身所占的存儲空間和整個結(jié)點所占的存儲空
間之比,假設(shè)單鏈表一個結(jié)點本身所占的空間為 D,指針域所占的空間為 N,則存儲密
度為: D/(D+N) ,一定小于 1。
( 8)將兩個各有 n 個元素的有序表歸并成一個有序表,其最少的比較次數(shù)是() 。
A . n B . 2n-1 C . 2n D . n-1
答案: A
解釋:當?shù)谝粋€有序表中所有的元素都小于(或大于)第二個表中的元素,只需
要用第二個表中的第一個元素依次與第一個表的元素比較,總計比較 n 次。
( 9)在一個長度為 n 的順序表中,在第 i 個元素( 1≤ i≤ n+1 )之前插入一個新元素時
須向后移動()個元素。
A . n-i B . n-i+1 C. n-i-1 D . I
答案: B
(10) 線性表 L=(a 1, a2 , an) ,下列說法正確的是() 。 A .每個元素都有一個直接前驅(qū)和一個直接后繼
B .線性表中至少有一個元素
C.表中諸元素的排列必須是由小到大或由大到小
D .除第一個和最后一個元素外,其余每個元素都有一個且僅有一個直接前驅(qū)和直接
后繼。
答案: D
(11) 創(chuàng)建一個包括 n 個結(jié)點的有序單鏈表的時間復(fù)雜度是() 。 A . O(1) B . O(n) C. O(n 2
) D . O(nlog 2n)
答案: C
解釋:單鏈表創(chuàng)建的時間復(fù)雜度是 O(n) ,而要建立一個有序的單鏈表,則每生成一個新結(jié)點時需要和已有的結(jié)點進行比較,確定合適的插入位置,所以時間復(fù)雜度是O(n2) 。
(12) 以下說法錯誤的是() 。
A .求表長、定位這兩種運算在采用順序存儲結(jié)構(gòu)時實現(xiàn)的效率不比采用鏈式存儲結(jié)
構(gòu)時實現(xiàn)的效率低
B .順序存儲的線性表可以隨機存取
C.由于順序存儲要求連續(xù)的存儲區(qū)域,所以在存儲管理上不夠靈活
D .線性表的鏈式存儲結(jié)構(gòu)優(yōu)于順序存儲結(jié)構(gòu)
答案: D
解釋: 鏈式存儲結(jié)構(gòu)和順序存儲結(jié)構(gòu)各有優(yōu)缺點,有不同的適用場合。
(13) 在單鏈表中,要將 s 所指結(jié)點插入到 p 所指結(jié)點之后,其語句應(yīng)為() 。
A . s->next=p+1;p->next=s;
B . (*p).next=s;(*s).next=(*p).next;
C. s->next=p->next;p->next=s->next;
D . s->next=p->next;p->next=s;
答案: D
(14) 在雙向鏈表存儲結(jié)構(gòu)中,刪除 p 所指的結(jié)點時須修改指針() 。
A . p->next->prior=p->prior;p->prior->next=p->next;
B . p->next=p->next->next;p->next->prior=p;
C. p->prior->next=p;p->prior=p->prior->prior;
D . p->prior=p->next->next;p->next=p->prior->prior;
答案: A
(15) 在雙向循環(huán)鏈表中,在 p 指針所指的結(jié)點后插入 q 所指向的新結(jié)點,其修改指針的
操作是() 。
A . p->next=q; q->prior=p;p->next->prior=q;q->next=q;
B . p->next=q;p->next->prior=q;q->prior=p;q->next=p->next;
C. q->prior=p;q->next=p->next;p->next->prior=q;p->next=q;
D . q->prior=p;q->next=p->next;p->next=q;p->next->prior=q;
答案: C
2.算法設(shè)計題
( 1)將兩個遞增的有序鏈表合并為一個遞增的有序鏈表。 要求結(jié)果鏈表仍使用原來兩個
鏈表的存儲空間 , 不另外占用其它的存儲空間。表中不允許有重復(fù)的數(shù)據(jù)。
[ 題目分析 ]
合并后的新表使用頭指針 Lc 指向, pa 和 pb 分別是鏈表 La 和 Lb 的工作指針 , 初始化為
相應(yīng)鏈表的第一個結(jié)點,從第一個結(jié)點開始進行比較,當兩個鏈表 La 和 Lb 均為到達表尾結(jié)
點時,依次摘取其中較小者重新鏈接在 Lc 表的最后。如果兩個表中的元素相等,只摘取 La
表中的元素,刪除 Lb 表中的元素,這樣確保合并后表中無重復(fù)的元素。當一個表 到達表尾結(jié)
點,為空時,將非空表的剩余元素直接鏈接在 Lc 表的最后。
[ 算法描述 ]
( 2)將兩個非遞減的有序鏈表合并為一個非遞增的有序鏈表。 要求結(jié)果鏈表仍使用原來
兩個鏈表的存儲空間 , 不另外占用其它的存儲空間。表中允許有重復(fù)的數(shù)據(jù)。
[ 題目分析 ]
合并后的新表使用頭指針 Lc 指向, pa 和 pb 分別是鏈表 La 和 Lb 的工作指針 , 初始化為
相應(yīng)鏈表的第一個結(jié)點,從第一個結(jié)點開始進行比較,當兩個鏈表 La 和 Lb 均為到達表尾結(jié)
點時,依次摘取其中較小者重新鏈接在 Lc 表的表頭結(jié)點之后,如果兩個表中的元素相等,只
摘取 La 表中的元素,保留 Lb 表中的元素。當一個表到達表尾結(jié)點,為空時,將非空表的剩
余元素依次摘取,鏈接在 Lc 表的表頭結(jié)點之后。
[ 算法描述 ]
( 3)已知兩個鏈表 A 和 B 分別表示兩個集合,其元素遞增排列。請設(shè)計算法求出 A 與 B
的交集,并存放于 A 鏈表中。
[ 題目分析 ]
只有同時出現(xiàn)在兩集合中的元素才出現(xiàn)在結(jié)果表中 , 合并后的新表使用頭指針 Lc 指向。
pa 和 pb 分別是鏈表 La 和 Lb 的工作指針 , 初始化為相應(yīng)鏈表的第一個結(jié)點, 從第一個結(jié)點開
始進行比較,當兩個鏈表 La 和 Lb 均為到達表尾結(jié)點時,如果兩個表中相等的元素時,摘取
La 表中的元素,刪除 Lb 表中的元素;如果其中一個表中的元素較小時,刪除此表中較小的
元素,此表的工作指針后移。當鏈表 La 和 Lb 有一個到達表尾結(jié)點,為空時,依次刪除另一
個非空表中的所有元素。
[ 算法描述 ]
( 4)已知兩個鏈表 A 和 B 分別表示兩個集合,其元素遞增排列。請設(shè)計算法求出兩個集
合 A 和 B 的差集(即僅由在 A 中出現(xiàn)而不在 B 中出現(xiàn)的元素所構(gòu)成的集合) ,并以同樣的形
式存儲,同時返回該集合的元素個數(shù)。
[ 題目分析 ]
求兩個集合 A 和 B 的差集是指在 A 中刪除 A 和 B 中共有的元素,即刪除鏈表中的相應(yīng)結(jié)
點 , 所以要保存待刪除結(jié)點的前驅(qū),使用指針 pre 指向前驅(qū)結(jié)點。 pa 和 pb 分別是鏈表 La 和
Lb 的工作指針 , 初始化為相應(yīng)鏈表的第一個結(jié)點,從第一個結(jié)點開始進行比較,當兩個鏈表
La 和 Lb 均為到達表尾結(jié)點時,如果 La 表中的元素小于 Lb 表中的元素, pre 置為 La 表的工
作指針 pa 刪除 Lb 表中的元素;如果其中一個表中的元素較小時,刪除此表中較小的元素,
此表的工作指針后移。 當鏈表 La 和 Lb 有一個為空時, 依次刪除另一個非空表中的所有元素。
[ 算法描述 ]
( 5)設(shè)計算法將一個帶頭結(jié)點的單鏈表 A 分解為兩個具有相同結(jié)構(gòu)的鏈表 B、C,其中 B
表的結(jié)點為 A 表中值小于零的結(jié)點,而 C 表的結(jié)點為 A 表中值大于零的結(jié)點(鏈表 A 中的元
素為非零整數(shù),要求 B、 C 表利用 A 表的結(jié)點) 。 [ 題目分析 ]
B 表的頭結(jié)點使用原來 A 表的頭結(jié)點,為 C 表新申請一個頭結(jié)點。從 A 表的第一個結(jié)點
開始,依次取其每個結(jié)點 p,判斷結(jié)點 p 的值是否小于 0,利用前插法,將小于 0 的結(jié)點插入
B 表 , 大于等于 0 的結(jié)點插入 C 表。
[ 算法描述 ]
( 6)設(shè)計一個算法,通過一趟遍歷在單鏈表中確定值最大的結(jié)點。
[ 題目分析 ]
假定第一個結(jié)點中數(shù)據(jù)具有最大值,依次與下一個元素比較,若其小于下一個元素,則
設(shè)其下一個元素為最大值,反復(fù)進行比較,直到遍歷完該鏈表。
[ 算法描述 ]
( 7)設(shè)計一個算法,通過遍歷一趟,將鏈表中所有結(jié)點的鏈接方向逆轉(zhuǎn),仍利用原表的
存儲空間。
[ 題目分析 ]
從首元結(jié)點開始,逐個地把鏈表 L 的當前結(jié)點 p 插入新的鏈表頭部。
[ 算法描述 ]
( 8)設(shè)計一個算法,刪除遞增有序鏈表中值大于 mink 且小于 maxk 的所有元素( mink
和 maxk 是給定的兩個參數(shù),其值可以和表中的元素相同,也可以不同 )。 [ 題目分析 ]
分別查找第一個值 >mink 的結(jié)點和第一個值 ≥ maxk 的結(jié)點,再修改指針,刪除值大于
mink 且小于 maxk 的所有元素。
[ 算法描述 ]
( 9)已知 p 指向雙向循環(huán)鏈表中的一個結(jié)點, 其結(jié)點結(jié)構(gòu)為 data 、prior 、next 三個域,
寫出算法 change§, 交換 p 所指向的結(jié)點和它的前綴結(jié)點的順序。
[ 題目分析 ]
知道雙向循環(huán)鏈表中的一個結(jié)點,與前驅(qū)交換涉及到四個結(jié)點( p 結(jié)點,前驅(qū)結(jié)點,前
驅(qū)的前驅(qū)結(jié)點,后繼結(jié)點)六條鏈。
[ 算法描述 ]
void Exchange ( LinkedList p ) ∥ p 是雙向循環(huán)鏈表中的一個結(jié)點,本算法將 p 所指結(jié)點與其前驅(qū)結(jié)點交換。
( 10)已知長度為 n 的線性表 A 采用順序存儲結(jié)構(gòu),請寫一時間復(fù)雜度為 O(n) 、空間復(fù)
雜度為 O(1) 的算法,該算法刪除線性表中所有值為 item 的數(shù)據(jù)元素。
[ 題目分析 ]
在順序存儲的線性表上刪除元素,通常要涉及到一系列元素的移動(刪第 i 個元素,第
i+1 至第 n 個元素要依次前移) 。本題要求刪除線性表中所有值為 item 的數(shù)據(jù)元素,并未要
求元素間的相對位置不變。因此可以考慮設(shè)頭尾兩個指針( i=1 , j=n ),從兩端向中間移動,
凡遇到值 item 的數(shù)據(jù)元素時,直接將右端元素左移至值為 item 的數(shù)據(jù)元素位置。
[ 算法描述 ]
排版和格式真的很費勁啊啊啊啊, 求贊~
總結(jié)
以上是生活随笔為你收集整理的【最详细】数据结构(C语言版 第2版)第二章课后习题答案 严蔚敏 等 编著的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: I/O数据有几种传送方式?各有什么特点?
- 下一篇: 【最详细】数据结构(C语言版 第2版)第