數(shù)據(jù)結(jié)構(gòu)教程習(xí)題答案 李蓉蓉 安楊等編著第三版 第四章練習(xí)題答案

上傳人:仙*** 文檔編號(hào):158441447 上傳時(shí)間:2022-10-04 格式:DOC 頁(yè)數(shù):9 大?。?2.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
數(shù)據(jù)結(jié)構(gòu)教程習(xí)題答案 李蓉蓉 安楊等編著第三版 第四章練習(xí)題答案_第1頁(yè)
第1頁(yè) / 共9頁(yè)
數(shù)據(jù)結(jié)構(gòu)教程習(xí)題答案 李蓉蓉 安楊等編著第三版 第四章練習(xí)題答案_第2頁(yè)
第2頁(yè) / 共9頁(yè)
數(shù)據(jù)結(jié)構(gòu)教程習(xí)題答案 李蓉蓉 安楊等編著第三版 第四章練習(xí)題答案_第3頁(yè)
第3頁(yè) / 共9頁(yè)

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《數(shù)據(jù)結(jié)構(gòu)教程習(xí)題答案 李蓉蓉 安楊等編著第三版 第四章練習(xí)題答案》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)教程習(xí)題答案 李蓉蓉 安楊等編著第三版 第四章練習(xí)題答案(9頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、4.1 /********************************************* 題目:采用順序結(jié)構(gòu)存儲(chǔ)串,編寫(xiě)一個(gè)實(shí)現(xiàn)串通配符匹配的算法,pattern_index()其中的通配符只有“?”它可以和任意一字符匹配成功,例如pattern_index("?re", "there are")返回的結(jié)果是2 實(shí)踐;狼影 時(shí)間:2012.9.23 ************************************************************/ /*********************************************

2、* 若發(fā)現(xiàn)源碼有錯(cuò)或高人有更好的方式,請(qǐng)留言本人的空間,你的留言將是對(duì)我學(xué)習(xí)的最大幫助,感激不盡 ******************************************************/ # include # include # include # define size 256 typedef struct { char string[size]; int length; }STRING; //函數(shù)的聲明 STRING *init_string(void);

3、 void creat_string(STRING *st); int pattern_index(STRING *t, STRING *s); main() { STRING *s, *t; int n; s = init_string(); t = init_string(); //輸入字符串 printf("輸入主串,\n"); creat_string(s); fflush(stdin); printf("輸入模式串\n"); creat_string(t); n = pattern_index(t, s); if

4、(0 == n) printf("沒(méi)有匹配的字符串\n"); else printf("匹配的有%d個(gè)\n", n); } //初始化字符串 STRING *init_string(void) { STRING *st; st = (STRING *)malloc(sizeof(STRING)); if(NULL == st) { printf("內(nèi)存分配錯(cuò)誤\n"); exit(-1); } st->length = 0; return st; } //輸入字符串 void creat_string(STRI

5、NG *st) { gets(st->string); st->length = strlen(st->string); } //字符串匹配 int pattern_index(STRING *t, STRING *s) { int i = 0, j = 0; int n = 0; while(ilength) { if(s->string[i] == t->string[j] || '?' == t->string[j]) { i++; j++; } else { i = i-j+1

6、; j = 0; } //計(jì)算符合要求字串的個(gè)數(shù) if(j>=t->length) { n++; j = 0; } } return n; } /********************************* 輸入主串, there are many boy are are 輸入模式串 ?re 匹配的有4個(gè) Press any key to continue ***********************************************/ 4.2 /*****************

7、******************* 題目:有兩個(gè)串s1和s2,設(shè)計(jì)一個(gè)算法求一個(gè)這樣的串,該串的字符是s1和s2中公共字符 設(shè)計(jì);狼影 時(shí)間:2012.9.23 *****************************************/ /***************************************************************************************** 若發(fā)現(xiàn)源碼有錯(cuò),或高人有更好的方法,請(qǐng)?jiān)诒救税俣瓤臻g留言,感激不盡,,你的留言將是對(duì)我學(xué)習(xí)的最大幫助??! ******************

8、*******************************************************************/ # include # include # include # define size 256 typedef struct { char string[size]; int length; }STRING; //函數(shù)的聲明 STRING *init_string(void); void creat_string(STRING *st); int

