九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

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

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

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

10 積分

下載資源

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

資源描述:

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

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

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

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

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

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

6、ize; /存放圖中頂點的數(shù)組int arcMaxSizeMaxSize;/存放圖中邊的數(shù)組 ; *【以下為類的實現(xiàn) 即類函數(shù)的定義】* template MGraph:MGraph()/a為景點代號,b為景點名稱,c為景點信息,d為景點方位信息的橫坐標(biāo),e為景點方位信息的縱坐標(biāo)/s為存放景點鄰接矩陣信息的一維數(shù)組,根據(jù)其對稱性可以用公式賦值給二維數(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=南門,實驗樓,南圖,大活,睿思樓,大禮堂, 南4教,知行樓,國交樓,南3教,南2教,南1教, 北圖,北3教,北4教,北2教,北1教,北門; char* c=南校區(qū)正門,物理實驗樓,南校區(qū)圖書館,大學(xué)生活動中心, 教師辦公樓、醫(yī)務(wù)室及留學(xué)生公寓,大禮堂,用于舉辦各種文藝演出,南校區(qū)第4教學(xué)樓,實習(xí)基地,計算機房等, 國際交流中心,教職工餐廳,南校區(qū)第3教學(xué)樓,南校區(qū)第2教學(xué)樓,南校區(qū)第1教學(xué)樓, 北校區(qū)圖書館,北校區(qū)第3教學(xué)樓,北校區(qū)第4教學(xué)樓,北校區(qū)第2教學(xué)樓, 北校區(qū)第1教學(xué)樓,北校區(qū)正門; 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)-;/出棧的元素數(shù)組逐個賦給臨時棧 popstacknumber=p.number;/將這個車牌號信息傳給int popstacknumber() popstacktime=p.time;/將該車的時間信息傳給double popstacktime() cs.top-;/棧頂指針回到原來位置while(stemp.top=0) cs.s+(cs.top)=stemp.s(stemp.t

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

13、結(jié)點是否為空 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即車在過道上的位置,【從1開始計!】 return count; int parkingmanagement:popqueue(carqueue &cq)/出隊,隊內(nèi)進行調(diào)整,返回汽車車牌號 car p; p.number=(cq.f

14、ront)-next)-number;/cq隊里,從cq.front開始指向下一個元素的車牌號賦給car類型的車信息 p.time=(cq.front)-next)-time;/cq隊里,從cq.front開始指向下一個元素的時刻 /賦給car類型的車信息p.next=(cq.front)-next)-next;/cq隊里,從cq.front開始指向下一個元素的指針 /賦給car類型的車信息的下一個元素的指針 return p.number; cq.front=(cq.front)-next; void parkingmanagement:arrival(carstack &cs,carque

15、ue &cq,int cnum,double ctime) /車輛到達,根據(jù)輸入的車牌號、到達時間,變更函數(shù)參數(shù);并cout車位信息 int pos; if(!(cs.full()/如果棧未滿,車輛停入停車場 int fl(0),i;/定義一個從0開始的標(biāo)記fl for(i=0;inext; if(p-number=cnum)/在過道中找到要出去的車,則在隊列中刪除該car。 /后面的車輛依然順序排列,補足空位 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)/空隊列,【新結(jié)點既是隊頭,又是隊尾】關(guān)鍵是!front指向第一個結(jié)點 front=rear=s; else rear-next=s;/將結(jié)點s插入到隊尾 rear=s; p=fro

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

18、一個最大尺寸為size的空棧S=new carinfoMaxSize;/創(chuàng)建存儲棧的數(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個結(jié)點(結(jié)點位置從1開始) if(!p|!p-next) coutnext=q-next; delete q; *【以下為主函數(shù)】*void outputpark()/系統(tǒng)功能選擇頁面,輸入泊車信息 coutarrivecarnumcartime; if(arrive=A) if(cs.top!=MaxSize-1)/停車場內(nèi)有空位可以駛?cè)?cs.Pushcar(carnum,cartime); coutcarnum=carnum) flagde=1; break; pos+; p=p-next; if(flagde) coutdata);/輸出

