C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì)正文

上傳人:痛*** 文檔編號(hào):114539816 上傳時(shí)間:2022-06-29 格式:DOC 頁(yè)數(shù):60 大?。?9KB
收藏 版權(quán)申訴 舉報(bào) 下載
C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì)正文_第1頁(yè)
第1頁(yè) / 共60頁(yè)
C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì)正文_第2頁(yè)
第2頁(yè) / 共60頁(yè)
C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì)正文_第3頁(yè)
第3頁(yè) / 共60頁(yè)

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

10 積分

下載資源

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

資源描述:

《C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì)正文》由會(huì)員分享,可在線閱讀,更多相關(guān)《C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì)正文(60頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、C+數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì)正文第一篇:C+數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì)C+/數(shù)據(jù)結(jié)構(gòu) 大作業(yè)/課程設(shè)計(jì)【校園導(dǎo)游咨詢(xún)】【停車(chē)場(chǎng)管理】娃娃們可以收著以后用 絕對(duì)純手工打造 內(nèi)含類(lèi)模塊/一維指針數(shù)組(謹(jǐn)以此程序供大家參考。運(yùn)行結(jié)果后面有貼圖)目錄【1】校園導(dǎo)游咨詢(xún) 程序設(shè)計(jì)源代碼 及 截圖 【2】停車(chē)場(chǎng)管理方案一 程序設(shè)計(jì)源代碼 及 截圖 【3】停車(chē)場(chǎng)管理方案二 程序設(shè)計(jì)源代碼 及 截圖【1】【校園導(dǎo)游咨詢(xún)】#(ps:該校園導(dǎo)游咨詢(xún)系統(tǒng)沒(méi)有輸入值,所有信息是都在class MGraph的構(gòu)造函數(shù)中傳輸?shù)?,且校園景點(diǎn)信息皆為【上海電力學(xué)院】景點(diǎn)信息。請(qǐng)大家注意,直接從文章copy到visual stu

2、tio中會(huì)出現(xiàn)中文字符,注意刪除,推薦大家在一行語(yǔ)句的分號(hào)后面,點(diǎn)出光標(biāo),按一下delete鍵,然后按一下enter鍵,完成visual stutio的自動(dòng)對(duì)齊,這樣程序看起來(lái)一目了然,更易于操作和更改) 【問(wèn)題描述】設(shè)計(jì)一個(gè)校園導(dǎo)游程序,為來(lái)訪的客人提供各種信息查詢(xún)服務(wù)。 【基本要求】(1)設(shè)計(jì)你所在學(xué)校的校園平面圖,所含景點(diǎn)不少于10個(gè)。以圖中頂點(diǎn)表示校內(nèi)各景點(diǎn),存放景點(diǎn)名稱(chēng)、代號(hào)、簡(jiǎn)介等信息;以邊表示路徑,存放路徑長(zhǎng)度等相關(guān)信息。 (2)為來(lái)訪客人提供圖中任意景點(diǎn)相關(guān)信息的查詢(xún)。(3)為來(lái)訪客人提供圖中任意景點(diǎn)的問(wèn)路查詢(xún),即查詢(xún)?nèi)我鈨蓚€(gè)景點(diǎn)之間的一個(gè)最短的簡(jiǎn)單路徑。 【選作內(nèi)容】(6)擴(kuò)

3、充每個(gè)景點(diǎn)的鄰接景點(diǎn)的方向等信息,使得路徑查詢(xún)結(jié)果能提供詳盡的導(dǎo)向信息。 *【以下為類(lèi)的定義】* #include #include using namespace std; const int MaxSize=18; const int INFINITY=65535;/最大值無(wú)窮class direction; template class MGraph; template class VertexNode/定義頭結(jié)點(diǎn) friend class MGraph; public: int vex;/頂點(diǎn)名稱(chēng) T vexname;/頂點(diǎn)名稱(chēng) T vexinf;/頂點(diǎn)信息direction dir;

4、/存放頂點(diǎn)方位信息的direction類(lèi)的dir。 ;class direction public: int ln;/存放在方向圖中的橫坐標(biāo),表示東西 int col;/存放在方向圖中的縱坐標(biāo),表示南北 ; template class MGraph/定義無(wú)向圖的鄰接矩陣 public: MGraph();/構(gòu)造函數(shù),初始化具有n個(gè)頂點(diǎn)的圖void printvexname();/顯示所有景點(diǎn)及景點(diǎn)代號(hào)void printvexinf(int i);/顯示代號(hào)為i景點(diǎn)的名稱(chēng)及信息void printroad(int i,int j);/顯示景點(diǎn)ij的最短路徑方案信息void printdir(

5、int i,int j);/顯示景點(diǎn)i到j(luò)的方向信息,如“向東100m,向南2021” VertexNode adjlistMaxSize; /存放景點(diǎn)全部信息的 景點(diǎn)類(lèi)數(shù)組 int vertexNum,arcNum; /圖的頂點(diǎn)數(shù)和邊數(shù)void Root(int p,int q);/遞歸尋找pq間的最短路徑int PathMaxSizeMaxSize,DistMaxSizeMaxSize;/創(chuàng)建Path和Dist分別存放兩點(diǎn)間最短路徑的前驅(qū)節(jié)點(diǎn),兩點(diǎn)間最短路徑長(zhǎng)度int LineMaxSize;/Line存放路徑 int kkk;/Line數(shù)組的標(biāo)記private: T vertexMaxS

