【最详细】数据结构(C语言版 第2版)第四章课后习题答案 严蔚敏 等 编著
所有章節(jié)答案合集——>傳送門
第 4 章串、數(shù)組和廣義表
1.選擇題
( 1)串是一種特殊的線性表,其特殊性體現(xiàn)在() 。
A .可以順序存儲 B .數(shù)據(jù)元素是一個(gè)字符
C.可以鏈?zhǔn)酱鎯?D .數(shù)據(jù)元素可以是多個(gè)字符若
答案: B
( 2)串下面關(guān)于串的的敘述中, ()是不正確的?
A.串是字符的有限序列 B.空串是由空格構(gòu)成的串
C.模式匹配是串的一種重要運(yùn)算 D .串既可以采用順序存儲,也可以采用鏈?zhǔn)酱鎯?br /> 答案: B
解釋:空格常常是串的字符集合中的一個(gè)元素,有一個(gè)或多個(gè)空格組成的串成為空格
串,零個(gè)字符的串成為空串,其長度為零。
( 3)串“ ababaaababaa ”的 next 數(shù)組為() 。
A . 012345678999 B. 012121111212 C. 011234223456 D. 0123012322345
答案: C
( 4)串“ ababaabab ”的 nextval 為()。
A . 010104101 B. 010102101C . 010100011 D . 010101011
答案: A
( 5)串的長度是指() 。
A .串中所含不同字母的個(gè)數(shù) B .串中所含字符的個(gè)數(shù)
C.串中所含不同字符的個(gè)數(shù) D .串中所含非空格字符的個(gè)數(shù)
答案: B
解釋:串中字符的數(shù)目稱為串的長度。
( 6)假設(shè)以行序?yàn)橹餍虼鎯ΧS數(shù)組 A=array[1…100,1…100] ,設(shè)每個(gè)數(shù)據(jù)元素占 2 個(gè)存
儲單元,基地址為 10,則 LOC[5,5]= ()。
A. 808 B. 818 C. 1010 D . 1020
答案: B
解釋:以行序?yàn)橹?#xff0c;則 LOC[5,5]=[ (5-1 ) *100+ ( 5-1 ) ]*2+10=818 。
( 7)設(shè)有數(shù)組 A[i,j] ,數(shù)組的每個(gè)元素長度為 3 字節(jié), i 的值為 1 到 8,j 的值為 1 到 10,數(shù)組從內(nèi)存首地址 BA 開始順序存放, 當(dāng)用以列為主存放時(shí), 元素 A[5,8] 的存儲首地址為 ()。
A. BA+141
B . BA+180
C. BA+222
D. BA+225
答案: B
解釋:以列序?yàn)橹?#xff0c;則 LOC[5,8]=[ ( 8-1 ) *8+ ( 5-1 ) ]*3+BA=BA+180 。
( 8)設(shè)有一個(gè) 10 階的對稱矩陣 A ,采用壓縮存儲方式,以行序?yàn)橹鞔鎯?#xff0c; a11 為第一元
素,其存儲地址為 1,每個(gè)元素占一個(gè)地址空間,則 a85 的地址為() 。
A. 13
B. 32
C. 33
D. 40
答案: C
( 9)若對 n 階對稱矩陣 A 以行序?yàn)橹餍蚍绞綄⑵湎氯切蔚脑?(包括主對角線上所有元素 ) 依次存放于一維數(shù)組 B[1…(n(n+1))/2] 中,則在 B 中確定 aij( i<j )的位置 k 的關(guān)系為 ()。
A. i*(i-1)/2+j
B. j*(j-1)/2+i
C. i*(i+1)/2+j
D. j*(j+1)/2+i
答案: B
( 10)二維數(shù)組 A 的每個(gè)元素是由 10 個(gè)字符組成的串,其行下標(biāo) i=0,1, , ,8, 列下標(biāo)j=1,2, , ,10 。若 A 按行先存儲,元素 A[8,5] 的起始地址與當(dāng) A 按列先存儲時(shí)的元素()的起始地址相同。設(shè)每個(gè)字符占一個(gè)字節(jié)。
A. A[8,5]
B. A[3,10]
C. A[5,8]
D. A[0,9]
答案: B
解釋:設(shè)數(shù)組從內(nèi)存首地址 M 開始順序存放,若數(shù)組按行先存儲,元素 A[8,5] 的起始地址為: M+[( 8-0 )*10+ (5-1)]*1=M+84 ;若數(shù)組按列先存儲,易計(jì)算出元素 A[3,10] 的起始地址為: M+[ (10-1) *9+ ( 3-0 ) ]*1=M+84 。故選 B。
( 11)設(shè)二維數(shù)組 A[1… m ,1… n] (即 m 行 n 列)按行存儲在數(shù)組 B[1… m*n] 中,則二維
數(shù)組元素 A[i,j] 在一維數(shù)組 B 中的下標(biāo)為() 。
A . (i-1)n+j B. (i-1)n+j-1 C. i(j-1) D . jm+i-1
答案: A
解釋:特殊值法。取 i=j=1 ,易知 A[1,1] 的的下標(biāo)為 1,四個(gè)選項(xiàng)中僅有 A 選項(xiàng)能確定的值為 1,故選 A 。
( 12)數(shù)組 A[0…4,-1…-3,5…7] 中含有元素的個(gè)數(shù)() 。 A. 55 B . 45 C. 36 D. 16
答案: B
解釋:共有 533=45 個(gè)元素。
( 13)廣義表 A=(a,b,(c,d),(e,(f,g))) ,則 Head(Tail(Head(Tail(Tail(A))))) 的值為() 。 A. (g) B . (d) C. c D. d
答案: D
解釋: Tail(A)=(b,(c,d),(e,(f,g))) ; Tail(Tail(A))=( (c,d),(e,(f,g))) ; Head(Tail(Tail(A)))=
(c,d) ; Tail(Head(Tail(Tail(A))))=(d) ; Head(Tail(Head(Tail(Tail(A)))))=d 。
( 14)廣義表 ((a,b,c,d)) 的表頭是() ,表尾是() 。
A. a B . ( )C . (a,b,c,d)D . (b,c,d)
答案: C、 B
解釋:表頭為非空廣義表的第一個(gè)元素,可以是一個(gè)單原子,也可以是一個(gè)子表,
((a,b,c,d)) 的表頭為一個(gè)子表 (a,b,c,d) ;表尾為除去表頭之外,由其余元素構(gòu)成的表,表為一定
是個(gè)廣義表, ((a,b,c,d)) 的表尾為空表 ( ) 。
( 15)設(shè)廣義表 L=((a,b,c)) ,則 L 的長度和深度分別為() 。 A. 1 和 1 B. 1 和 3 C. 1 和 2 D. 2 和 3
答案: C
解釋:廣義表的深度是指廣義表中展開后所含括號的層數(shù),廣義表的長度是指廣義表
中所含元素的個(gè)數(shù)。根據(jù)定義易知 L 的長度為 1,深度為 2。
2.應(yīng)用題
( 1)已知模式串 t=‘ abcaabbabcab ’寫出用 KMP法求得的每個(gè)字符對應(yīng)的 next 和 nextval
函數(shù)值。
答案:
模式串 t 的 next 和 nextval 值如下:
j 1 2 3 4 5 6 7 8 9 10 11 12
t 串 a b c a a b b a b c a b
next[j] 0 1 1 1 2 2 3 1 2 3 4 5
nextval[j] 0 1 1 0 2 1 3 0 1 1 0 5
( 2)設(shè)目標(biāo)為 t= “ abcaabbabcabaacbacba ” , 模式為 p=“ abcabaa ”
①計(jì)算模式 p 的 naxtval 函數(shù)值;
②不寫出算法 , 只畫出利用 KMP算法進(jìn)行模式匹配時(shí)每一趟的匹配過程。
答案:
① p 的 nextval 函數(shù)值為 0110132 。( p 的 next 函數(shù)值為 0111232 )。
②利用 KMP(改進(jìn)的 nextval) 算法,每趟匹配過程如下:
第一趟匹配: abcaabbabcabaacbacba
abcab(i=5,j=5)
第二趟匹配: abcaabbabcabaacbacba
abc(i=7,j=3)
第三趟匹配: abcaabbabcabaacbacba
a(i=7,j=1)
第四趟匹配: abcaabbabcabaac bacba
( 成功 ) abcabaa(i=15,j=8)
( 3)數(shù)組 A 中,每個(gè)元素 A[i,j] 的長度均為 32 個(gè)二進(jìn)位 , 行下標(biāo)從 -1 到 9,列下標(biāo)從 1 到 11 ,從首地址 S 開始連續(xù)存放主存儲器中,主存儲器字長為 16 位。求:
①存放該數(shù)組所需多少單元?
②存放數(shù)組第 4 列所有元素至少需多少單元?
③數(shù)組按行存放時(shí),元素 A[7,4] 的起始地址是多少?
④數(shù)組按列存放時(shí),元素 A[4,7] 的起始地址是多少?
答案:
每個(gè)元素 32 個(gè)二進(jìn)制位,主存字長 16 位,故每個(gè)元素占 2 個(gè)字長,行下標(biāo)可平移至 1 到 11 。( 1) 242 ( 2) 22 ( 3) s+182 ( 4) s+142
(4) 請將香蕉 banana 用工具 H( ) — Head( ) , T( ) — Tail( ) 從 L 中取出。L=(apple,(orange,(strawberry,(banana)),peach),pear)
答案: H( H( T( H( T( H( T( L)))))))
3.算法設(shè)計(jì)題
( 1)寫一個(gè)算法統(tǒng)計(jì)在輸入字符串中各個(gè)不同字符出現(xiàn)的頻度并將結(jié)果存入文件 (字符串中的合法字符為 A-Z 這 26 個(gè)字母和 0-9 這 10 個(gè)數(shù)字)。
[ 題目分析 ] 由于字母共 26 個(gè),加上數(shù)字符號 10 個(gè)共 36 個(gè),所以設(shè)一長 36 的整型數(shù)組,
前 10 個(gè)分量存放數(shù)字字符出現(xiàn)的次數(shù), 余下存放字母出現(xiàn)的次數(shù)。 從字符串中讀出數(shù)字字符
時(shí),字符的 ASCII 代碼值減去數(shù)字字符 ‘0’的 ASCII 代碼值,得出其數(shù)值 (0…9) ,字母的
ASCII 代碼值減去字符‘ A’的 ASCII 代碼值加上 10 ,存入其數(shù)組的對應(yīng)下標(biāo)分量中。遇其它
符號不作處理,直至輸入字符串結(jié)束。
[ 算法描述 ]
( 2)寫一個(gè)遞歸算法來實(shí)現(xiàn)字符串逆序存儲,要求不另設(shè)串存儲空間。
[ 題目分析 ] 實(shí)現(xiàn)字符串的逆置并不難,但本題“要求不另設(shè)串存儲空間”來實(shí)現(xiàn)字符串
逆序存儲,即第一個(gè)輸入的字符最后存儲,最后輸入的字符先存儲,使用遞歸可容易做到。
[ 算法描述 ]
( 3)編寫算法,實(shí)現(xiàn)下面函數(shù)的功能。函數(shù) void insert(chars,chart,int pos) 將
字符串 t 插入到字符串 s 中,插入位置為 pos 。假設(shè)分配給字符串 s 的空間足夠讓字符串 t插入。(說明:不得使用任何庫函數(shù))
[ 題目分析 ] 本題是字符串的插入問題,要求在字符串 s 的 pos 位置,插入字符串 t 。首
先應(yīng)查找字符串 s 的 pos 位置,將第 pos 個(gè)字符到字符串 s 尾的子串向后移動字符串 t 的長
度,然后將字符串 t 復(fù)制到字符串 s 的第 pos 位置后。
對插入位置 pos 要驗(yàn)證其合法性,小于 1 或大于串 s 的長度均為非法,因題目假設(shè)給字符串 s 的空間足夠大,故對插入不必判溢出。
[ 算法描述 ]
[ 算法討論 ] 串 s 的結(jié)束標(biāo)記 (’\0’) 也后移了,而串 t 的結(jié)尾標(biāo)記不應(yīng)插入到 s 中。
( 4)已知字符串 S1 中存放一段英文,寫出算法 format(s1,s2,s3,n), 將其按給定的長
度 n 格式化成兩端對齊的字符串 S2, 其多余的字符送 S3。 [ 題目分析 ] 本題要求字符串 s1 拆分成字符串 s2 和字符串 s3,要求字符串 s2“按給定長
度 n 格式化成兩端對齊的字符串” ,即長度為 n 且首尾字符不得為空格字符。 算法從左到右掃
描字符串 s1,找到第一個(gè)非空格字符,計(jì)數(shù)到 n,第 n 個(gè)拷入字符串 s2 的字符不得為空格,
然后將余下字符復(fù)制到字符串 s3 中。
[ 算法描述 ]
( 5)設(shè)二維數(shù)組 a[1…m, 1…n] 含有 m*n 個(gè)整數(shù)。
①寫一個(gè)算法判斷 a 中所有元素是否互不相同 ?輸出相關(guān)信息 (yes/no) ;
②試分析算法的時(shí)間復(fù)雜度。
①[ 題目分析 ] 判斷二維數(shù)組中元素是否互不相同, 只有逐個(gè)比較 , 找到一對相等的元素, 就
可結(jié)論為不是互不相同。如何達(dá)到每個(gè)元素同其它元素比較一次且只一次?在當(dāng)前行,每個(gè)
元素要同本行后面的元素比較一次(下面第一個(gè)循環(huán)控制變量 p 的 for 循環(huán)),然后同第 i+1
行及以后各行元素比較一次,這就是循環(huán)控制變量 k 和 p 的二層 for 循環(huán)。
[ 算法描述 ]
②二維數(shù)組中的每一個(gè)元素同其它元素都比較一次,數(shù)組中共 mn 個(gè)元素,第 1 個(gè)元素同
其它 mn-1 個(gè)元素比較,第 2 個(gè)元素同其它 mn-2 個(gè)元素比較, , ,第 mn-1 個(gè)元素同最
后 一 個(gè) 元 素 (mn) 比 較 一 次 , 所 以 在 元 素 互 不 相 等 時(shí) 總 的 比 較 次 數(shù) 為 (mn-1)+(mn-2)+ ,
+2+1=( mn)(mn-1)/2 。在有相同元素時(shí) , 可能第一次比較就相同 , 也可能最后一次比較時(shí)相
同 , 設(shè)在 (mn-1) 個(gè)位置上均可能相同 , 這時(shí)的平均比較次數(shù)約為( mn)(mn-1)/4 ,總的時(shí)間
復(fù)雜度是 O(n 4 ) 。
(6) 設(shè)任意 n 個(gè)整數(shù)存放于數(shù)組 A(1:n) 中,試編寫算法,將所有正數(shù)排在所有負(fù)數(shù)前面
(要求算法復(fù)雜度為 0(n) )。 [ 題目分析 ] 本題屬于排序問題,只是排出正負(fù),不排出大小??稍跀?shù)組首尾設(shè)兩個(gè)指針
i 和 j ,i 自小至大搜索到負(fù)數(shù)停止, j 自大至小搜索到正數(shù)停止。 然后 i 和 j 所指數(shù)據(jù)交換,
繼續(xù)以上過程,直到 i=j 為止。
[ 算法描述 ]
[ 算法討論 ] 對數(shù)組中元素各比較一次,比較次數(shù)為 n。最佳情況 ( 已排好 , 正數(shù)在前 , 負(fù)數(shù)
在后 ) 不發(fā)生交換,最差情況 ( 負(fù)數(shù)均在正數(shù)前面 ) 發(fā)生 n/2 次交換。用類 c 編寫,數(shù)組界偶是
0…n-1 ??臻g復(fù)雜度為 O(1)
排版和格式真的很費(fèi)勁啊啊啊啊, 求贊~
總結(jié)
以上是生活随笔為你收集整理的【最详细】数据结构(C语言版 第2版)第四章课后习题答案 严蔚敏 等 编著的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【最详细】数据结构(C语言版 第2版)第
- 下一篇: 编译原理之词法分析、语法分析、语义分析,