20、學(xué)生信息和成績信息pNodeScore=pNodeScore-next; void Add() p_node_score pNodeScore; / 定義一個節(jié)點pNodeScore=(p_node_score)malloc(sizeof(node_score);/為節(jié)點分配存儲空間printf(請輸入學(xué)號:); scanf(%s,pNodeScore-data.Number); printf(請輸入姓名:); scanf(%s,pNodeScore-data.Name); printf(請輸入語文成績:); scanf(%s,pNodeScore-data.Chinese); printf(

21、請輸入英語成績:); scanf(%s,pNodeScore-data.English); printf(請輸入高數(shù)成績:); scanf(%s,pNodeScore-data.Math); if(headScore=NULL) /如果頭結(jié)點為空headScore=pNodeScore;pNodeScore-next=NULL; else /如果頭結(jié)點不為空pNodeScore-next=headScore;headScore=pNodeScore;/將頭結(jié)點新結(jié)點 void Input() int n,i; printf(輸入幾個學(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(成績表中沒有數(shù)據(jù)!請先添加數(shù)據(jù)!n);return 0; char DeleteNumber2021printf(請數(shù)入要刪除的學(xué)生學(xué)號:); scanf(%s,DeleteNumber); if(strcmp(p1-data.Number,DeleteNumber)=0) /如果要刪除的結(jié)點在第一個headScore=p1-next;pNodeScore=p1;pri

23、ntf(學(xué)號為%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é)號為%s的學(xué)生信息已經(jīng)刪除!n,DeleteNumber);return 0;else /否則,結(jié)點向下一個,p1仍為pNodeScore的前驅(qū)p1=pNodeScore;pNodeScore=pNodeScore-next; printf(沒有此學(xué)號的學(xué)

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

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

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

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

28、ntf(nntt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=ntt);printf(nttt1.輸入成績信息nttt2.輸出成績信息nttt3.添加成績信息nttt);printf(4.修改成績信息nttt5.刪除成績信息nttt6.查詢成績信息nttt7.退出);printf(nnttt請選擇:);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; 運行界面如下:第三篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計二一三 二一四 學(xué)年第 二 學(xué)期信息科學(xué)與工程學(xué)院綜合設(shè)計報告書課程名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 班 級: 學(xué) 號: 姓 名: 指導(dǎo)教師:二一四 年 六 月一、實驗內(nèi)容(一)、單鏈表:將若干城市的信息存入一個帶頭的單鏈表中,結(jié)點中城市信息包括城市的位置坐標(biāo),要求:給定一個城市名,返回其位置坐標(biāo);給

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

31、(3)、根據(jù)離中心坐標(biāo)距離查詢城市名; (4)、能夠插入城市信息; (5)、能夠刪除城市信息; (6)、能夠更新城市信息; (7)、執(zhí)行完畢,退出程序。2、演示程序以用戶和計算機的對話方式執(zhí)行,即在在計算機終端上顯示“提示信息”之后,由用戶在鍵盤上輸入演示程序中規(guī)定的運算命令;輸入相應(yīng)的數(shù)據(jù)(濾去輸入中非法字符),運算結(jié)果顯示在其后。測試數(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)鍵入城市名時,返回其城市坐標(biāo): 如:鍵入城市名”fujian”,返回坐標(biāo):1.10.2.2021)、輸入“3”調(diào)用函數(shù) FindCityDistance();如:當(dāng)給定坐標(biāo)P(3.3,4.4)時,距離5時,就輸出所有與P的距離小于等于5的城市信息。 4)、輸入”4”,調(diào)用函數(shù)Insert().進行插入新城市信息操作;如:插入城市信息:hainan(5,8),當(dāng)進行查找時,能看到插入城市的信息.證明插入成功. 5)、輸入”5”,調(diào)用函數(shù)Delete(),進行刪除操作: 6)、輸入”6”,調(diào)用函數(shù)UpdateCity(Store),進行更新

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

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

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