6、ize; /存放圖中頂點(diǎn)的數(shù)組int arcMaxSizeMaxSize;/存放圖中邊的數(shù)組 ; *【以下為類(lèi)的實(shí)現(xiàn) 即類(lèi)函數(shù)的定義】* template MGraph:MGraph()/a為景點(diǎn)代號(hào),b為景點(diǎn)名稱(chēng),c為景點(diǎn)信息,d為景點(diǎn)方位信息的橫坐標(biāo),e為景點(diǎn)方位信息的縱坐標(biāo)/s為存放景點(diǎn)鄰接矩陣信息的一維數(shù)組,根據(jù)其對(duì)稱(chēng)性可以用公式賦值給二維數(shù)組arc int s=0, 1,0, 0,2,0, 0,0,2,0, 0,0,2,3,0, 0,0,0,4,2,0, 0,0,0,0,2,3,0, 0,0,0,0,2,3,1,0, 0,0,2,0,2,0,0,2,0, 4,0,2,0,0,0,0,

7、0,1,0, 0,0,0,0,0,0,0,0,0,2,0, 1,0,0,0,0,0,0,0,0,0,2,0, 0,0,0,0,0,0,0,0,0,3,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,2,0; int a=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17; ch

8、ar* b=南門(mén),實(shí)驗(yàn)樓,南圖,大活,睿思樓,大禮堂, 南4教,知行樓,國(guó)交樓,南3教,南2教,南1教, 北圖,北3教,北4教,北2教,北1教,北門(mén); char* c=南校區(qū)正門(mén),物理實(shí)驗(yàn)樓,南校區(qū)圖書(shū)館,大學(xué)生活動(dòng)中心, 教師辦公樓、醫(yī)務(wù)室及留學(xué)生公寓,大禮堂,用于舉辦各種文藝演出,南校區(qū)第4教學(xué)樓,實(shí)習(xí)基地,計(jì)算機(jī)房等, 國(guó)際交流中心,教職工餐廳,南校區(qū)第3教學(xué)樓,南校區(qū)第2教學(xué)樓,南校區(qū)第1教學(xué)樓, 北校區(qū)圖書(shū)館,北校區(qū)第3教學(xué)樓,北校區(qū)第4教學(xué)樓,北校區(qū)第2教學(xué)樓, 北校區(qū)第1教學(xué)樓,北校區(qū)正門(mén); int d=8,6,4,4,1,0,0,1,3,4,6,8,4,3,2,3,5,8; i

9、nt e=8,8,8,10,8,10,7,6,6,6,6,6,3,1,0,0,0,2; int i,j; vertexNum=18; arcNum=30;for(i=0;ifor (j=0; j void MGraph:printvexname() int i; for(i=0;itemplate void MGraph:printvexinf(int i) cout0)/即j在i的東邊cout0) Root(p,Pathpq); Root(Pathpq,q); else Linekkk=q; kkk+; template void MGraph:printroad(int i,int j)

10、int p,q,m,k,item1,item2; for(p=0;p0)for(q=0;q0) if (DistpqDistpk+Distkq)|(Distpq=0)&(p!=q) Distpq=Distpk+Distkq; Pathpq=k; coutchoice; return choice; void main() MGraph mg; int funcchoice(); int fc; while(1) fc=funcchoice(); if(fc=1) int i; for(i=0;ii; mg.printvexinf(i); else if(fc=3) int i,j; mg.pr

11、intvexname(); coutij; mg.printroad(i,j); else if(fc=4) break; else couti) stemp.s+(stemp.top)=cs.s(cs.top)-;/出棧的元素?cái)?shù)組逐個(gè)賦給臨時(shí)棧 popstacknumber=p.number;/將這個(gè)車(chē)牌號(hào)信息傳給int popstacknumber() popstacktime=p.time;/將該車(chē)的時(shí)間信息傳給double popstacktime() cs.top-;/棧頂指針回到原來(lái)位置while(stemp.top=0) cs.s+(cs.top)=stemp.s(stemp.t

12、op)-;/臨時(shí)棧出棧的元素逐個(gè)賦給原棧,完成先退再進(jìn)的工作 int parkingmanagement:pushqueue(carqueue &cq,int cnum,double ctime)/入隊(duì),隊(duì)內(nèi)進(jìn)行調(diào)整,返回隊(duì)內(nèi)位置 car *p,*countp; int count(1);/count用于記錄車(chē)在過(guò)道上的位置信息,因隊(duì)列為鏈?zhǔn)降?,所以進(jìn)行循環(huán)累加 p=new car;/創(chuàng)建一個(gè)car類(lèi)型的指針p-number=cnum; p-time=ctime; p-next=NULL;/首先將指向存放car類(lèi)型元素的數(shù)組初始地址置空 if (cq.front=NULL)/第一次入隊(duì)要判斷頭

