版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)實訓(xùn)1/2高職學(xué)院計算機專業(yè)類課程設(shè)計報告(2012-2013學(xué)年第1學(xué)期)課程設(shè)計類型:數(shù)據(jù)結(jié)構(gòu)題目:棧+串+隊列+線性表+后綴表達式求值學(xué)號:姓名:專業(yè):計算機應(yīng)用技術(shù)指導(dǎo)教師:課程設(shè)計日期:2012.12.17~2012.12.21數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第1頁。高職學(xué)院制數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第1頁。目錄TOC\o"1-2"\h\z\u1.問題分析 11.1問題描述 11.2要求分析 22.總體設(shè)計 32.1功能分析 33.詳細設(shè)計 43.1程序結(jié)構(gòu)圖 43.2程序流程圖 44.功能測試 74.1本系統(tǒng)的主界面 74.2棧子系統(tǒng)界面 74.3串子系統(tǒng)界面 104.4隊列子系統(tǒng)界面 154.5線性表子系統(tǒng)界面 194.6后綴表達式求值子系統(tǒng)界面 234.7退出系統(tǒng) 245.課程設(shè)計小結(jié) 25參考文獻 25附錄:源代碼清單 26數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第2頁。數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第2頁。1.問題分析1.1問題描述棧子系統(tǒng)設(shè)計一個字符型的鏈棧。編寫進棧、出棧、顯示棧中全部元素的程序。編寫一個把十進制整數(shù)轉(zhuǎn)換成二進制數(shù)的應(yīng)用程序。編寫一個把中綴表達式轉(zhuǎn)換成后綴表達式(逆波蘭式)的應(yīng)用程序。設(shè)計一個選擇式菜單,以菜單方式選擇上述操作。串子系統(tǒng)由用戶通過鍵盤輸入建立一個字符串。編寫插入、刪除、查找、比較、取子字符串、連接字符串、顯示、模式匹配等程序。設(shè)計如下所示的選擇式菜單,以菜單方式選擇上述操作。隊列子系統(tǒng)掌握隊列的特點及其描述方法。用鏈?zhǔn)浇Y(jié)構(gòu)實現(xiàn)一個隊列。掌握隊列的各種基本操作。掌握隊列的簡單應(yīng)用程序。線性表子系統(tǒng)用結(jié)構(gòu)體描述一個字符型的單項列表。創(chuàng)建線性表;在線性表中插入元素、刪除元素;顯示線性表中所有元素等基本操作。用if語句設(shè)計一個選擇式菜單。后綴表達式求助子系統(tǒng)后綴表達式求值子系統(tǒng)。用鍵盤輸入一個整數(shù)后綴表達式(操作數(shù)的范圍是0~9,運算符只含+、—、*、/、,而且中間不可以有空格),使用循環(huán)程序從左向右讀入表達式。如果讀入的是操作數(shù),直接進入操作數(shù)棧。如果讀入的是運算符,立即從操作數(shù)棧取出所需的操作數(shù),計算操作數(shù)運算的值,并將計算結(jié)果存回操作數(shù)棧。檢驗程序運行結(jié)果。數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第3頁。
數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第3頁。1.2要求分析棧子系統(tǒng):使用棧的基本算法。串子系統(tǒng):使用串的基本算法。隊列子系統(tǒng):使用隊列的基本算法。線性表子系統(tǒng):使用線性表的基本算法。后綴表達式求值子系統(tǒng):利用棧進行計算數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第4頁。
數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第4頁。2.總體設(shè)計2.1功能分析棧子系統(tǒng)棧的基本操作串子系統(tǒng)串的基本操作隊列子系統(tǒng)隊列的基本操作線性表子系統(tǒng)線性表的基本操作后綴表達式求值子系統(tǒng)對后綴表達式進行求值數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第5頁。
數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第5頁。3.詳細設(shè)計3.1程序結(jié)構(gòu)圖主菜單主菜單退出后綴表達式求值子系統(tǒng)線性表子系統(tǒng)棧子系統(tǒng)隊列子系統(tǒng)串子系統(tǒng)退出后綴表達式求值子系統(tǒng)線性表子系統(tǒng)棧子系統(tǒng)隊列子系統(tǒng)串子系統(tǒng)3.2程序流程圖開始開始鍵盤輸入棧函數(shù)隊列函數(shù)線性表函數(shù)后綴表達式求值函數(shù)串函數(shù)選擇退出結(jié)束主函數(shù)流程圖數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第6頁。函數(shù)入口數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第6頁。函數(shù)入口進棧數(shù)值轉(zhuǎn)換逆波蘭式出棧顯示退出棧函數(shù)流程圖函數(shù)入口函數(shù)入口連接字串插入字串顯示字串刪除字串取出字串退出比較字串大小輸入字串查找字串串子函數(shù)流程圖函數(shù)入口函數(shù)入口進隊出隊讀隊頭元素顯示退出雙隊列隊列子系統(tǒng)函數(shù)流程圖數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第7頁。函數(shù)入口數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第7頁。函數(shù)入口建表插入刪除求表長查找退出顯示線性表子系統(tǒng)函數(shù)流程圖函數(shù)入口函數(shù)入口鍵盤輸入求值繼續(xù)還是退出?Y結(jié)束N后綴表達式求值函數(shù)流程圖數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第8頁。
數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第8頁。4.功能測試4.1本系統(tǒng)的主界面4.2棧子系統(tǒng)界面輸入選項‘1’,進入“棧子系統(tǒng)”數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第9頁。數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第9頁。輸入選項‘1’,選擇“進?!惫δ茌斎脒x項‘2’,選擇“出?!惫δ軘?shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第10頁。輸入選項‘3’,選擇“顯示”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第10頁。輸入選項‘4’,選擇“數(shù)值轉(zhuǎn)換”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第11頁。輸入選項‘5’,選擇“逆波蘭式”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第11頁。輸入選項‘0’,選擇“退出”功能4.3串子系統(tǒng)界面數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第12頁。輸入‘1’,進入“串子系統(tǒng)”數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第12頁。輸入‘1’,選擇“輸入字串”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第13頁。輸入‘2’,選擇“連接字串”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第13頁。輸入‘3’,選擇“取出字串”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第14頁。輸入‘4’,選擇“刪除字串”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第14頁。輸入‘5’,選擇“插入字串”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第15頁。輸入‘6’,選擇“查找字串”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第15頁。輸入‘7’,選擇“比較串大小”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第16頁。輸入‘8’,選擇“顯示字串”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第16頁。輸入‘0’,選擇“退出”功能4.4隊列子系統(tǒng)界面數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第17頁。輸入‘1’,進入“隊列子系統(tǒng)”數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第17頁。輸入‘1’,選擇“進隊”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第18頁。輸入‘2’,選擇“出隊”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第18頁。輸入‘3’,選擇“讀隊頭元素”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第19頁。輸入‘4’,選擇“顯示”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第19頁。輸入‘5’,選擇“雙隊列”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第20頁。輸入‘0’,選擇“退出”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第20頁。4.5線性表子系統(tǒng)界面輸入‘1’,進入“線性表系統(tǒng)”數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第21頁。輸入‘1’,選擇“建表”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第21頁。輸入‘2’,選擇“插入”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第22頁。輸入‘3’,選擇“刪除”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第22頁。輸入‘4’,選擇“顯示”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第23頁。輸入‘5’,選擇“查找”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第23頁。輸入‘6’,選擇“求表長”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第24頁。輸入‘0’,選擇“退出”功能數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第24頁。4.6后綴表達式求值子系統(tǒng)界面輸入‘5’,進入“后綴表達式求值子系統(tǒng)”數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第25頁。選擇界面數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第25頁。4.7退出系統(tǒng)輸入選項‘0’,選擇“退出”功能,此功能下可以退出并關(guān)閉本程序數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第26頁。
數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第26頁。5.課程設(shè)計小結(jié)在這次課程設(shè)計之前總覺得自己學(xué)的還可以。但通過這次的課程設(shè)計讓自己知道了自己有許多不懂的地方和還需要學(xué)習(xí)的知識點。當(dāng)然在這次課程中也遇到許多的困難尤其是在編完程序后調(diào)試遇到的困難令我難忘。通過這次課程設(shè)計也讓我認識到了自己實踐自己編程、自己調(diào)試的重要性。通過自己動手實踐不僅可以增強自己自己的動手實踐能力也可以加深自己對數(shù)據(jù)結(jié)構(gòu)算法的理解。對我們學(xué)好數(shù)據(jù)結(jié)構(gòu)這門課程具有很大的意義。除此之外我和認識到了和同學(xué)之間的合作的重要性。通過討論不僅可以融洽同學(xué)之間的關(guān)系也可以更好的得出結(jié)論在調(diào)試中遇到的困難通過同學(xué)間的討論也可以得到更好的改進方法??傊@次的課程設(shè)計讓我受益匪淺也可以增加我對數(shù)據(jù)結(jié)構(gòu)這門課程設(shè)計的興趣。讓對以后數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)充滿了信心。參考文獻李龍澍.C++程序設(shè)計實訓(xùn)清華大學(xué)出版社,2003年伍俊良.VISUALC++課程設(shè)計與系統(tǒng)開發(fā)案例,清華大學(xué)出版社2003年烏尼爾.VisualC++經(jīng)典例程分析中國電力出版社,2000年張曜.VISUALC++程序開發(fā)案例解析清華大學(xué)出版社,1999年宋曉宇、王永會.VISUALC++高級編程技術(shù)與實例中國水利水電出版社,2003年數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第27頁。
數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第27頁。附錄:源代碼清單//開始.cpp#include"串.h"#include"棧.h"#include"隊列.h"#include"線性表.h"#include"后綴.h"voidmain(){ intchoice; charch; ch='y'; while(ch=='y'||ch=='Y') { printf("\n\n\n"); printf("\n\t\t數(shù)據(jù)結(jié)構(gòu)主系統(tǒng)"); printf("\n\t\t主菜單"); printf("\n\t\t*************************************"); printf("\n\t\t*1棧*"); printf("\n\t\t*2串*"); printf("\n\t\t*3隊列*"); printf("\n\t\t*4線性表*"); printf("\n\t\t*5自主實驗*"); printf("\n\t\t*0退出*"); printf("\n\t\t*************************************"); printf("\n\t\t請選擇菜單號(0--5):"); scanf("%d",&choice); getchar(); switch(choice) { case1:Stack(); break; case2:String(); break; case3:Queue(); break; case4:LineList(); break; case5:Postfix(); break; case0:ch='n';數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第28頁。 break;數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第28頁。 default: { printf("菜單選擇錯誤!請重輸"); system("cls"); } } }}//棧.cpp#include<stdio.h>#include<stdlib.h>#defineSTACKMAX100typedefstructstacknode{ intdata; structstacknode*next;}StackNode;typedefstruct{ StackNode*top;}LinkStack;voidPush(LinkStack&s,intx){ StackNode*p=newStackNode; p->data=x; p->next=s.top; s.top=p;}intPop(LinkStack&s,int&x){ StackNode*p; if(s.top!=NULL) { p=s.top; x=p->data; s.top=p->next; deletep; return1; } else return0;}voidShowStack(LinkStacks)數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第29頁。{數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第29頁。 system("cls"); StackNode*p=s.top; if(p==NULL) printf("\n\t\t棧為空."); else { printf("\n\t\t棧元素為:"); while(p!=NULL) { printf("%6d",p->data); p=p->next; } printf("\n"); }}voidConversion(intn){ LinkStacks; intx; s.top=NULL; do {x=n%2; n=n/2; Push(s,x); }while(n); printf("\n\t\t轉(zhuǎn)換后的二進制數(shù)值為:"); while(Pop(s,x)) printf("%d",x); printf("\n");}voidSuffix(){ system("cls"); charstr[STACKMAX]; charstack[STACKMAX]; charexp[STACKMAX]; charch; intsum,i,j,t,top=0; printf("\n\t\t輸入算術(shù)表達式(運算符只能包含+,-,*,/),以#結(jié)束:\n\t\t"); fflush(stdin); i=0; do {數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第30頁。 i++;數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第30頁。 scanf("%c",&str[i]); } while(str[i]!='#'&&i!=STACKMAX); sum=i; t=1; i=1; ch=str[i]; i++; while(ch!='#') {switch(ch) {case'(': top++; stack[top]=ch; break; case')': while(stack[top]!='(') { exp[t++]=stack[top--]; exp[t++]=','; } top--; break; case'+': case'-': while(top!=0&&stack[top]!='(') { exp[t++]=stack[top--]; exp[t++]=','; } stack[++top]=ch; break; case'*': case'/': while(stack[top]=='*'||stack[top]=='/') {exp[t++]=stack[top--]; exp[t++]=','; } stack[++top]=ch; break; case'': break; default: while(ch>='0'&&ch<='z')數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第31頁。 {exp[t++]=ch;數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第31頁。 ch=str[i++]; } i--; exp[t++]=','; } ch=str[i++]; } while(top!=0) {exp[t++]=stack[top--]; if(top!=0) exp[t++]=',';}printf("\n\t\t輸入的中綴表達式:");for(j=1;j<sum;j++)printf("%c",str[j]);printf("\n\n\t\t后綴表達式:");for(j=1;j<t;j++)printf("%c",exp[j]);printf("\n");}voidStack(){ system("cls"); LinkStacks; inti=1,j=1,val,n; charchoice; s.top=NULL; while(1) { printf("\n\n\n"); printf("\n\t\t棧子系統(tǒng)"); printf("\n\t\t*************************************"); printf("\n\t\t*1進棧*"); printf("\n\t\t*2出棧*"); printf("\n\t\t*3顯示*"); printf("\n\t\t*4數(shù)制轉(zhuǎn)換*"); printf("\n\t\t*5逆波蘭式*"); printf("\n\t\t*0退出*"); printf("\n\t\t*************************************"); printf("\n\t\t請選擇菜單號(0--5):"); fflush(stdin); choice=getchar(); switch(choice)數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第32頁。 {數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第32頁。 case'1': while(1) { printf("\n\t\t鍵入一個整數(shù)('0'表示結(jié)束)并按回車:"); scanf("%d",&val); if(val!=0) Push(s,val); else { system("cls"); break; } } break; case'2': if(Pop(s,val)) { system("cls"); printf("\n\t\t出棧元素為:%6d\n",val); } else { system("cls"); printf("\n\t\t棧為空,沒有元素可以出棧!\n"); } break; case'3': ShowStack(s); break; case'4': { system("cls"); printf("\n\t\t請輸入一個十進制正整數(shù):"); scanf("%d",&n); Conversion(n); } break; case'5': Suffix(); break; case'0': exit(0); break;數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第33頁。 default:數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第33頁。 printf("\n\t\t輸入菜單錯誤,請重新輸入!\n"); } }}//串.cpp#include<stdio.h>#include<windows.h>#defineSTRINGMAX100typedefstruct{ charvec[STRINGMAX]; intlen;}str;voidConcatStr(str*r1,str*r2){ inti; printf("\n\t\tr1=%sr2=%s\n",r1->vec,r2->vec); if(r1->len+r2->len>STRINGMAX) printf("\n\t\t兩個串太長,溢出!\n"); else { for(i=0;i<r2->len;i++) r1->vec[r1->len+i]=r2->vec[i]; r1->vec[r1->len+i]='\0'; r1->len=r1->len+r2->len; }}voidSubStr(str*r,inti,intj){ intk; stra; str*r1=&a; if(i+j-1>r->len) { printf("\n\t\t子串超界!\n"); return; } else { for(k=0;k<j;k++) r1->vec[k]=r->vec[i+k-1]; r1->len=j; r1->vec[r1->len]='\0';數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第34頁。 }數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第34頁。 printf("\n\t\t取出字符為:"); puts(r1->vec);}voidDelStr(str*r,inti,intj){ intk; if(i+j-1>r->len) printf("\n\t\t所要刪除的子串超界!\n"); else { for(k=i+j;k<r->len;k++,i++) r->vec[i]=r->vec[k]; r->len=r->len-j; r->vec[r->len]='\0'; }}str*InsStr(str*r,str*r1,inti){ intk; if(i>=r->len||r->len+r1->len>STRINGMAX) printf("\n\t\t不能插入!\n"); else { for(k=r->len-1;k>=i;k--) r->vec[r1->len+k]=r->vec[k];for(k=0;k<r1->len;k++) r->vec[i+k]=r1->vec[k]; r->len=r->len+r1->len; r->vec[r->len]='\0'; } returnr;}intIndexStr(str*r,str*r1){ inti,j,k; for(i=0;r->vec[i];i++) for(j=i,k=0;r->vec[j]==r1->vec[k];j++,k++) if(!r1->vec[k+1]) returni; return-1;}intLenStr(str*r){數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第35頁。 inti=0;數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第35頁。 while(r->vec[i]!='\0') i++; returni;}str*CreateStr(str*r){ gets(r->vec); r->len=LenStr(r); returnr;}intEqualStr(str*r1,str*r2){ for(inti=0;r1->vec[i]&&r2->vec[i]&&r1->vec[i]==r2->vec[i];i++); returnr1->vec[i]-r2->vec[i];}voidString(){ system("cls"); stra,b,c,d; str*r=&a,*r1; r->vec[0]='\0'; charchoice,p; inti,j,ch=1; while(ch!=0) { printf("\n\n\n"); printf("\n\t\t串子系統(tǒng)"); printf("\n\t\t**********************************"); printf("\n\t\t*1輸入字串*"); printf("\n\t\t*2連接字串*"); printf("\n\t\t*3取出字串*"); printf("\n\t\t*4刪除字串*"); printf("\n\t\t*5插入字串*"); printf("\n\t\t*6查找字串*"); printf("\n\t\t*7比較串大小*"); printf("\n\t\t*8顯示字串*"); printf("\n\t\t*0退出*"); printf("\n\t\t**********************************"); printf("\n\t\t請選擇菜單號(0--8):"); scanf("%c",&choice); getchar(); if(choice=='1') {數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第36頁。 system("cls");數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第36頁。 printf("\n\t\t請輸入一個字符串:"); gets(r->vec); r->len=LenStr(r); } elseif(choice=='2') { system("cls"); printf("\n\t\t請輸入所要連接的串:"); r1=CreateStr(&b); ConcatStr(r,r1); printf("\n\t\t連接以后的新串值為:\n"); puts(r->vec); } elseif(choice=='3') { system("cls"); printf("\n\t\t請輸入從第幾個字符開始:"); scanf("%d",&i);getchar(); printf("\n\t\t請輸入取出的連續(xù)字符數(shù):"); scanf("%d",&j); getchar(); SubStr(r,i,j); } elseif(choice=='4') { system("cls"); printf("\n\t\t請輸入從第幾個字符開始:"); scanf("%d",&i);getchar(); printf("\n\t\t請輸入刪除的連續(xù)字符數(shù):"); scanf("%d",&j); getchar(); DelStr(r,i-1,j); } elseif(choice=='5') { system("cls"); printf("\n\t\t請輸入在第幾個字符前插入:"); scanf("%d",&i); getchar(); printf("\n\t\t請輸入所要插入的字符串:"); r1=CreateStr(&b); InsStr(r,r1,i-1); }數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第37頁。 elseif(choice=='6')數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第37頁。 { system("cls"); printf("\n\t\t請輸入所要查找的字符串:"); r1=CreateStr(&b); i=IndexStr(r,r1); if(i!=1) printf("\n\t\t第一次出現(xiàn)的位置是第%d個.\n",i+1); else printf("\n\t\t該子串不在其中!"); } elseif(choice=='7') { system("cls"); printf("\n\t\t請輸入第一個串:"); gets(c.vec); printf("\n\t\t請輸入第二個串:"); gets(d.vec); intk=EqualStr(&c,&d); if(k>0) printf("\n\t\t第一個串大!\n"); elseif(k<0) printf("\n\t\t第二個串大!\n"); else printf("\n\t\t兩個串一樣大!\n"); } elseif(choice=='8') { system("cls"); printf("\n\t\t該串值為:"); if(r->vec[0]=='\0') printf("空!\n"); else puts(r->vec); } elseif(choice=='0') exit(0); else printf("\n\t\t\t請注意!輸入有誤!\n"); if(choice=!'X'&&choice!='X') { printf("\n\t\t按【Enter】鍵繼續(xù),按任意鍵返回主菜單."); p=getchar(); if(p!='\xA')數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第38頁。 {數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第38頁。 getchar(); break; } } }}//隊列.cpp#include<stdio.h>typedefstructqueuenode{ intdata; structqueuenode*next;}QueueNode;typedefstruct{ QueueNode*front,*rear;}LinkQueue;voidInQueue(LinkQueue*q){ system("cls"); intx; QueueNode*p=newQueueNode; printf("\n\t\t請鍵入一個整數(shù):"); scanf("%d",&x); getchar(); p->data=x; p->next=NULL; if(q->front==NULL) q->front=p; elseq->rear->next=p; q->rear=p; if(p) printf("\n\t\t%d進隊成功!",x);}intOutQueue(LinkQueue*q,int*v){ QueueNode*p; if(q->front==NULL) return0; else {數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第39頁。 p=q->front;數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第39頁。 *v=p->data; q->front=p->next; if(q->front==NULL) q->rear=NULL; deletep; return1; }}voidShowQueue(LinkQueue*q){ system("cls"); QueueNode*p=q->front; if(p==NULL) printf("\n\t\t隊列為空!\n"); else { printf("\n\t\t隊列中的元素為:"); while(p!=NULL) { printf("%6d",p->data); p=p->next; } printf("\n"); }}voidReadFront(LinkQueue*q){ system("cls"); if(q==NULL||q->front==NULL) printf("\n\t\t隊列為空!沒有隊頂元素!\n"); else printf("\n\t\t隊首元素是:%4d\n",q->front->data);}#defineQUEUEMAX20intqueue[QUEUEMAX];intfront=-1;intrear=-1;voidInQueue(intval){ rear=(rear++)%QUEUEMAX; if(front==rear) printf("\n\t\t隊列已滿!"); else數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第40頁。 queue[rear]=val;數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第40頁。}intOutQueue_rear(){ intt; if(front==rear) return-1; t=queue[rear--]; if(rear<0&&front!=-1) rear=QUEUEMAX-1; returnt;}intOutQueue_front(){ intt; if(front==rear) return-1; t=queue[++front]; if(front==QUEUEMAX) front=0; returnt;}voidDQ(){ system("cls"); intchoice; intout[5]; intin[5]={5,4,3,2,1}; intt,pos=0,i; for(i=0;i<5;i++) InQueue(in[i]); printf("\n\t\t初始數(shù)據(jù)順序是:"); for(i=0;i<5;i++) printf("[%d]",in[i]); printf("\n\t\t1從頭出隊2從尾出隊\n\n"); while(front!=rear) { printf("\t\t請輸入選擇(1或2):"); scanf("%d",&choice); switch(choice) { case1: t=OutQueue_front(); out[pos++]=t;數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第41頁。 break;數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第41頁。 case2: t=OutQueue_rear(); out[pos++]=t; break; } } printf("\n\t\t數(shù)據(jù)輸出的順序是:"); for(i=0;i<5;i++) printf("[%d]",out[i]); printf("\n"); getchar();}voidQueue(){ system("cls"); LinkQueue*q=newLinkQueue; intval,i=1; charw,choice; q->front=q->rear=NULL; while(i) { printf("\n\n\n"); printf("\n\t\t隊列子系統(tǒng)"); printf("\n\t\t*************************************"); printf("\n\t\t*1進隊*"); printf("\n\t\t*2出隊*"); printf("\n\t\t*3讀隊頭元素*"); printf("\n\t\t*4顯示*"); printf("\n\t\t*5雙隊列*"); printf("\n\t\t*0退出*"); printf("\n\t\t*************************************"); printf("\n\t\t請選擇菜單號(0--5):"); scanf("%c",&choice); getchar(); switch(choice) { case'1': InQueue(q); break; case'2': { system("cls"); if(OutQueue(q,&val)==0)數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第42頁。 printf("\n\t\t隊列為空!\n");數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第42頁。 else printf("\n\t\t出隊元素為:%d",val); } break; case'3': ReadFront(q); break; case'4': ShowQueue(q); break; case'5': DQ(); break; case'0': exit(0); break; default:; } if(choice=='1'||choice=='2'||choice=='3'||choice=='4'||choice=='5') { printf("\n\t\t按【Enter】鍵繼續(xù),按任意鍵返回主菜單,\n"); w=getchar(); if(w!='\xA') i=0; system("cls"); } }}//線性表.cpp#include<stdio.h>#include<windows.h>typedefstructlinknode{ chardata; structlinknode*next;}linnode;linnode*head;intn;voidcreatelist(){ system("cls"); n=0;數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第43頁。 linnode*p,*s;數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第43頁。 charx; intz=1; head=newlinnode; p=head; printf("\n\t\t請逐個輸入結(jié)點,以“x”為結(jié)束標(biāo)記!\n"); printf("\n"); while(z) { printf("\t\t輸入一個字符數(shù)據(jù),并按回車鍵!"); scanf("%c",&x); getchar(); if(x!='x') { s=newlinnode; n++; s->data=x; p->next=s; s->next=NULL; p=s; } elsez=0; }}voidinslist(inti,charx){ linnode*s,*p; p=head; intj=0; while(p!=NULL&&j<i) { j++; p=p->next; } if(p!=NULL) { s=newlinnode; s->data=x; s->next=p->next; p->next=s; n++; } elseprintf("\n\t\t線性表為空或插入位置超出!\n");}數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第44頁。voiddellist(charx)數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第44頁。{ linnode*p,*q; if(head==NULL) { printf("\n\t\t線性表已經(jīng)為空!"); return; } if(head->next==NULL) { printf("\n\t\t線性表已經(jīng)為空!"); return; } q=head; p=head->next; while(p!=NULL&&p->data!=x) { q=p; p=p->next; } if(p!=NULL) { q->next=p->next; deletep; n--; printf("\n\t\t結(jié)點%c已經(jīng)被刪除!",x); } elseprintf("\n\t\t抱歉!沒有找到您要刪除的結(jié)點.");}voidshowlist(){ system("cls"); linnode*p=head; printf("\n\t\t顯示線性表的所有元素:"); if(head->next==NULL||p==NULL) printf("\n\t\t鏈表為空!"); else { printf("\n\t\t"); while(p->next!=NULL) { printf("%5c",p->next->data); p=p->next; }數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第45頁。 }數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第45頁。}voidsearchlist(charx){ linnode*p; inti=1; if(head==NULL) { printf("\n\t\t鏈表下隘!"); return; } if(head->next==NULL) { printf("\n\t\t線性表為空,沒有任何結(jié)點!"); return; } p=head->next; while(p!=NULL&&p->data!=x) { p=p->next; i++; } if(p!=NULL) printf("\n\t\t在表的第%d位上找到值為%c的結(jié)點!",i,x); else printf("\n\t\t抱歉,未找到值為%c的結(jié)點!",x);}voidLineList(){ system("cls"); head=NULL; intchoice,i,j=1; charx; while(j) { printf("\n\n\n"); printf("\n\t\t線性表子系統(tǒng)"); printf("\n\t\t*************************************"); printf("\n\t\t*1建表*"); printf("\n\t\t*2插入*"); printf("\n\t\t*3刪除*"); printf("\n\t\t*4顯示*"); printf("\n\t\t*5查找*"); printf("\n\t\t*6求表長*");數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第46頁。 printf("\n\t\t*0退出*");數(shù)據(jù)結(jié)構(gòu)實訓(xùn)全文共50頁,當(dāng)前為第46頁。 printf("\n\t\t*************************************"); printf("\n\t\t請選擇菜單號(0--6):"); scanf("%d",&choice); getchar(); if(choice==1) createlist(); else if(choice==2) { system("cls"); printf("\n\t\t請輸入插入位置i和插入的數(shù)據(jù)(輸入格式:i,x):"); scanf("%d,%c",&i,&x); dellist(x); } else if(choice==3) { system("cls"); printf("\n\t\t請輸入要刪除的數(shù)值:"); scanf("%c",&x); dellist(x); } else if(choice==4) if(head==NULL) printf("\n\t\t請先建立線性表!"); else showlist(); else if(choice==5) { system("cls"); printf("\n\t\t請輸入要查找的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年山東大學(xué)齊魯?shù)诙t(yī)院護理人員(非事業(yè)編制)招聘(60人)筆試備考題庫及答案解析
- 2026上半年貴州事業(yè)單位聯(lián)考貴州省民政廳招聘10人考試備考題庫及答案解析
- 2026年度霍邱縣事業(yè)單位公開招聘工作人員44名筆試模擬試題及答案解析
- 2026年安徽汽車職業(yè)技術(shù)學(xué)院招聘派遣制任務(wù)型教師30名(第一批)筆試參考題庫及答案解析
- 2026湖北恩施州順鑫達勞務(wù)有限責(zé)任公司短期招聘2人筆試參考題庫及答案解析
- 2026年薪酬體系設(shè)計優(yōu)化培訓(xùn)
- 2026江西裕民銀行誠聘英才筆試備考試題及答案解析
- 北京十一晉元中學(xué)招聘筆試備考題庫及答案解析
- 2026年投資房地產(chǎn)的地理經(jīng)濟分析
- 2026年房地產(chǎn)開發(fā)成本與政策調(diào)控的關(guān)聯(lián)性
- DB34-T 4877-2024 智慧檢驗檢測實驗室建設(shè)指南
- 體溫單模板完整版本
- 武漢市2024屆高中畢業(yè)生二月調(diào)研考試(二調(diào))英語試卷(含答案)
- 天然美肌無添加的護膚品
- 《正常人體形態(tài)學(xué)》考試復(fù)習(xí)題庫大全(含答案)
- 湖南省長沙市外國語學(xué)校 2021-2022學(xué)年高一數(shù)學(xué)文模擬試卷含解析
- 3D車載蓋板玻璃項目商業(yè)計劃書
- 阿米巴經(jīng)營管理培訓(xùn)課件
- 我國的宗教政策-(共38張)專題培訓(xùn)課件
- 鋁材廠煲模作業(yè)指導(dǎo)書
- 【行測題庫】圖形推理題庫
評論
0/150
提交評論