36、%s,sign); while(strcmp(sign,END) /當(dāng)輸入END時,再任意輸入,則退出此操作Insert(LHead);printf(輸入END退出,輸入其余值繼續(xù)n);scanf(%s,sign); void FindCity(CityList* LHead) char CityName30; int j=0; printf(請輸入您要搜索的城市名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(請輸入您要更新的城市名n); scanf(%s,CityName); while(strcmp(LHead-Next-CityName,CityName) /從LHead指向得頭結(jié)點的下一個結(jié)點開判斷結(jié)點中的城市名與輸入城市名是否相等。LHead = LHead-Next; / 當(dāng)不相等則指針LHe

38、ad下移,繼續(xù)查找 printf(請輸入城市新信息:n); printf(請輸入城市新名n); scanf(%s,LHead-Next-CityName); printf(請輸入城市新坐標(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(請輸入中心坐標(biāo)x,yn); scanf(%f%c%f,&x,&m,&y); printf(請輸入距離:); 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時,進行以下操作printf(*n); printf(*n); printf( 歡迎使用本系統(tǒng) n); printf(*n); printf(*n); printf(1.創(chuàng)建城市鏈表n); printf(2.根據(jù)城市名查詢城市n);printf(3.根據(jù)離中心坐標(biāo)距離查詢城市n); printf(4.插入新城市信息n); printf(5.刪除城市信息n); printf(6.更新城市信息n); printf(7.退出n); /以上相當(dāng)于一個選擇菜單,皆為提示信息printf(=n)

41、;printf(請輸入:);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é)點信息。break;case 4:Insert(Store);/插入新結(jié)點break;case 5:Delete(Store);/刪除結(jié)點break;case 6:UpdateCity(Store);/更新結(jié)

42、點信息break;case 7:/退出break;default:printf(輸入錯誤,請重新輸入n);break; system(PAUSE); return ; (二)、回文判斷1、需求分析:(1)輸入測試數(shù)據(jù)組數(shù),接著分組輸入字符串,以結(jié)尾。(2)輸入序列總長不超過 (MAX_N = 10005)/2 個。將序列1先入棧,接著處理序列2,同時出棧判斷。(3)將序列1全部入棧,接著輸入序列2,同時出棧判斷。(4)如果序列滿足題目要求,則輸出“回文序列”;否則,輸出“非回文序列”。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)前元素的下一個位置,size表示棧內(nèi)的元素個數(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(請輸入測試組數(shù):n); scanf(%d,&cas); getchar(); j=0; while( cas- ) +j;printf(n第 %d 組數(shù)據(jù)n,j); printf(n請輸入數(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; (三)、二叉樹1、算法思想:定義二叉樹結(jié)構(gòu)體類型時,也定義了一個順序棧結(jié)構(gòu)體類型,用以輔助完成二叉樹的非遞歸遍歷。由鍵盤輸入二叉樹先序序列,用擴展線序序列函數(shù)接受并創(chuàng)建二叉鏈表。遍歷前先判斷二叉樹是否為空,若為空,執(zhí)行空操作;否則依次執(zhí)行各遍歷函數(shù)相應(yīng)操作。先序遍歷,先訪問根節(jié)點,然后按先序遍歷左子樹,再按先序遍歷右子樹。中序遍歷,先按中序遍歷左子樹,再訪問根節(jié)點,然后按中序訪問右子樹。后

48、序遍歷,先按后序遍歷左子樹,接著按中序遍歷右子樹,然后訪問根節(jié)點。2、測試數(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); 三、心得體會:數(shù)據(jù)結(jié)構(gòu)實驗是

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

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

52、:1. 2. 3. 4. 以二維數(shù)組Maze表示迷宮用戶輸入迷宮的數(shù)據(jù):構(gòu)建迷宮,行數(shù)m,列數(shù)n 迷宮的入口位置和出口位置可由用戶隨時設(shè)定若設(shè)定的迷宮存在通路,則以長方陣形式將迷宮及其通路輸出到標(biāo)準(zhǔn)輸出文件(即終端)上,其中,字符“#”表示障礙,字符“*”表示路徑上的位置,字符“”表示“死胡同”,即曾經(jīng)途徑然而不能到達出口的位置,余者用空格符印出。若設(shè)定的迷宮不存在通路,則報告相應(yīng)信息。5. 本程序只求出一條成功的通路。然而,只需要對迷宮求解的函數(shù)做小量修改,便可求得全部路徑。二、 概要設(shè)計:抽象數(shù)據(jù)類型線性表的定義如下: 設(shè)計棧的抽象數(shù)據(jù)類型定義:ADT Stack 數(shù)據(jù)對象: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ù)類型定義: ADT Maze 數(shù)據(jù)對象: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頁操作結(jié)果構(gòu)造一個空棧,完成棧用e返回棧S的棧頂元將新的元素e壓入棧頂 刪除棧頂元素,并用eInitStack(&S)山東科技大學(xué)學(xué)生課程設(shè)計Co

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

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

56、tatus InitStack(Stack &S)/初始化棧 S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType); if(!S.base)exit(OVERFLOW);/存儲分配失敗; 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頁 山東科技大學(xué)學(xué)生課程設(shè)計return OK; /PopStatus DestroyStack(Stack &S) /銷毀棧 free(S.base); S.top=S.base; return OK; /DestroyStack/maze.cpp #define MAXLEN 2021迷宮包括外墻最大行列數(shù)目 typedef structint r;int c;char adrMAXLENMAXLEN;/可取 * # MazeType;/迷宮類型Status InitMaze(MazeType &maze) /初始化迷宮若成功返回TRUE,否則返回FALSEint m,n,i,j,k=1;printf(輸入迷口的行數(shù)和列數(shù): );

展開閱讀全文
溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

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

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

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


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