13、結(jié)點(diǎn)是否為空 cq.front=cq.rear=p; else/尾插法插入元素 p-next=(cq.rear)-next; (cq.rear)-next=p; cq.rear=(cq.rear)-next; countp=(cq.front)-next; while(countp!=NULL) count+; countp=countp-next; /count即車(chē)在過(guò)道上的位置,【從1開(kāi)始計(jì)!】 return count; int parkingmanagement:popqueue(carqueue &cq)/出隊(duì),隊(duì)內(nèi)進(jìn)行調(diào)整,返回汽車(chē)車(chē)牌號(hào) car p; p.number=(cq.f

14、ront)-next)-number;/cq隊(duì)里,從cq.front開(kāi)始指向下一個(gè)元素的車(chē)牌號(hào)賦給car類(lèi)型的車(chē)信息 p.time=(cq.front)-next)-time;/cq隊(duì)里,從cq.front開(kāi)始指向下一個(gè)元素的時(shí)刻 /賦給car類(lèi)型的車(chē)信息p.next=(cq.front)-next)-next;/cq隊(duì)里,從cq.front開(kāi)始指向下一個(gè)元素的指針 /賦給car類(lèi)型的車(chē)信息的下一個(gè)元素的指針 return p.number; cq.front=(cq.front)-next; void parkingmanagement:arrival(carstack &cs,carque

15、ue &cq,int cnum,double ctime) /車(chē)輛到達(dá),根據(jù)輸入的車(chē)牌號(hào)、到達(dá)時(shí)間,變更函數(shù)參數(shù);并cout車(chē)位信息 int pos; if(!(cs.full()/如果棧未滿(mǎn),車(chē)輛停入停車(chē)場(chǎng) int fl(0),i;/定義一個(gè)從0開(kāi)始的標(biāo)記fl for(i=0;inext; if(p-number=cnum)/在過(guò)道中找到要出去的車(chē),則在隊(duì)列中刪除該car。 /后面的車(chē)輛依然順序排列,補(bǔ)足空位 deletequeue(cq,count); if(countMax) coutnext) coutnext; p-next=q-next; delete q; *【以下是主程序】*

16、void print() coutacccarnumcartime; if(acc=A) park.arrival(cars,carq,carnum,cartime); else if(acc=D) park.leave(cars,carq,carnum,cartime); else if(acc=E) break; else coutcarnum=cnum; s-next=NULL; if(front=NULL)/空隊(duì)列,【新結(jié)點(diǎn)既是隊(duì)頭,又是隊(duì)尾】關(guān)鍵是!front指向第一個(gè)結(jié)點(diǎn) front=rear=s; else rear-next=s;/將結(jié)點(diǎn)s插入到隊(duì)尾 rear=s; p=fro

17、nt; while(p!=NULL) i+; p=p-next; /i即車(chē)在過(guò)道上的位置,【從1開(kāi)始計(jì)!】 return i; template T carQueue:DeQueue() Node *p; if (front=NULL) coutnext;/將隊(duì)頭元素所在結(jié)點(diǎn)摘鏈 return p-carnum; delete p;/將出隊(duì)進(jìn)棧的車(chē)從隊(duì)列里刪除 template bool carQueue:Empty()/判斷是否為空,為空則返回1,不為空則返回0 return front=NULL; template carStack:carStack()/構(gòu)造棧算法:top(-1) /建立

18、一個(gè)最大尺寸為size的空棧S=new carinfoMaxSize;/創(chuàng)建存儲(chǔ)棧的數(shù)組 if(S=NULL) /分配不成功 cerri) Stemp.S+Stop=Stop-; hour=outctime-Stop.cartime; return hour; top-; while(Stop=0) S+top=Stemp.SStop-; template bool carStack:full() return top=MaxSize-1; template void carQueue:deletequeue(int i) Node *p,*q; int j(1); p=front; whil

19、e(p & jnext; j+; /找到第i-1個(gè)結(jié)點(diǎn)(結(jié)點(diǎn)位置從1開(kāi)始) if(!p|!p-next) coutnext=q-next; delete q; *【以下為主函數(shù)】*void outputpark()/系統(tǒng)功能選擇頁(yè)面,輸入泊車(chē)信息 coutarrivecarnumcartime; if(arrive=A) if(cs.top!=MaxSize-1)/停車(chē)場(chǎng)內(nèi)有空位可以駛?cè)?cs.Pushcar(carnum,cartime); coutcarnum=carnum) flagde=1; break; pos+; p=p-next; if(flagde) coutdata);/輸出

20、學(xué)生信息和成績(jī)信息pNodeScore=pNodeScore-next; void Add() p_node_score pNodeScore; / 定義一個(gè)節(jié)點(diǎn)pNodeScore=(p_node_score)malloc(sizeof(node_score);/為節(jié)點(diǎn)分配存儲(chǔ)空間printf(請(qǐng)輸入學(xué)號(hào):); scanf(%s,pNodeScore-data.Number); printf(請(qǐng)輸入姓名:); scanf(%s,pNodeScore-data.Name); printf(請(qǐng)輸入語(yǔ)文成績(jī):); scanf(%s,pNodeScore-data.Chinese); printf(

21、請(qǐng)輸入英語(yǔ)成績(jī):); scanf(%s,pNodeScore-data.English); printf(請(qǐng)輸入高數(shù)成績(jī):); scanf(%s,pNodeScore-data.Math); if(headScore=NULL) /如果頭結(jié)點(diǎn)為空headScore=pNodeScore;pNodeScore-next=NULL; else /如果頭結(jié)點(diǎn)不為空pNodeScore-next=headScore;headScore=pNodeScore;/將頭結(jié)點(diǎn)新結(jié)點(diǎn) void Input() int n,i; printf(輸入幾個(gè)學(xué)生的數(shù)據(jù):); scanf(%d,&n); for(i=0;

22、iAdd(); printf(輸入成功!); int Delete() p_node_score pNodeScore,p1; /p1為pNodeScore的前驅(qū)p1=headScore; if(p1=NULL) printf(成績(jī)表中沒(méi)有數(shù)據(jù)!請(qǐng)先添加數(shù)據(jù)!n);return 0; char DeleteNumber2021printf(請(qǐng)數(shù)入要?jiǎng)h除的學(xué)生學(xué)號(hào):); scanf(%s,DeleteNumber); if(strcmp(p1-data.Number,DeleteNumber)=0) /如果要?jiǎng)h除的結(jié)點(diǎn)在第一個(gè)headScore=p1-next;pNodeScore=p1;pri