9、find_same(STRING *s1, STRING *s2, STRING *s3); main() { STRING *s1, *s2, *s3; int n; //申請(qǐng)空間 s1 = init_string(); s2 = init_string(); s3 = init_string(); //輸入字符串 creat_string(s1); fflush(stdin); creat_string(s2); //尋找相同的字符 n = find_same(s1, s2, s3); if(0 != n) {

10、 printf("相同的字符是\n"); printf("%s\n", s3->string); } else printf("沒(méi)有相同的字符\n"); } //初始化字符串 STRING *init_string(void) { STRING *st; st = (STRING *)malloc(sizeof(STRING)); if(NULL == st) { printf("內(nèi)存分配錯(cuò)誤\n"); exit(-1); } st->length = 0; return st; } //創(chuàng)建字符串 voi

11、d creat_string(STRING *st) { printf("輸入字符串\n"); gets(st->string); st->length = strlen(st->string); } //發(fā)現(xiàn)相同的字符 int find_same(STRING *s1, STRING *s2, STRING *s3) { int i, j, k = 0, d; int find = 0; //下面的三重循環(huán)尋找相同的字符,并保證輸入的字符不重復(fù)有些麻煩,若有好的方法,希望告知! for(i = 0; ilength; i++) {

12、 for(j = 0; jlength; j++) { if(s1->string[i] == s2->string[j]) { for(d = 0; d<=k; d++) if(s3->string[d] == s1->string[i]) { find = 1; goto end; } s3->string[k++] = s1->string[i]; } end: if(1 == find) { find = 0; break;

13、 } } } s3->string[k] = '\0'; return k; } /*********************************** 輸入字符串 asdfghdffsafg 輸入字符串 asfd 相同的字符是 asdf Press any key to continue *****************************************************/ 4.3 /*************************************** 題目:設(shè)目標(biāo)串為t = 'abcaabbab

14、cabaacbacba' 模式p = 'abcabaa' (1):計(jì)算p的nextval函數(shù)值 (2):不寫(xiě)算法,只畫(huà)出KMP算法進(jìn)行模式匹配時(shí),每一趟的匹配過(guò)程(?。〈祟},讀者自己去畫(huà),下面只是KMP算法的代碼實(shí)現(xiàn)) (課本上喲相關(guān)的畫(huà)法,大可參照課本111頁(yè)來(lái)畫(huà)) 實(shí)踐;狼影 時(shí)間:2012.9.23 *****************************************/ /************************************************* 若發(fā)現(xiàn)源碼錯(cuò)誤,請(qǐng)?jiān)诒救税俣瓤臻g留言,你的留言將是對(duì)我學(xué)習(xí)的最大幫助

15、,感激不盡!! *******************************************************************************/ # include # include # include # define size 256 typedef struct { char string[size]; int length; }STRING; //函數(shù)的聲明 STRING *init_string(char *p); int KMP(STRING

16、*s1, STRING *s2); void call_nextval(STRING *s, int *nextval); main() { STRING *s1, *s2; int n; char *t = "abcaabbabcabaacbacba"; char *p = "abcabaa"; //初始化字符數(shù)組 s1 = init_string(t); s2 = init_string(p); n = KMP(s1, s2); if(-1 == n) printf("沒(méi)有匹配的字串\n"); else printf("

17、匹配字串起始的下標(biāo)是%d\n", n); } //初始化字符數(shù)組 STRING *init_string(char *p) { int i = 0; STRING *st = (STRING *)malloc(sizeof(STRING)); if(NULL == st) { printf("內(nèi)存分配錯(cuò)誤\n"); exit(-1); } while(p[i] != '\0') { st->string[i] = p[i]; i++; } st->string[i] = '\0'; st->length = i;

18、return st; } //KMP算法的實(shí)現(xiàn) int KMP(STRING *s1, STRING *s2) { int nextval[size]; int differ = 0; int i = -1, j = -1; call_nextval(s2, nextval); while(ilength && jlength) { if(j == -1 || s1->string[i]==s2->string[j]) { i++; j++; } else j = nextval[j

19、]; } if(j>=s2->length) return (i-s2->length); else return -1; } //求nextval數(shù)組 void call_nextval(STRING *s, int *nextval) { int i = 0, j = -1; nextval[0] = -1; //求nextval的值 while(ilength) { if(-1==j || s->string[i] == s->string[j]) { i++; j++; if(s->stri

20、ng[i] != s->string[j]) nextval[i] = j; else nextval[i] = nextval[j]; } else j = nextval[j]; } //輸出nextval的值 printf("nextval的值是\n"); for(i = 0; ilength; i++) { printf("%d ", nextval[i]); } printf("\n"); } /********************************** nextval的值是 -1 0 0 -1 0 2 1 匹配字串起始的下標(biāo)是7 Press any key to continue *************************************************/

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!