版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、精選優(yōu)質文檔-傾情為你奉上 數(shù) 據(jù) 結 構 課 程 設 計設計題目: 串的存儲表示及基本操作 學生姓名: 專業(yè)班級: 課題名稱 串的存儲表示及基本操作院 系年級專業(yè)學 號姓 名成 績課題設計目的與設計意義1、 課題設計目的:(1):掌握串的基本存儲結構;(2):掌握串的基本運算及其實現(xiàn);2、課題設計意義:通過此次對于串及其基本操作的課程設計,更深層次的了解串的基本概念、特征,掌握串的基本存儲結構、基本運算及其實現(xiàn)。根據(jù)課程設計的目的和基本要求,注意一些容易發(fā)生錯誤的問題,從而進一步的認真分析問題、總結結論和經(jīng)驗,理解設計的思想和構思。聯(lián)系到生活上的實際問題,培養(yǎng)課程設計的能力及思想構思。指導教
2、師:年 月 日專心-專注-專業(yè)目 錄第一章 數(shù)據(jù)結構課程設計的目的、基本要求及其解析1.課程設計的目的:(1) :掌握串的基本存儲結構。(2) :掌握串的基本運算及其實現(xiàn)。2.課程設計要求:(1) :將上機程序全部調(diào)試通過。(2) :結合程序分析運行結果。3.課程設計題目解析: 顧名思義,串及其基本操作,就是要在理解串的基本概念和特征的基礎上,了解串的內(nèi)部表示和處理方法。這樣才能有效地實現(xiàn)串的基本操作。串,也還是字符串,是一種特殊的線性表。特殊之處在于表中的每一個元素都是字符,以及由此而要求的一些特殊操作。在串及其基本操作中,要求的操作有聯(lián)接、求串長、求子串、比較串的大小、串的插入、串的刪除、
3、子串的定位和置換。因為所要進行的操作比較零散也比較多,所以就要用到多個函數(shù)把這個整體的課程設計劃分成多個模塊來進行。每個函數(shù)對應一個功能。在主函數(shù)中,用一個菜單,就可以將原來的已分模塊的函數(shù)系統(tǒng)地進行檢驗及操作。在程序設計的過程中,根據(jù)課程設計的目的和基本要求,注意一些容易出錯的地方及問題。第二章 程序設計內(nèi)容1程序設計的基本思想:(對于串及其基本操作中,程序被分割為很多的模塊。所以以下的程序設計業(yè)分成好幾個方面來一一闡述)1) . 字符串的聯(lián)接:在該函數(shù)中,strcat(str1,str2)就是將串str2緊接著放在串str1的串值的末尾,組成一個新的串str1。最后所得的新的str1即為所
4、求的原來的兩個字符str1和str1的聯(lián)接后的結果。輸出即是。2) .比較兩個字符串的大?。涸谠摵瘮?shù)中,strcmp(str1,str2)是一個函數(shù),它的功能是比較兩個串str1和str2的大小,通過if語句的判斷函數(shù)strcmp(str1,str2)的函數(shù)值大小,其中函數(shù)值小于、等于和大于0時,分別表示str1<str2、str1=str2、str1>str2,其對應的輸出結果分別為-1、0、1。3) 求字符串的串長:在該函數(shù)中,要先定義一個整形變量i,strlen(str)表示字符串str的長度,它是一個整形函數(shù)。通過函數(shù)strlen(str)來算出字符串的長度,然后賦值給整形
5、變量i輸出,從而i的值即為所求的字符串的長度。4) . 串的復制:在該函數(shù)中,首先分別輸入兩串字符串str1和str2,通過函數(shù)strcpy(str1,str2)來實現(xiàn)str2復制給str1的功能,得到復制后的字符串為新的str1,輸出即為復制后的結果。 5) .求字符串的插入:該函數(shù)中有三個形參,兩個是字符串s和t,一個是整形形參i。即把字符串t插入到s的第i個元素之后。在函數(shù)中,定義兩個個整形變量j、k,其中&s->curlen和&t->curlen分別指原字符串和要插入字符串的長度。用一個for循環(huán),"for(j=s->curlen1;j>
6、;=i;j-)",滿足循環(huán)條件的要進行的操作時把s->chj賦值給s->chj+t->curlen,就是讓s->ch中空出等于&t-.curlen的長度的空間,好讓t可以插入。下面再用一個for循環(huán)''for(k=0,j=i;t->chk!='0'k+,j+)",再把t->chk賦值給s->chj;這樣的把t插入到了s中。最后,給s->chs->curlen+t->curlen賦值一個"0",這時的s->chs->curlen+t->cu
7、rlen就是一個新的字符串,然后把s->chs->curlen+t->curlen再賦值給s->curlen即可得到所求的新的字符串6) .求串的刪除:該函數(shù)有三個形參,一個是字符串s,兩個是整形形參i和j,在函數(shù)中定義一個整形變量k,輸入原字符串和其長度&s->curlen,函數(shù)中用for循環(huán),"for(k=i+j-1;s->chk!='0'k+)",把s->chk賦值給s->chk-j,既用覆蓋的方式刪除從第i個元素開始連續(xù)j個元素,最后把''0''賦值給s->
8、chk-j,再把k-j賦值給s->curlen。s->ch就是所求的刪除從第i個元素開始連續(xù)j個元素后的新的字符串。 7) . .求字符串的置換:這個函數(shù)中有四個形參,兩個字符串s和t,兩個整形形參i和j,在函數(shù)內(nèi)部還要定義五個整形變量k=0、l、n、m、p。首先把i+j賦值給l;通過輸入輸入主字符串和要置換的字符串的長度、主字符串和要置換的字符串s和t。先要判斷j和將要被置換的字符串的串長關系,如果剛好相等,就讓t從第一個元素開始,s從第第i個元素開始,一一賦值。如果t的串長比較大,則用一個for循環(huán),for''(k=s->curlen;k>=i+j-
9、1;k+)'',sk賦值給sk-j+t->scurlen,這樣剩余的空間剛好可以用來存放t的,同樣的,如果t的串長比較小,同樣用以for循環(huán),''for(k=i+j-1,m=i;sk!='0'k+,m+)'',sk賦值給sm+t->curlen-1,s剩余的空間也剛好用來存放t的。然后,把t中的元素對應的賦值給s。最后,在s的最后一個元素后賦值一個'0',這時的s,就是t置換后的新的字符串。8) .子串的定位:這個函數(shù)有兩個形參,s和t,在函數(shù)內(nèi)部,還要定義兩個整形變量i=0和j=0。用while語句&
10、#39;' while(i<s->curlen)&&(j<t->curlen))'',滿足條件后進行的操作是檢驗對應的s和t的元素是否相等,相等時就i+,j+,用i減去t的串長即為t作為子串在s中的定位位置。不相等時,就用i減去j加上1賦值給i,j=0,往下掃描時,就從t的第一個元素再接著掃描。9) 主函數(shù):在主函數(shù)中,因為要最多輸入兩個字符串,所以要先定義兩個字符串s和t。有的主函數(shù)需要用到整形的變量,最多是兩個,所以也要定義兩個整形變量k和m。函數(shù)中,有很多的功能不同的函數(shù),這樣就要求驗證很多次,所以在這里我們考慮用菜單來實現(xiàn)
11、。用一個while循環(huán),循環(huán)的條件為永真,這樣當做完一個函數(shù)的驗證時,系統(tǒng)就會自動讓你接著選擇。在while循環(huán)下,輸入一個數(shù)字。每個數(shù)字代表不同的功能。然后用一個switch語句,不同的case對應不同的函數(shù),如:case(0)就可以代表求字符串的串長。2.程序設計代碼:#include<stdio.h>#include<string.h>#define maxsize 32 /*假設串可能的最大長度是32*/typedef structchar chmaxsize; /*串的存儲空間*/int curlen; /*當前串的長度*/seqstring;seqstrin
12、g *s;void strcats() /*串的聯(lián)接*/seqstring str132,str232;printf("請輸入兩串字符串:"); /*輸入兩串字符串*/ scanf("%s%s",str1,str2); /*接受輸入的字符串*/strcat(str1,str2); /*聯(lián)接兩個字符串*/puts(str1); /*輸出聯(lián)接后的字符串*/void strcmps() /*比較字符串的大小*/ seqstring str132,str232;printf("請輸入兩串字符串:"); scanf("%s%s&quo
13、t;,str1,str2);if(strcmp(str1,str2)>0)printf("1");if(strcmp(str1,str2)=0)printf("0");if(strcmp(str1,str2)<0)printf("-1");void strlens() /*求字符串的長度*/ seqstring str32;int i;printf("請輸入一串字符串:");scanf("%s",str);i=strlen(str);printf("此字符串的串長為:%d&
14、quot;,i);void strcpys() /*串的復制*/seqstring str132,str232;printf("請輸入兩串字符串:"); scanf("%s%s",str1,str2);strcpy(str1,str2);printf("復制后的字符串為%s",str1);void insert(seqstring *s,int i,seqstring *t) /*串的插入*/int j,k;printf("請輸入原字符串和其長度:");scanf("%s%d",s,&s
15、->curlen);printf("請輸入要插入的字符串及其長度:");scanf("%s%d",t,&t->curlen);for(j=s->curlen-1;j>=i;j-)s->chj+t->curlen=s->chj;for(k=0,j=i;t->chk!='0'k+,j+)s->chj=t->chk;s->chs->curlen+t->curlen='0's->curlen=s->curlen+t->curle
16、n;printf("插入后的字符串為:");puts(s->ch);void deletes(seqstring *s,int i,int j) /*串的刪除*/ int k;printf("請輸入原字符串和其長度:");scanf("%s%d",s,&s->curlen); for(k=i+j-1;s->chk!='0'k+)s->chk-j=s->chk;s->chk-j='0's->curlen=k-j; printf("刪除后的字符串為
17、:");puts(s->ch);void replace(seqstring *s,int i,int j,seqstring *t) /*串的置換*/int k=0,l,n,m,p;l=i+j; printf("請輸入主字符串的長度:");scanf("%d",&s->curlen); printf("請輸入要置換的字符串的長度:");scanf("%d",&t->curlen); printf("請輸入主字符串和要置換的字符串:"); scanf(
18、"%s%s",s,t);if(j=t->curlen) for(k=0;t->chk!='0'k+) s->chi-1=t->chk; i+; s->curlen=s->curlen+t->curlen-j; s->chs->curlen='0' printf("置換后的字符串為:"); puts(s->ch); elseif(j>t->curlen) while(s->chl-1!='0')m=j-t->curlen; s
19、->chl-m-1=s->chl-1;l+;for(k=0;t->chk!='0'k+)s->chi-1=t->chk;i+;s->curlen=s->curlen+t->curlen-j; s->chs->curlen='0' printf("置換后的字符串為:"); puts(s->ch);elseif(j<t->curlen) p=n=s->curlen;while(n>=i+j) m=t->curlen-j; s->chn+m-1=s
20、->chn-1; n-; for(k=0;t->chk!='0'k+) s->chi-1=t->chk; i+;s->curlen=p+t->curlen-j; s->chs->curlen='0' printf("置換后的字符串為:"); puts(s->ch); int index(seqstring *s,seqstring *t) /*子串的定位*/int i=0,j=0;printf("請輸入主串和子串的串長:");scanf("%d%d"
21、,&s->curlen,&t->curlen);printf("請輸入主串和子串:");scanf("%s%s",s,t);while(i<s->curlen)&&(j<t->curlen)if(s->chi=t->chj)i+;j+; /*繼續(xù)比較后面的字符*/elsei=i-j+1; j=0; /*從模式的第一個字符進行新的一趟匹配*/ if(j=t->curlen) printf("n匹配成功!");else printf("n匹配失
22、敗!");void main()int i=1,j;seqstring s,t;while(i) printf("0:串聯(lián)接n1:串比較n2:求串長n3:串復制n4:插入n5:刪除n6:置換子串n7:子串定位n");scanf("%d",&i);switch(i)case 0:strcats();break;case 1:strcmps();break;case 2:strlens();break;case 3:strcpys();break;case 4:printf("請輸入插入的位置:"); scanf(&qu
23、ot;%d",&i); insert(&s,i,&t);break;case 5:printf("請輸入刪除的位置和個數(shù):"); scanf("%d%d",&i,&j); deletes(&s,i,j);break;case 6:printf("請輸入置換的位置和個數(shù):"); scanf("%d%d",&i,&j); replace(&s,i,j,&t);break;case 7:index(&s,&t);break;printf("n0:停止n1:繼續(xù)n");scanf("%d",&i);3程序運行結果:3.1串的聯(lián)接運行結果如圖1圖1 串聯(lián)接3.2串比較的運行結果如圖2圖2 串比較3.3求串長的運行結果如圖3圖3 求串長3.4串復制的運行結果如圖4圖4 串復制3.5串插入的運行結果如圖5圖5 串插入3.6串刪除的運行結果如圖6圖6 串刪除3.7置換子串的運行結果如圖7圖7 置
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度出租車承包運營人力資源配置合同3篇
- 2025年度智能電網(wǎng)建設與運營管理協(xié)議4篇
- 2025年度數(shù)字化車間承包經(jīng)營合作協(xié)議4篇
- 方形母端快接式端子行業(yè)深度研究報告
- 2025年叉車電器項目可行性研究報告
- 2025年度個人股權分割與轉讓合同范本3篇
- 2025年度個人心理咨詢服務合同范本4篇
- 2025年度個人房源信息在線交易安全保障協(xié)議4篇
- 2025年江蘇國經(jīng)控股集團有限公司招聘筆試參考題庫含答案解析
- 2025年福建中閩海上風電有限公司招聘筆試參考題庫含答案解析
- 河南省鄭州市2023-2024學年高二上學期期末考試 數(shù)學 含答案
- 2024年資格考試-WSET二級認證考試近5年真題集錦(頻考類試題)帶答案
- 試卷中國電子學會青少年軟件編程等級考試標準python三級練習
- 公益慈善機構數(shù)字化轉型行業(yè)三年發(fā)展洞察報告
- 飼料廠現(xiàn)場管理類隱患排查治理清單
- 2024年公需科目培訓考試題及答案
- 【名著閱讀】《紅巖》30題(附答案解析)
- Starter Unit 2 同步練習人教版2024七年級英語上冊
- 分數(shù)的加法、減法、乘法和除法運算規(guī)律
- 2024年江蘇鑫財國有資產(chǎn)運營有限公司招聘筆試沖刺題(帶答案解析)
- 2024年遼寧石化職業(yè)技術學院單招職業(yè)適應性測試題庫含答案
評論
0/150
提交評論