23、ntf(學(xué)號(hào)為%s的學(xué)生信息已經(jīng)刪除!n,DeleteNumber);return 0; elsepNodeScore=p1-next;while(pNodeScore!=NULL)if(strcmp(pNodeScore-data.Number,DeleteNumber)=0)p1-next=pNodeScore-next;printf(學(xué)號(hào)為%s的學(xué)生信息已經(jīng)刪除!n,DeleteNumber);return 0;else /否則,結(jié)點(diǎn)向下一個(gè),p1仍為pNodeScore的前驅(qū)p1=pNodeScore;pNodeScore=pNodeScore-next; printf(沒(méi)有此學(xué)號(hào)的學(xué)

24、生!); int Change() p_node_score pNodeScore;pNodeScore=headScore; if(pNodeScore=NULL) printf(成績(jī)表中沒(méi)有數(shù)據(jù)!請(qǐng)先添加數(shù)據(jù)!n);return 0; char EditNumber2021 printf(請(qǐng)輸入你要修改的學(xué)生學(xué)號(hào):); scanf(%s,EditNumber); while(pNodeScore!=NULL) if(strcmp(pNodeScore-data.Number,EditNumber)=0) /用strcmp比較兩字符串是否相等,相等則返回0printf(原來(lái)的學(xué)生成績(jī)信息如下

25、:n); /輸出原來(lái)的成績(jī)信息printf(學(xué)號(hào)|姓名| 語(yǔ)文成績(jī)| 英語(yǔ)成績(jī)| 高數(shù)成績(jī)n);PrintScore(pNodeScore-data);printf(語(yǔ)文新成績(jī):);scanf(%s,pNodeScore-data.Chinese);printf(英語(yǔ)新成績(jī):);scanf(%s,pNodeScore-data.English);printf(高數(shù)新成績(jī):);scanf(%s,pNodeScore-data.Math);printf(成績(jī)已經(jīng)修改!);return 0;pNodeScore=pNodeScore-next; /如果不相等,pNodeScore則指向下一個(gè)結(jié)點(diǎn) p

26、rintf(沒(méi)有此學(xué)號(hào)的學(xué)生!n); /如果找到最后都沒(méi)有,則輸出沒(méi)有此學(xué)號(hào)的學(xué)生 int Find() p_node_score pNodeScore;pNodeScore=headScore; if(pNodeScore=NULL) printf(成績(jī)表中沒(méi)有數(shù)據(jù)!請(qǐng)先添加數(shù)據(jù)!n);return 0; char FindNumber2021 printf(請(qǐng)輸入你要查找的學(xué)生學(xué)號(hào):); scanf(%s,FindNumber); while(pNodeScore!=NULL) if(strcmp(pNodeScore-data.Number,FindNumber)=0)printf(你要

27、查找的學(xué)生成績(jī)信息如下:n);printf(學(xué)號(hào)|姓名| 語(yǔ)文成績(jī)| 英語(yǔ)成績(jī)| 高數(shù)成績(jī)n);PrintScore(pNodeScore-data);return 0;pNodeScore=pNodeScore-next; printf(沒(méi)有此學(xué)號(hào)的學(xué)生!n); int main()/主函數(shù) int choice=0; headScore=NULL; int c; do system(color 2f);/運(yùn)行環(huán)境背景顏色.printf(nntt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=ntt);printf(nttt 學(xué)生成績(jī)管理系統(tǒng) ttt);pri

28、ntf(nntt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=ntt);printf(nttt1.輸入成績(jī)信息nttt2.輸出成績(jī)信息nttt3.添加成績(jī)信息nttt);printf(4.修改成績(jī)信息nttt5.刪除成績(jī)信息nttt6.查詢(xún)成績(jī)信息nttt7.退出);printf(nnttt請(qǐng)選擇:);scanf(%d,&c);switch(c)case 1:system(cls);Input();break;case 2:system(cls);View();break;case 3:system(cls);Add();break;case 4:system

29、(cls);Change();break;case 5:system(cls);Delete();break;case 6:system(cls);Find();break;case 7:system(cls);exit(0);while(1); return 0; 運(yùn)行界面如下:第三篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)二一三 二一四 學(xué)年第 二 學(xué)期信息科學(xué)與工程學(xué)院綜合設(shè)計(jì)報(bào)告書(shū)課程名稱(chēng): 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 班 級(jí): 學(xué) 號(hào): 姓 名: 指導(dǎo)教師:二一四 年 六 月一、實(shí)驗(yàn)內(nèi)容(一)、單鏈表:將若干城市的信息存入一個(gè)帶頭的單鏈表中,結(jié)點(diǎn)中城市信息包括城市的位置坐標(biāo),要求:給定一個(gè)城市名,返回其位置坐標(biāo);給

