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

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

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

10 積分

下載資源

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

資源描述:

《數(shù)據(jù)結構教程習題答案 李蓉蓉 安楊等編著第三版 第四章練習題答案》由會員分享,可在線閱讀,更多相關《數(shù)據(jù)結構教程習題答案 李蓉蓉 安楊等編著第三版 第四章練習題答案(9頁珍藏版)》請在裝配圖網(wǎng)上搜索。

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

2、* 若發(fā)現(xiàn)源碼有錯或高人有更好的方式,請留言本人的空間,你的留言將是對我學習的最大幫助,感激不盡 ******************************************************/ # 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("沒有匹配的字符串\n"); else printf("匹配的有%d個\n", n); } //初始化字符串 STRING *init_string(void) { STRING *st; st = (STRING *)malloc(sizeof(STRING)); if(NULL == st) { printf("內(nèi)存分配錯誤\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; } //計算符合要求字串的個數(shù) if(j>=t->length) { n++; j = 0; } } return n; } /********************************* 輸入主串, there are many boy are are 輸入模式串 ?re 匹配的有4個 Press any key to continue ***********************************************/ 4.2 /*****************

7、******************* 題目:有兩個串s1和s2,設計一個算法求一個這樣的串,該串的字符是s1和s2中公共字符 設計;狼影 時間:2012.9.23 *****************************************/ /***************************************************************************************** 若發(fā)現(xiàn)源碼有錯,或高人有更好的方法,請在本人百度空間留言,感激不盡,,你的留言將是對我學習的最大幫助?。? ******************

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; //申請空間 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("沒有相同的字符\n"); } //初始化字符串 STRING *init_string(void) { STRING *st; st = (STRING *)malloc(sizeof(STRING)); if(NULL == st) { printf("內(nèi)存分配錯誤\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)尋找相同的字符,并保證輸入的字符不重復有些麻煩,若有好的方法,希望告知! 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 /*************************************** 題目:設目標串為t = 'abcaabbab

14、cabaacbacba' 模式p = 'abcabaa' (1):計算p的nextval函數(shù)值 (2):不寫算法,只畫出KMP算法進行模式匹配時,每一趟的匹配過程(??!此題,讀者自己去畫,下面只是KMP算法的代碼實現(xiàn)) (課本上喲相關的畫法,大可參照課本111頁來畫) 實踐;狼影 時間:2012.9.23 *****************************************/ /************************************************* 若發(fā)現(xiàn)源碼錯誤,請在本人百度空間留言,你的留言將是對我學習的最大幫助

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("沒有匹配的字串\n"); else printf("

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

18、return st; } //KMP算法的實現(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 匹配字串起始的下標是7 Press any key to continue *************************************************/

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

相關資源

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

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

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


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