歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

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

  • 資源ID:114539816       資源大小:89KB        全文頁數(shù):60頁
  • 資源格式: DOC        下載積分:10積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要10積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號:
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

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ì)C+/數(shù)據(jù)結(jié)構(gòu) 大作業(yè)/課程設(shè)計(jì)【校園導(dǎo)游咨詢】【停車場管理】娃娃們可以收著以后用 絕對純手工打造 內(nèi)含類模塊/一維指針數(shù)組(謹(jǐn)以此程序供大家參考。運(yùn)行結(jié)果后面有貼圖)目錄【1】校園導(dǎo)游咨詢 程序設(shè)計(jì)源代碼 及 截圖 【2】停車場管理方案一 程序設(shè)計(jì)源代碼 及 截圖 【3】停車場管理方案二 程序設(shè)計(jì)源代碼 及 截圖【1】【校園導(dǎo)游咨詢】#(ps:該校園導(dǎo)游咨詢系統(tǒng)沒有輸入值,所有信息是都在class MGraph的構(gòu)造函數(shù)中傳輸?shù)?,且校園景點(diǎn)信息皆為【上海電力學(xué)院】景點(diǎn)信息。請大家注意,直接從文章copy到visual stutio中會出現(xiàn)中文字符,注意刪除,推薦大家在一行語句的分號后面,點(diǎn)出光標(biāo),按一下delete鍵,然后按一下enter鍵,完成visual stutio的自動對齊,這樣程序看起來一目了然,更易于操作和更改) 【問題描述】設(shè)計(jì)一個校園導(dǎo)游程序,為來訪的客人提供各種信息查詢服務(wù)。 【基本要求】(1)設(shè)計(jì)你所在學(xué)校的校園平面圖,所含景點(diǎn)不少于10個。以圖中頂點(diǎn)表示校內(nèi)各景點(diǎn),存放景點(diǎn)名稱、代號、簡介等信息;以邊表示路徑,存放路徑長度等相關(guān)信息。 (2)為來訪客人提供圖中任意景點(diǎn)相關(guān)信息的查詢。(3)為來訪客人提供圖中任意景點(diǎn)的問路查詢,即查詢?nèi)我鈨蓚€景點(diǎn)之間的一個最短的簡單路徑。 【選作內(nèi)容】(6)擴(kuò)充每個景點(diǎn)的鄰接景點(diǎn)的方向等信息,使得路徑查詢結(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é)點(diǎn) friend class MGraph; public: int vex;/頂點(diǎn)名稱 T vexname;/頂點(diǎn)名稱 T vexinf;/頂點(diǎn)信息direction dir;/存放頂點(diǎn)方位信息的direction類的dir。 ;class direction public: int ln;/存放在方向圖中的橫坐標(biāo),表示東西 int col;/存放在方向圖中的縱坐標(biāo),表示南北 ; template class MGraph/定義無向圖的鄰接矩陣 public: MGraph();/構(gòu)造函數(shù),初始化具有n個頂點(diǎn)的圖void printvexname();/顯示所有景點(diǎn)及景點(diǎn)代號void printvexinf(int i);/顯示代號為i景點(diǎn)的名稱及信息void printroad(int i,int j);/顯示景點(diǎn)ij的最短路徑方案信息void printdir(int i,int j);/顯示景點(diǎn)i到j(luò)的方向信息,如“向東100m,向南2021” VertexNode adjlistMaxSize; /存放景點(diǎn)全部信息的 景點(diǎn)類數(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)間最短路徑長度int LineMaxSize;/Line存放路徑 int kkk;/Line數(shù)組的標(biāo)記private: T vertexMaxSize; /存放圖中頂點(diǎn)的數(shù)組int arcMaxSizeMaxSize;/存放圖中邊的數(shù)組 ; *【以下為類的實(shí)現(xiàn) 即類函數(shù)的定義】* template MGraph:MGraph()/a為景點(diǎn)代號,b為景點(diǎn)名稱,c為景點(diǎn)信息,d為景點(diǎn)方位信息的橫坐標(biāo),e為景點(diǎn)方位信息的縱坐標(biāo)/s為存放景點(diǎn)鄰接矩陣信息的一維數(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,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; char* b="南門","實(shí)驗(yàn)樓","南圖","大活","睿思樓","大禮堂", "南4教","知行樓","國交樓","南3教","南2教","南1教", "北圖","北3教","北4教","北2教","北1教","北門" char* c="南校區(qū)正門","物理實(shí)驗(yàn)樓","南校區(qū)圖書館","大學(xué)生活動中心", "教師辦公樓、醫(yī)務(wù)室及留學(xué)生公寓","大禮堂,用于舉辦各種文藝演出","南校區(qū)第4教學(xué)樓","實(shí)習(xí)基地,計(jì)算機(jī)房等", "國際交流中心,教職工餐廳","南校區(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; int 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) int p,q,m,k,item1,item2; for(p=0;p0)for(q=0;q0) if (Distpq>Distpk+Distkq)|(Distpq=0)&&(p!=q) Distpq=Distpk+Distkq; Pathpq=k; cout""choice; return choice; void main() MGraph mg; int funcchoice(); int fc; while(1) fc=funcchoice(); if(fc=1) int i; for(i=0;i>i; mg.printvexinf(i); else if(fc=3) int i,j; mg.printvexname(); cout>i>>j; mg.printroad(i,j); else if(fc=4) break; else couti) stemp.s+(stemp.top)=cs.s(cs.top)-;/出棧的元素?cái)?shù)組逐個賦給臨時(shí)棧 popstacknumber=p.number;/將這個車牌號信息傳給int popstacknumber() popstacktime=p.time;/將該車的時(shí)間信息傳給double popstacktime() cs.top-;/棧頂指針回到原來位置while(stemp.top>=0) cs.s+(cs.top)=stemp.s(stemp.top)-;/臨時(shí)棧出棧的元素逐個賦給原棧,完成先退再進(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用于記錄車在過道上的位置信息,因隊(duì)列為鏈?zhǔn)降?,所以進(jìn)行循環(huán)累加 p=new car;/創(chuàng)建一個car類型的指針p->number=cnum; p->time=ctime; p->next=NULL;/首先將指向存放car類型元素的數(shù)組初始地址置空 if (cq.front=NULL)/第一次入隊(duì)要判斷頭結(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即車在過道上的位置,【從1開始計(jì)!】 return count; int parkingmanagement:popqueue(carqueue &cq)/出隊(duì),隊(duì)內(nèi)進(jìn)行調(diào)整,返回汽車車牌號 car p; p.number=(cq.front)->next)->number;/cq隊(duì)里,從cq.front開始指向下一個元素的車牌號賦給car類型的車信息 p.time=(cq.front)->next)->time;/cq隊(duì)里,從cq.front開始指向下一個元素的時(shí)刻 /賦給car類型的車信息p.next=(cq.front)->next)->next;/cq隊(duì)里,從cq.front開始指向下一個元素的指針 /賦給car類型的車信息的下一個元素的指針 return p.number; cq.front=(cq.front)->next; void parkingmanagement:arrival(carstack &cs,carqueue &cq,int cnum,double ctime) /車輛到達(dá),根據(jù)輸入的車牌號、到達(dá)時(shí)間,變更函數(shù)參數(shù);并cout車位信息 int pos; if(!(cs.full()/如果棧未滿,車輛停入停車場 int fl(0),i;/定義一個從0開始的標(biāo)記fl for(i=0;inext; if(p->number=cnum)/在過道中找到要出去的車,則在隊(duì)列中刪除該car。 /后面的車輛依然順序排列,補(bǔ)足空位 deletequeue(cq,count); if(count>Max) coutnext) coutnext; p->next=q->next; delete q; *【以下是主程序】* void print() coutacc>>carnum>>cartime; 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指向第一個結(jié)點(diǎn) front=rear=s; else rear->next=s;/將結(jié)點(diǎn)s插入到隊(duì)尾 rear=s; p=front; while(p!=NULL) i+; p=p->next; /i即車在過道上的位置,【從1開始計(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)棧的車從隊(duì)列里刪除 template bool carQueue:Empty()/判斷是否為空,為空則返回1,不為空則返回0 return front=NULL; template carStack:carStack()/構(gòu)造棧算法:top(-1) /建立一個最大尺寸為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; while(p && jnext; j+; /找到第i-1個結(jié)點(diǎn)(結(jié)點(diǎn)位置從1開始) if(!p|!p->next) coutnext=q->next; delete q; *【以下為主函數(shù)】*void outputpark()/系統(tǒng)功能選擇頁面,輸入泊車信息 cout>arrive>>carnum>>cartime; 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);/輸出學(xué)生信息和成績信息pNodeScore=pNodeScore->next; void Add() p_node_score pNodeScore; / 定義一個節(jié)點(diǎn)pNodeScore=(p_node_score)malloc(sizeof(node_score);/為節(jié)點(diǎn)分配存儲空間printf("請輸入學(xué)號:"); scanf("%s",pNodeScore->data.Number); printf("請輸入姓名:"); scanf("%s",pNodeScore->data.Name); printf("請輸入語文成績:"); scanf("%s",pNodeScore->data.Chinese); printf("請輸入英語成績:"); scanf("%s",pNodeScore->data.English); printf("請輸入高數(shù)成績:"); 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("輸入幾個學(xué)生的數(shù)據(jù):"); scanf("%d",&n); for(i=0;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é)點(diǎn)在第一個headScore=p1->next;pNodeScore=p1;printf("學(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é)點(diǎn)向下一個,p1仍為pNodeScore的前驅(qū)p1=pNodeScore;pNodeScore=pNodeScore->next; printf("沒有此學(xué)號的學(xué)生!"); 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é)生成績信息如下: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é)點(diǎn) printf("沒有此學(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("你要查找的學(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");/運(yùn)行環(huán)境背景顏色.printf("nntt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=ntt");printf("nttt 學(xué)生成績管理系統(tǒng) ttt");printf("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("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ù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 班 級: 學(xué) 號: 姓 名: 指導(dǎo)教師:二一四 年 六 月一、實(shí)驗(yàn)內(nèi)容(一)、單鏈表:將若干城市的信息存入一個帶頭的單鏈表中,結(jié)點(diǎn)中城市信息包括城市的位置坐標(biāo),要求:給定一個城市名,返回其位置坐標(biāo);給定一個位置坐標(biāo)P和一個距離D,返回所有與P的距離小于等于D的城市。(二)、回文判斷:試寫出一個算法,判斷依次讀入的一個以為結(jié)束符的字母序列,是否形如“序列1&序列2”模式的字符序列。其中序列1和序列2中都不含有字符“&”,且序列2是序列1的逆序列。例如,“a+b&b+a”是屬于該模式的字符序列。(三)、樹和二叉樹:建立一棵用二叉鏈表方式存儲的二叉樹,并對其進(jìn)行遍歷(先序,中序,后序)。打印輸出遍歷結(jié)果。二、實(shí)驗(yàn)過程(一)、城市信息1、根據(jù)題目,我們認(rèn)為我們所編的程序需要實(shí)現(xiàn)以下功能: (1)、創(chuàng)建一個城市鏈表,能夠輸入城市信息,即城市名和城市位置坐標(biāo); (2)、能夠根據(jù)城市名查詢其位置坐標(biāo); (3)、根據(jù)離中心坐標(biāo)距離查詢城市名; (4)、能夠插入城市信息; (5)、能夠刪除城市信息; (6)、能夠更新城市信息; (7)、執(zhí)行完畢,退出程序。2、演示程序以用戶和計(jì)算機(jī)的對話方式執(zhí)行,即在在計(jì)算機(jī)終端上顯示“提示信息”之后,由用戶在鍵盤上輸入演示程序中規(guī)定的運(yùn)算命令;輸入相應(yīng)的數(shù)據(jù)(濾去輸入中非法字符),運(yùn)算結(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鍵,退出. 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)行更新操作; 7)、輸入”7”,退出.3、源程序代碼:void Init(CityList *LHead) LHead->Next = NULL; /建立一個帶頭結(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)證空間申請是否成功printf("內(nèi)存分配失敗n");return; /若分配內(nèi)存不成功,則返回繼續(xù)分配。 printf("請輸入城市名n"); scanf("%s",newNode->CityName);/指針的數(shù)據(jù)域printf("請輸入城市坐標(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("請輸入要刪除的城市名n"); scanf("%s",delCity); while(strcmp(LHead->Next->CityName,delCity )/從LHead指向得頭結(jié)點(diǎn)的下一個結(jié)點(diǎn)開判斷結(jié)點(diǎn)中的城市名與輸入城市名是否相等。LHead = LHead->Next; /不相等則指針LHead下移,繼續(xù)查找 LHead ->Next = LHead->Next->Next; /相等則刪除此節(jié)點(diǎn) void Create(CityList *LHead) char sign2021 /定義輸入信息類型及長度printf("輸入END退出,輸入其余值繼續(xù)n"); /當(dāng)輸入END時(shí),在任意輸入,則退出此操作scanf("%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("請輸入您要搜索的城市名n"); scanf("%s",CityName); while(LHead->Next != NULL && strcmp(LHead->Next->CityName,CityName) LHead = LHead->Next; if(LHead->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é)點(diǎn)的下一個結(jié)點(diǎn)開判斷結(jié)點(diǎn)中的城市名與輸入城市名是否相等。LHead = LHead->Next; / 當(dāng)不相等則指針LHead下移,繼續(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("請輸入距離:"); scanf("%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(LHead);/建立空表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ù)城市名查詢城市n");printf("3.根據(jù)離中心坐標(biāo)距離查詢城市n"); printf("4.插入新城市信息n"); printf("5.刪除城市信息n"); printf("6.更新城市信息n"); printf("7.退出n"); /以上相當(dāng)于一個選擇菜單,皆為提示信息printf("=n");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é)點(diǎn)信息。break;case '4':Insert(Store);/插入新結(jié)點(diǎn)break;case '5':Delete(Store);/刪除結(jié)點(diǎn)break;case '6':UpdateCity(Store);/更新結(jié)點(diǎn)信息break;case '7':/退出break;default:printf("輸入錯誤,請重新輸入n");break; system("PAUSE"); return ; (二)、回文判斷1、需求分析:(1)輸入測試數(shù)據(jù)組數(shù),接著分組輸入字符串,以結(jié)尾。(2)輸入序列總長不超過 (MAX_N = 10005)/2 個。將序列1先入棧,接著處理序列2,同時(shí)出棧判斷。(3)將序列1全部入棧,接著輸入序列2,同時(shí)出棧判斷。(4)如果序列滿足題目要求,則輸出“回文序列”;否則,輸出“非回文序列”。12 a+b&b+a a&b a&a2、(1)數(shù)據(jù)結(jié)構(gòu):typedef struct Stack int top,size; char strMAX_N>>1; ; 使用結(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 strMAX_N>>1; ;void st_init(Stack *st) st->size=MAX_N>>1; st->top=0; bool st_push(Stack *st,const char *temp) if( st->top>st->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 false; *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='' ) 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.top>0 )flag = false; printf("nCase : %dn",j); if( flag ) printf("回文序列。n");elseprintf("非回文序列。n");printf("n"); printf("輸入結(jié)束。By changning.huang"); / while( true ); return 0; (三)、二叉樹1、算法思想:定義二叉樹結(jié)構(gòu)體類型時(shí),也定義了一個順序棧結(jié)構(gòu)體類型,用以輔助完成二叉樹的非遞歸遍歷。由鍵盤輸入二叉樹先序序列,用擴(kuò)展線序序列函數(shù)接受并創(chuàng)建二叉鏈表。遍歷前先判斷二叉樹是否為空,若為空,執(zhí)行空操作;否則依次執(zhí)行各遍歷函數(shù)相應(yīng)操作。先序遍歷,先訪問根節(jié)點(diǎn),然后按先序遍歷左子樹,再按先序遍歷右子樹。中序遍歷,先按中序遍歷左子樹,再訪問根節(jié)點(diǎn),然后按中序訪問右子樹。后序遍歷,先按后序遍歷左子樹,接著按中序遍歷右子樹,然后訪問根節(jié)點(diǎn)。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 *)malloc(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)實(shí)驗(yàn)是大一學(xué)過c語言實(shí)驗(yàn)的深化,難度增加了很多。但本次實(shí)驗(yàn)三個部分主要涉及單鏈表、棧、隊(duì)列的知識。我覺得這些計(jì)算機(jī)中的線性存儲結(jié)構(gòu)原理比較好理解,但是當(dāng)自己來編寫程序的時(shí)候難度大大增加了,這其中涉及到一些指針、結(jié)構(gòu)體等c語言基礎(chǔ)的東西。開始做實(shí)驗(yàn)的時(shí)候,由于對上述知識不太熟悉,感覺很困難,后來通過復(fù)習(xí)c語言相關(guān)內(nèi)容和上網(wǎng)查閱資料,逐步理解代碼,一點(diǎn)點(diǎn)掌握了技巧??傊@次實(shí)驗(yàn)自己感覺對用c語言寫程序的掌握又進(jìn)一步強(qiáng)化了,實(shí)驗(yàn)中遇到的困難也都解決了,能力得到了鍛煉。第四篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)課 程 設(shè) 計(jì) 任 務(wù) 書信息 學(xué)院 信息管理與信息系統(tǒng) 專業(yè) 09級1班 班 孫鵬一、二、 課程設(shè)計(jì)題目: 迷宮求解、一元多項(xiàng)式課程設(shè)計(jì)主要參考資料: 數(shù)據(jù)結(jié)構(gòu)(C語言版) 嚴(yán)蔚敏、吳偉民 編著數(shù)據(jù)結(jié)構(gòu)題集(C語言版) 嚴(yán)蔚敏、吳偉民、米寧 編著數(shù)據(jù)結(jié)構(gòu)課件三、 設(shè)計(jì)應(yīng)解決下列各主要問題:1.實(shí)現(xiàn)迷宮的路徑求解,并輸出最終路徑,標(biāo)記走過卻未選擇的路徑和最終選擇的路徑2.對一元多項(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)教師對課程設(shè)計(jì)的評語指導(dǎo)教師(簽章):年 月 日山東科技大學(xué)學(xué)生課程設(shè)計(jì)課程設(shè)計(jì)1 迷宮問題一、 需求分析:1. 2. 3. 4. 以二維數(shù)組Maze表示迷宮用戶輸入迷宮的數(shù)據(jù):構(gòu)建迷宮,行數(shù)m,列數(shù)n 迷宮的入口位置和出口位置可由用戶隨時(shí)設(shè)定若設(shè)定的迷宮存在通路,則以長方陣形式將迷宮及其通路輸出到標(biāo)準(zhǔn)輸出文件(即終端)上,其中,字符“#”表示障礙,字符“*”表示路徑上的位置,字符“”表示“死胡同”,即曾經(jīng)途徑然而不能到達(dá)出口的位置,余者用空格符印出。若設(shè)定的迷宮不存在通路,則報(bào)告相應(yīng)信息。5. 本程序只求出一條成功的通路。然而,只需要對迷宮求解的函數(shù)做小量修改,便可求得全部路徑。二、 概要設(shè)計(jì):抽象數(shù)據(jù)類型線性表的定義如下: 設(shè)計(jì)棧的抽象數(shù)據(jù)類型定義:ADT Stack 數(shù)據(jù)對象:D=ai:|aiPositionSet,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è)計(jì)Col=|aijaij-1D基本操作: masepath (int i,int j,int m,int n,sqstack &s) 初始條件:已知目前迷宮狀態(tài), 傳過起始位置,和終止位置 操作結(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 /存儲空間初始量 #define STACK_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è)計(jì)Status 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; /StackEmptyStatus 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) /刪除棧頂元素存入e if(S.top=S.base)return ERROR; e=*-S.top;第3頁 山東科技大學(xué)學(xué)生課程設(shè)計(jì)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ù): ");

注意事項(xiàng)

本文(C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì)正文)為本站會員(痛***)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(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)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!