30、定一個(gè)位置坐標(biāo)P和一個(gè)距離D,返回所有與P的距離小于等于D的城市。(二)、回文判斷:試寫(xiě)出一個(gè)算法,判斷依次讀入的一個(gè)以為結(jié)束符的字母序列,是否形如“序列1&序列2”模式的字符序列。其中序列1和序列2中都不含有字符“&”,且序列2是序列1的逆序列。例如,“a+b&b+a”是屬于該模式的字符序列。(三)、樹(shù)和二叉樹(shù):建立一棵用二叉鏈表方式存儲(chǔ)的二叉樹(shù),并對(duì)其進(jìn)行遍歷(先序,中序,后序)。打印輸出遍歷結(jié)果。二、實(shí)驗(yàn)過(guò)程(一)、城市信息1、根據(jù)題目,我們認(rèn)為我們所編的程序需要實(shí)現(xiàn)以下功能: (1)、創(chuàng)建一個(gè)城市鏈表,能夠輸入城市信息,即城市名和城市位置坐標(biāo); (2)、能夠根據(jù)城市名查詢(xún)其位置坐標(biāo);

31、(3)、根據(jù)離中心坐標(biāo)距離查詢(xún)城市名; (4)、能夠插入城市信息; (5)、能夠刪除城市信息; (6)、能夠更新城市信息; (7)、執(zhí)行完畢,退出程序。2、演示程序以用戶(hù)和計(jì)算機(jī)的對(duì)話(huà)方式執(zhí)行,即在在計(jì)算機(jī)終端上顯示“提示信息”之后,由用戶(hù)在鍵盤(pán)上輸入演示程序中規(guī)定的運(yùn)算命令;輸入相應(yīng)的數(shù)據(jù)(濾去輸入中非法字符),運(yùn)算結(jié)果顯示在其后。測(cè)試數(shù)據(jù)1)、輸入”1”調(diào)用函數(shù) Create();新建城市信息:fujian(1.1,2.2)beijing(3.3,4.4)shanghai(5,6) tianjing(7,8) nanjing(910,910) hangzhou(11,12) 輸入END鍵,

32、退出. 2)、輸入”2”,調(diào)用函數(shù)FindCity();當(dāng)鍵入城市名時(shí),返回其城市坐標(biāo): 如:鍵入城市名”fujian”,返回坐標(biāo):1.10.2.2021)、輸入“3”調(diào)用函數(shù) FindCityDistance();如:當(dāng)給定坐標(biāo)P(3.3,4.4)時(shí),距離5時(shí),就輸出所有與P的距離小于等于5的城市信息。 4)、輸入”4”,調(diào)用函數(shù)Insert().進(jìn)行插入新城市信息操作;如:插入城市信息:hainan(5,8),當(dāng)進(jìn)行查找時(shí),能看到插入城市的信息.證明插入成功. 5)、輸入”5”,調(diào)用函數(shù)Delete(),進(jìn)行刪除操作: 6)、輸入”6”,調(diào)用函數(shù)UpdateCity(Store),進(jìn)行更新

33、操作; 7)、輸入”7”,退出.3、源程序代碼:void Init(CityList *LHead) LHead-Next = NULL; /建立一個(gè)帶頭結(jié)點(diǎn)的單鏈線性表,LHead指向頭結(jié)點(diǎn)。 void Insert(CityList *LHead) CityList* newNode; /定義指針結(jié)構(gòu)為cityList型char m; newNode = (CityList*)malloc(sizeof(CityList); /生成新結(jié)點(diǎn)if(newNode = NULL) /驗(yàn)證空間申請(qǐng)是否成功printf(內(nèi)存分配失敗n);return; /若分配內(nèi)存不成功,則返回繼續(xù)分配。 prin

34、tf(請(qǐng)輸入城市名n); scanf(%s,newNode-CityName);/指針的數(shù)據(jù)域printf(請(qǐng)輸入城市坐標(biāo)x,yn); scanf(%f%c%f,&newNode-X,&m,&newNode-Y); /將城市信息填入新節(jié)點(diǎn)中while(LHead-Next != NULL) LHead = LHead-Next; /如果非空,HLead指針的位置向后移newNode-Next = LHead-Next; LHead-Next = newNode; /將新節(jié)點(diǎn)插入鏈表 void Delete(CityList *LHead) char delCity10; printf(請(qǐng)輸入要

35、刪除的城市名n); scanf(%s,delCity); while(strcmp(LHead-Next-CityName,delCity )/從LHead指向得頭結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)開(kāi)判斷結(jié)點(diǎn)中的城市名與輸入城市名是否相等。LHead = LHead-Next; /不相等則指針LHead下移,繼續(xù)查找 LHead -Next = LHead-Next-Next; /相等則刪除此節(jié)點(diǎn) void Create(CityList *LHead) char sign2021 /定義輸入信息類(lèi)型及長(zhǎng)度printf(輸入END退出,輸入其余值繼續(xù)n); /當(dāng)輸入END時(shí),在任意輸入,則退出此操作scanf(

36、%s,sign); while(strcmp(sign,END) /當(dāng)輸入END時(shí),再任意輸入,則退出此操作Insert(LHead);printf(輸入END退出,輸入其余值繼續(xù)n);scanf(%s,sign); void FindCity(CityList* LHead) char CityName30; int j=0; printf(請(qǐng)輸入您要搜索的城市名n); scanf(%s,CityName); while(LHead-Next != NULL & strcmp(LHead-Next-CityName,CityName) LHead = LHead-Next; if(LHead

37、-Next = NULL) printf(您要搜索的城市不存在n);return; printf(城市坐標(biāo)為%.2f,%.2fn,LHead-Next-X,LHead-Next-Y); void UpdateCity(CityList* LHead) char CityName10; printf(請(qǐng)輸入您要更新的城市名n); scanf(%s,CityName); while(strcmp(LHead-Next-CityName,CityName) /從LHead指向得頭結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)開(kāi)判斷結(jié)點(diǎn)中的城市名與輸入城市名是否相等。LHead = LHead-Next; / 當(dāng)不相等則指針LHe

38、ad下移,繼續(xù)查找 printf(請(qǐng)輸入城市新信息:n); printf(請(qǐng)輸入城市新名n); scanf(%s,LHead-Next-CityName); printf(請(qǐng)輸入城市新坐標(biāo)n); scanf(%f,&LHead-Next-X); scanf(%f,&LHead-Next-Y); /輸入城市新信息void FindCityDistance(CityList* LHead) char m; float x; float y; float distance; printf(請(qǐng)輸入中心坐標(biāo)x,yn); scanf(%f%c%f,&x,&m,&y); printf(請(qǐng)輸入距離:); sc

39、anf(%f,&distance); LHead = LHead-Next; while(LHead != NULL) if(x-LHead-X)*(x-LHead-X) + (y-LHead-Y)*(y-LHead-Y)CityName);printf(城市坐標(biāo)為%.2f,%.2fn,LHead-X,LHead-Y);LHead = LHead-Next; void main() CityList* LHead; CityList* Store; char choice3 = 1,2,3; LHead = (CityList*)malloc(sizeof(CityList); Init(LH

40、ead);/建立空表Store = LHead; while(strcmp(choice,7) /當(dāng)所選擇等于7時(shí),進(jìn)行以下操作printf(*n); printf(*n); printf( 歡迎使用本系統(tǒng) n); printf(*n); printf(*n); printf(1.創(chuàng)建城市鏈表n); printf(2.根據(jù)城市名查詢(xún)城市n);printf(3.根據(jù)離中心坐標(biāo)距離查詢(xún)城市n); printf(4.插入新城市信息n); printf(5.刪除城市信息n); printf(6.更新城市信息n); printf(7.退出n); /以上相當(dāng)于一個(gè)選擇菜單,皆為提示信息printf(=n)

41、;printf(請(qǐng)輸入:);scanf(%s,&choice); switch(choice0)case 1: /相當(dāng)于選擇1Create(Store); /構(gòu)造并創(chuàng)建城市信息鏈表break;case 2:FindCity(Store);/根據(jù)城市名查找城市位置break;case 3: FindCityDistance(Store);/根據(jù)所給中心坐標(biāo)和距離值,返回小于等于所給距離值得節(jié)點(diǎn)信息。break;case 4:Insert(Store);/插入新結(jié)點(diǎn)break;case 5:Delete(Store);/刪除結(jié)點(diǎn)break;case 6:UpdateCity(Store);/更新結(jié)

42、點(diǎn)信息break;case 7:/退出break;default:printf(輸入錯(cuò)誤,請(qǐng)重新輸入n);break; system(PAUSE); return ; (二)、回文判斷1、需求分析:(1)輸入測(cè)試數(shù)據(jù)組數(shù),接著分組輸入字符串,以結(jié)尾。(2)輸入序列總長(zhǎng)不超過(guò) (MAX_N = 10005)/2 個(gè)。將序列1先入棧,接著處理序列2,同時(shí)出棧判斷。(3)將序列1全部入棧,接著輸入序列2,同時(shí)出棧判斷。(4)如果序列滿(mǎn)足題目要求,則輸出“回文序列”;否則,輸出“非回文序列”。12 a+b&b+a a&b a&a2、(1)數(shù)據(jù)結(jié)構(gòu):typedef struct Stack int to

43、p,size; char strMAX_N1; ; 使用結(jié)構(gòu)體,內(nèi)部定義數(shù)組模擬棧。top為棧頂指針,指向當(dāng)前元素的下一個(gè)位置,size表示棧內(nèi)的元素個(gè)數(shù)。(2)函數(shù)介紹:void st_init(Stack *st); /棧的初始化bool st_push(Stack *st,const char *temp); /入棧bool st_top(Stack *st,char *temp); /出棧3、源程序代碼: #include #include #includeconst int MAX_N = 10005;typedef struct Stack int top,size; char s

44、trMAX_N1; ;void st_init(Stack *st) st-size=MAX_N1; st-top=0; bool st_push(Stack *st,const char *temp) if( st-topst-size )return false; st-strst-top+ = *temp; return true; bool st_pop(Stack *st) if( st-top=0 )return false; st-top-; return true; bool st_top(Stack *st,char *temp) if( st-top=0 )return f

45、alse; *temp = st-strst-top-1; return true; int main() char strMAX_N,c; int i,j,cas,len; Stack st; bool flag; / freopen(pal.txt,r,stdin); printf(請(qǐng)輸入測(cè)試組數(shù):n); scanf(%d,&cas); getchar(); j=0; while( cas- ) +j;printf(n第 %d 組數(shù)據(jù)n,j); printf(n請(qǐng)輸入數(shù)據(jù)(字符串1&字符串2):n);for( i=0; 1; i+ ) stri=getchar(); if( stri= )

46、 stri=0;break; getchar(); flag = true; len = strlen(str); st_init(&st); if( !len&1 ) flag = false; else for( i=0; iif( stri=& )break;st_push(&st,&stri); for( +i; ist_top(&st,&c);flag = st_pop(&st);if( c!=stri | !flag)flag = false;break; if( st.top0 )flag = false; printf(nCase : %dn,j); if( flag ) pr

47、intf(回文序列。n);elseprintf(非回文序列。n);printf(n); printf(輸入結(jié)束。By changning.huang); / while( true ); return 0; (三)、二叉樹(shù)1、算法思想:定義二叉樹(shù)結(jié)構(gòu)體類(lèi)型時(shí),也定義了一個(gè)順序棧結(jié)構(gòu)體類(lèi)型,用以輔助完成二叉樹(shù)的非遞歸遍歷。由鍵盤(pán)輸入二叉樹(shù)先序序列,用擴(kuò)展線序序列函數(shù)接受并創(chuàng)建二叉鏈表。遍歷前先判斷二叉樹(shù)是否為空,若為空,執(zhí)行空操作;否則依次執(zhí)行各遍歷函數(shù)相應(yīng)操作。先序遍歷,先訪問(wèn)根節(jié)點(diǎn),然后按先序遍歷左子樹(shù),再按先序遍歷右子樹(shù)。中序遍歷,先按中序遍歷左子樹(shù),再訪問(wèn)根節(jié)點(diǎn),然后按中序訪問(wèn)右子樹(shù)。后

48、序遍歷,先按后序遍歷左子樹(shù),接著按中序遍歷右子樹(shù),然后訪問(wèn)根節(jié)點(diǎn)。2、測(cè)試數(shù)據(jù):ABCDEGF(其中表示空格字符)輸出結(jié)果為: 先序:ABCDEGF 中序:CBEGDFA 后序:CGBFDBA3、源程序代碼: #include #include typedef struct tnode char data; struct tnode *lchild; struct tnode *rchild; tnode; tnode *Tree_creat(tnode *t) char ch; ch=getchar(); if(ch= ) t=NULL; else if(!(t=(tnode *)mallo

49、c(sizeof(tnode) printf(Error!); t-data=ch;/printf(%c,t-data); t-lchild=Tree_creat(t-lchild); t-rchild=Tree_creat(t-rchild); return t; void preorder(tnode *t) if(t!=NULL) printf(%c ,t-data);preorder(t-lchild); preorder(t-rchild); void main() tnode *t=NULL; t=Tree_creat(t); preorder(t); 三、心得體會(huì):數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)是

50、大一學(xué)過(guò)c語(yǔ)言實(shí)驗(yàn)的深化,難度增加了很多。但本次實(shí)驗(yàn)三個(gè)部分主要涉及單鏈表、棧、隊(duì)列的知識(shí)。我覺(jué)得這些計(jì)算機(jī)中的線性存儲(chǔ)結(jié)構(gòu)原理比較好理解,但是當(dāng)自己來(lái)編寫(xiě)程序的時(shí)候難度大大增加了,這其中涉及到一些指針、結(jié)構(gòu)體等c語(yǔ)言基礎(chǔ)的東西。開(kāi)始做實(shí)驗(yàn)的時(shí)候,由于對(duì)上述知識(shí)不太熟悉,感覺(jué)很困難,后來(lái)通過(guò)復(fù)習(xí)c語(yǔ)言相關(guān)內(nèi)容和上網(wǎng)查閱資料,逐步理解代碼,一點(diǎn)點(diǎn)掌握了技巧??傊@次實(shí)驗(yàn)自己感覺(jué)對(duì)用c語(yǔ)言寫(xiě)程序的掌握又進(jìn)一步強(qiáng)化了,實(shí)驗(yàn)中遇到的困難也都解決了,能力得到了鍛煉。第四篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)課 程 設(shè) 計(jì) 任 務(wù) 書(shū)信息 學(xué)院 信息管理與信息系統(tǒng) 專(zhuān)業(yè) 09級(jí)1班 班 孫鵬一、二、 課程設(shè)計(jì)題目: 迷宮

51、求解、一元多項(xiàng)式課程設(shè)計(jì)主要參考資料: 數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版) 嚴(yán)蔚敏、吳偉民 編著數(shù)據(jù)結(jié)構(gòu)題集(C語(yǔ)言版) 嚴(yán)蔚敏、吳偉民、米寧 編著數(shù)據(jù)結(jié)構(gòu)課件三、 設(shè)計(jì)應(yīng)解決下列各主要問(wèn)題:1.實(shí)現(xiàn)迷宮的路徑求解,并輸出最終路徑,標(biāo)記走過(guò)卻未選擇的路徑和最終選擇的路徑2.對(duì)一元多項(xiàng)式實(shí)現(xiàn)加法,減法,乘法,求導(dǎo)的計(jì)算,并按指數(shù)由大到小排序輸出四、 課程設(shè)計(jì)相關(guān)附件(如:圖紙、軟件等):五、命題發(fā)出日期:2021-3-15 設(shè)計(jì)應(yīng)完成日期: 2021-6-2021設(shè)計(jì)指導(dǎo)教師(簽章):系主任(簽章):指導(dǎo)教師對(duì)課程設(shè)計(jì)的評(píng)語(yǔ)指導(dǎo)教師(簽章):年 月 日山東科技大學(xué)學(xué)生課程設(shè)計(jì)課程設(shè)計(jì)1 迷宮問(wèn)題一、 需求分析

52、:1. 2. 3. 4. 以二維數(shù)組Maze表示迷宮用戶(hù)輸入迷宮的數(shù)據(jù):構(gòu)建迷宮,行數(shù)m,列數(shù)n 迷宮的入口位置和出口位置可由用戶(hù)隨時(shí)設(shè)定若設(shè)定的迷宮存在通路,則以長(zhǎng)方陣形式將迷宮及其通路輸出到標(biāo)準(zhǔn)輸出文件(即終端)上,其中,字符“#”表示障礙,字符“*”表示路徑上的位置,字符“”表示“死胡同”,即曾經(jīng)途徑然而不能到達(dá)出口的位置,余者用空格符印出。若設(shè)定的迷宮不存在通路,則報(bào)告相應(yīng)信息。5. 本程序只求出一條成功的通路。然而,只需要對(duì)迷宮求解的函數(shù)做小量修改,便可求得全部路徑。二、 概要設(shè)計(jì):抽象數(shù)據(jù)類(lèi)型線性表的定義如下: 設(shè)計(jì)棧的抽象數(shù)據(jù)類(lèi)型定義:ADT Stack 數(shù)據(jù)對(duì)象:D=ai:|a

53、iPositionSet,i=1n,n0 數(shù)據(jù)關(guān)系:R1=|ai-1,aid,i=2,n 基本操作:的初始化S GetTop(S,&e) 素Push(&S,e) Pop(&S,e)返回其值 ADT Stack; 迷宮的抽象數(shù)據(jù)類(lèi)型定義: ADT Maze 數(shù)據(jù)對(duì)象:D:=aij,Start,end|aij,Start,end 0im+2,0jn+2,m,n0數(shù)據(jù)關(guān)系:R=ROW.COL Row=|ai-1,aijD i=1,m+2,j=1,n+2第1頁(yè)操作結(jié)果構(gòu)造一個(gè)空棧,完成棧用e返回棧S的棧頂元將新的元素e壓入棧頂 刪除棧頂元素,并用eInitStack(&S)山東科技大學(xué)學(xué)生課程設(shè)計(jì)Co

54、l=|aijaij-1D基本操作: masepath (int i,int j,int m,int n,sqstack &s) 初始條件:已知目前迷宮狀態(tài), 傳過(guò)起始位置,和終止位置 操作結(jié)果:搜索迷宮,用sqstack s返回搜索所得路徑。如不存在,返回2 ADT MAZE三、 詳細(xì)設(shè)計(jì):#include #include #include #define OVERFLOW -2 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define STACK_INIT_SIZE 100 /存儲(chǔ)空間初始量 #define ST

55、ACK_INCREMENT 10/存儲(chǔ)空間初始增量typedef int Status;typedef struct int r; int c; PostType;/坐標(biāo)位置迷宮的r行c列 typedef struct int ord;/通道塊在路徑上的序號(hào)PostType seat;/通道塊的當(dāng)前坐標(biāo)位置int di;/通道塊指向下一通道塊的方向 SElemType;/棧元素的類(lèi)型 typedef struct SElemType *base;/棧底指針SElemType *top;/棧頂指針int stacksize;/棧的最大容量 Stack;/棧的類(lèi)型第2頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)S

56、tatus InitStack(Stack &S)/初始化棧 S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType); if(!S.base)exit(OVERFLOW);/存儲(chǔ)分配失敗; S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; /InitStackStatus StackEmpty(Stack S) /判斷棧是否為空,如果為空返回TRUE,否則返回FALSE if(S.top=S.base)return TRUE;return FALSE; /StackEmp

57、tyStatus Push(Stack &S,SElemType e) /插入元素為e的棧頂元素 if(S.top-S.base=S.stacksize) S.base=(SElemType*)realloc(S.base,(S.stacksize+STACK_INCREMENT)*sizeof(SElemType);if(!S.base)exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACK_INCREMENT; *S.top+=e; return OK; /PushStatus Pop(Stack &S,SElemType &e

58、) /刪除棧頂元素存入e if(S.top=S.base)return ERROR; e=*-S.top;第3頁(yè) 山東科技大學(xué)學(xué)生課程設(shè)計(jì)return OK; /PopStatus DestroyStack(Stack &S) /銷(xiāo)毀棧 free(S.base); S.top=S.base; return OK; /DestroyStack/maze.cpp #define MAXLEN 2021迷宮包括外墻最大行列數(shù)目 typedef structint r;int c;char adrMAXLENMAXLEN;/可取 * # MazeType;/迷宮類(lèi)型Status InitMaze(MazeType &maze) /初始化迷宮若成功返回TRUE,否則返回FALSEint m,n,i,j,k=1;printf(輸入迷口的行數(shù)和列數(shù): );

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

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

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

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


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