久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

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

時(shí)間:2019-05-12 16:48:33下載本文作者:會(huì)員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《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)游咨詢】【停車場(chǎng)管理】娃娃們可以收著以后用 絕對(duì)純手工打造 內(nèi)含類模塊/一維指針數(shù)組(謹(jǐn)以此程序供大家參考。運(yùn)行結(jié)果后面有貼圖)

目錄

【1】校園導(dǎo)游咨詢 程序設(shè)計(jì)源代碼 及 截圖 【2】停車場(chǎng)管理——方案一 程序設(shè)計(jì)源代碼 及 截圖 【3】停車場(chǎng)管理——方案二 程序設(shè)計(jì)源代碼 及 截圖

【1】【【校園導(dǎo)游咨詢】】

######

(ps:該校園導(dǎo)游咨詢系統(tǒng)沒有輸入值,所有信息是都在class MGraph的構(gòu)造函數(shù)中傳輸?shù)模倚@景點(diǎn)信息皆為【【上海電力學(xué)院】】景點(diǎn)信息。請(qǐng)大家注意,直接從文章copy到visual stutio中會(huì)出現(xiàn)中文字符,注意刪除,推薦大家在一行語句的分號(hào)后面,點(diǎn)出光標(biāo),按一下delete鍵,然后按一下enter鍵,完成visual stutio的自動(dòng)對(duì)齊,這樣程序看起來一目了然,更易于操作和更改)【問題描述】

設(shè)計(jì)一個(gè)校園導(dǎo)游程序,為來訪的客人提供各種信息查詢服務(wù)。【基本要求】

(1)設(shè)計(jì)你所在學(xué)校的校園平面圖,所含景點(diǎn)不少于10個(gè)。以圖中頂點(diǎn)表示校內(nèi)各景點(diǎn),存放景點(diǎn)名稱、代號(hào)、簡介等信息;以邊表示路徑,存放路徑長度等相關(guān)信息。(2)為來訪客人提供圖中任意景點(diǎn)相關(guān)信息的查詢。

(3)為來訪客人提供圖中任意景點(diǎn)的問路查詢,即查詢?nèi)我鈨蓚€(gè)景點(diǎn)之間的一個(gè)最短的簡單路徑。【選作內(nèi)容】

(6)擴(kuò)充每個(gè)景點(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個(gè)頂點(diǎn)的圖

void printvexname();//顯示所有景點(diǎn)及景點(diǎn)代號(hào)

void printvexinf(int i);//顯示代號(hào)為i景點(diǎn)的名稱及信息

void printroad(int i,int j);//顯示景點(diǎn)i~j的最短路徑方案信息

void printdir(int i,int j);//顯示景點(diǎn)i到j(luò)的方向信息,如“向東100m,向南200m” VertexNode adjlist[MaxSize];//存放景點(diǎn)全部信息的 景點(diǎn)類數(shù)組 int vertexNum,arcNum;//圖的頂點(diǎn)數(shù)和邊數(shù)

void Root(int p,int q);//遞歸尋找pq間的最短路徑

int Path[MaxSize][MaxSize],Dist[MaxSize][MaxSize];//創(chuàng)建Path和Dist分別存放兩點(diǎn)間最短路徑的前驅(qū)節(jié)點(diǎn),兩點(diǎn)間最短路徑長度

int Line[MaxSize];//Line存放路徑 int kkk;//Line[]數(shù)組的標(biāo)記

private: T vertex[MaxSize];//存放圖中頂點(diǎn)的數(shù)組

int arc[MaxSize][MaxSize];//存放圖中邊的數(shù)組 };*************************【以下為類的實(shí)現(xiàn) 即類函數(shù)的定義】*********************************** template MGraph::MGraph()//a[]為景點(diǎn)代號(hào),b[]為景點(diǎn)名稱,c[]為景點(diǎn)信息,d[]為景點(diǎn)方位信息的橫坐標(biāo),e[]為景點(diǎn)方位信息的縱坐標(biāo)

//s[]為存放景點(diǎn)鄰接矩陣信息的一維數(shù)組,根據(jù)其對(duì)稱性可以用公式賦值給二維數(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é)生活動(dòng)中心”, “教師辦公樓、醫(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;i

for(j=0;j void MGraph::printvexname(){ int i;for(i=0;i

template void MGraph::printvexinf(int i){ cout< void MGraph::printdir(int i,int j){ int dx,nb;//臨時(shí)存放i與j之間的南北東西關(guān)系 j在i的哪邊?? dx=adjlist[j].dir.col-adjlist[i].dir.col;nb=adjlist[j].dir.ln-adjlist[i].dir.ln;if(dx>0)//即j在i的東邊

cout<<“向東”<0)//即j在i的南邊

cout<<“向南”< void MGraph::Root(int p,int q){

if(Path[p][q]>0){

Root(p,Path[p][q]);Root(Path[p][q],q);} else {

Line[kkk]=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(((Dist[p][q]>Dist[p][k]+Dist[k][q])||(Dist[p][q]==0))&&(p!=q)){

Dist[p][q]=Dist[p][k]+Dist[k][q];Path[p][q]=k;}

cout<<“n=======n”;cout<<“從”<”;printdir(i,item2);cout<<“-->”<”;printdir(item1-1,item1);cout<<“-->”<

{ int choice;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<<“請(qǐng)輸入兩景點(diǎn)代號(hào)(我們將把最短路線反饋予您):”;cin>>i>>j;mg.printroad(i,j);} else if(fc==4)break;else cout<<“輸入有誤,請(qǐng)重新輸入!”<

【2】【停車場(chǎng)管理系統(tǒng)【方案一 程序】】

######

(ps:該程序有漏洞,若將要離開的車輛是停于便道上的,則對(duì)該車進(jìn)行駛離操作時(shí)程序內(nèi)部有錯(cuò)誤數(shù)據(jù),雖然做了函數(shù)完成這一功能,但因時(shí)間有限,沒能及時(shí)查找更正,現(xiàn)在懶得改了。。大家將就看吧。不過運(yùn)行是可以的)【問題描述】

設(shè)停車場(chǎng)是一個(gè)可停放n輛汽車的 長通道,且只有一個(gè)大門可供汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車信放在車場(chǎng)的最北端),若車場(chǎng)內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場(chǎng)內(nèi)某輛車要離開時(shí),在它之后進(jìn)入的車輛必須先退出車場(chǎng)為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場(chǎng)院,每輛停放在車場(chǎng)的車在它離開停車場(chǎng)時(shí)必須按它停留的時(shí)間長短交納費(fèi)用。試為停車場(chǎng)編制按上述要求進(jìn)行管理的模擬程序。【基本要求】

以棧模擬停車場(chǎng),以隊(duì)列模擬車場(chǎng)外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車“到達(dá)”或“離去”信息、汽車牌照號(hào)碼以及到達(dá)或離去的時(shí)刻。對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場(chǎng)內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場(chǎng)內(nèi)停留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留的時(shí)間不收費(fèi))。棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。【測(cè)試數(shù)據(jù)】

設(shè)n=2,輸入數(shù)據(jù)為:(A,1,5),(A,2,15),(A,3,20),(A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到達(dá)(Arrival);D表示離去(Departure);E表示輸入結(jié)束(End)。**************************【以下為類的定義】************************************* #include using namespace std;const int Max=2;//車庫最大容量

const double price=30;//每小時(shí)的費(fèi)用 //思想:(報(bào)告第四頁)

//我的系統(tǒng)界面,輸入信息為:(到達(dá)/離開/退出);車牌號(hào);時(shí)刻 //因此,我的停車場(chǎng)類分成車輛到達(dá)和車輛離開兩個(gè)主要的函數(shù)實(shí)現(xiàn)。//車輛到達(dá),有入棧和入隊(duì)。車輛離開有出棧,出隊(duì)和入棧操作。

//因此我又編寫入棧的類,隊(duì)的類。與parkingmanagement進(jìn)行友元。

//**************************************類定義*********************************************** class car//車的信息類

{ public: double time;//計(jì)費(fèi)時(shí)間 int number;//車牌號(hào)

car *next;//存放car類型元素的數(shù)組初始地址 };class carstack//棧(停車場(chǎng))的類

{ friend class parkingmanagement;//parkingmanagement能訪問carstack類中所有成員 public: carstack();//構(gòu)造函數(shù),棧的初始化 int empty();//判斷棧是否為空 int full();//判斷棧是否為滿

car *s;//存放car類型棧元素的數(shù)組初始地址 int top;//棧頂指針 };class carqueue//隊(duì)列(便道)的類

{ friend class parkingmanagement;//parkingmanagement能訪問carstack類中所有成員 public: carqueue();//構(gòu)造函數(shù),隊(duì)列的初始化 int full();//判斷隊(duì)列是否為滿 car *front,*rear;//存放car類型隊(duì)列元素的數(shù)組初始地址 };class parkingmanagement { public: int pushstack(carstack &cs,int cnum,double ctime);//入棧,cs棧內(nèi)進(jìn)行調(diào)整,返回棧內(nèi)位置 void popstack(carstack &cs,int cnum);//出棧,cs棧內(nèi)進(jìn)行調(diào)整,//根據(jù)車牌號(hào)把車彈出棧,將出棧car的number賦值給int popstacknumber()//將出棧car的time賦值給double popstacktime(),無返回值!

int pushqueue(carqueue &cq,int cnum,double ctime);//入隊(duì),隊(duì)內(nèi)進(jìn)行調(diào)整,返回隊(duì)內(nèi)位置 int popqueue(carqueue &cq);//出隊(duì),隊(duì)內(nèi)進(jìn)行調(diào)整,返回汽車車牌號(hào)

void arrival(carstack &cs,carqueue &cq,int cnum,double ctime);//車輛到達(dá),//根據(jù)輸入的車牌號(hào)、到達(dá)時(shí)間,變更函數(shù)參數(shù);并cout車位信息

void leave(carstack &cs,carqueue &cq,int cnum,double ctime);//車輛離開,//根據(jù)輸入的車牌號(hào)找到汽車,并進(jìn)行出棧操作、出隊(duì)操作和入棧操作; //并cout停留時(shí)間和收費(fèi)情況

void deletequeue(carqueue &cq,int i);//刪除cq過道中第i輛車 int popstacknumber;//專門存放出棧的時(shí)候返回的車牌號(hào) double popstacktime;//專門存放出棧的時(shí)候返回的時(shí)刻

};**********************************【以下為類的實(shí)現(xiàn)】************************************ carstack::carstack()//構(gòu)造函數(shù),棧的初始化 { top=-1;s=new car[Max];//創(chuàng)建car類型棧元素的數(shù)組 if(s==NULL){ cout<<“棧空間分配不成功!”<

cs.top++;(cs.s[cs.top]).number=cnum;//將cnum賦給棧頂位置的車的車牌號(hào),s是car類型棧元素的數(shù)組(cs.s[cs.top]).time=ctime;//將ctime賦給棧頂位置的車的入棧時(shí)間,s是car類型棧元素的數(shù)組 return(cs.top+1);//返回棧內(nèi)位置加1,即停車場(chǎng)內(nèi)車位從1號(hào)開始 } } void parkingmanagement::popstack(carstack &cs,int cnum)//出棧,cs棧內(nèi)進(jìn)行調(diào)整,//根據(jù)車牌號(hào)把車彈出棧,將出棧car的number賦值給int popstacknumber //將出棧car的time賦值給double popstacktime,無返回值!{ int i;car p;carstack stemp;//定義一個(gè)carstack類型的臨時(shí)存放出棧元素的棧

for(i=0;i<=cs.top;i++)if((cs.s[i]).number==cnum)break;//當(dāng)要出棧的車的車牌號(hào)=棧內(nèi)的車牌號(hào)元素時(shí),跳出循環(huán) p=cs.s[i];//將要出棧的元素賦給car類型的p存放

while(cs.top>i)stemp.s[++(stemp.top)]=cs.s[(cs.top)--];//出棧的元素?cái)?shù)組逐個(gè)賦給臨時(shí)棧 popstacknumber=p.number;//將這個(gè)車牌號(hào)信息傳給int popstacknumber()popstacktime=p.time;//將該車的時(shí)間信息傳給double popstacktime()cs.top--;//棧頂指針回到原來位置

while(stemp.top>=0)cs.s[++(cs.top)]=stemp.s[(stemp.top)--];//臨時(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用于記錄車在過道上的位置信息,因隊(duì)列為鏈?zhǔn)降模赃M(jìn)行循環(huán)累加 p=new car;//創(chuàng)建一個(gè)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)整,返回汽車車牌號(hào)

{ car p;p.number=((cq.front)->next)->number;//cq隊(duì)里,從cq.front開始指向下一個(gè)元素的車牌號(hào)賦給car類型的車信息 p.time=((cq.front)->next)->time;//cq隊(duì)里,從cq.front開始指向下一個(gè)元素的時(shí)刻 //賦給car類型的車信息

p.next=((cq.front)->next)->next;//cq隊(duì)里,從cq.front開始指向下一個(gè)元素的指針 //賦給car類型的車信息的下一個(gè)元素的指針 return p.number;cq.front=(cq.front)->next;} void parkingmanagement::arrival(carstack &cs,carqueue &cq,int cnum,double ctime)//車輛到達(dá),根據(jù)輸入的車牌號(hào)、到達(dá)時(shí)間,變更函數(shù)參數(shù);并cout車位信息 { int pos;if(!(cs.full()))//如果棧未滿,車輛停入停車場(chǎng) { int fl(0),i;//定義一個(gè)從0開始的標(biāo)記fl for(i=0;i<=cs.top;i++){ if(cs.s[i].number==cnum)//如果到達(dá)的車的車牌號(hào)=棧內(nèi)已有車輛的車牌號(hào) { fl=1;//fl記1 break;} } if(fl==1)//如果到達(dá)的車的車牌號(hào)!=棧內(nèi)已有車輛的車牌號(hào) cout<<“輸入錯(cuò)誤!請(qǐng)重新輸入!”<

cout<<“該停車場(chǎng)還有空位,請(qǐng)到”<

{ pos=pushqueue(cq,cnum,ctime);//入隊(duì),返回車位信息

cout<<“該停車場(chǎng)已滿,請(qǐng)將車停到便道”<

{ popstack(cs,cnum);//出棧操作

hour=ctime-popstacktime;//時(shí)間計(jì)算

outcarnum=popqueue(cq);//將便道上的第一輛車出隊(duì),入棧。并將其車牌號(hào)賦給outcarnum pstack=pushstack(cs,outcarnum,ctime);//將便道上的第一輛車,入棧

cout<<“該車在本停車場(chǎng)內(nèi)停留時(shí)間為”<

{ p=cq.front;while(p!=NULL){ count++;//如果在過道中找到該車,則該車的位置為過道中的第count位置(count從1開始)p=p->next;if(p->number==cnum)//在過道中找到要出去的車,則在隊(duì)列中刪除該car。//后面的車輛依然順序排列,補(bǔ)足空位

{ deletequeue(cq,count);if(count>Max){ cout<<“您的車在便道上的位置為”<

car *p,*q;int j(0);p=cq.front;while(p && jnext;j++;}//找到第i個(gè)節(jié)點(diǎn)(i從1開始)if(!p ||!p->next)cout<<“i不合法”;else { q=p->next;p->next=q->next;delete q;} } *******************************【以下是主程序】************************************ void print(){ cout<<“= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =”<>acc>>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 cout<<“您的輸入有誤,請(qǐng)重新輸入!”<

######【3】【停車場(chǎng)管理系統(tǒng)【方案二 程序】】

(ps:本方案與方案一有同樣的問題,就是在對(duì) 便道上的車 進(jìn)行駛離操作時(shí),數(shù)據(jù)錯(cuò)誤,同樣的理由,沒有改正。如果有細(xì)心娃娃幫忙指點(diǎn)改正,在此感激啦~)

*************************【以下為類定義】************************************ #include using namespace std;const int MaxSize=2;//停車場(chǎng)內(nèi)最多能停2輛車 template class carStack;// template //定義模板類

struct Node//過道停車的隊(duì)列所需鏈?zhǔn)浇Y(jié)點(diǎn) { T carnum;//定義車牌號(hào)類型

Node *next;//此處也可以省略 };template class carinfo {

friend class carStack;public: T carnum;//車號(hào)

int cartime;//停車時(shí)間 };

template class carQueue { friend class carStack;public: carQueue();//構(gòu)造函數(shù),初始化一個(gè)空的鏈隊(duì)列

int EnQueue(T cnum);//將元素x入隊(duì),并返回其在隊(duì)內(nèi)的位置(從1開始)T DeQueue();//將隊(duì)頭鏈?zhǔn)浇Y(jié)點(diǎn)出隊(duì),并返回汽車車牌號(hào)

void deletequeue(int i);//將隊(duì)內(nèi)低i個(gè)元素刪除,即便道上i位置的汽車駛離 bool Empty();//判斷鏈隊(duì)列是否為空 Node *front, *rear;};template class carStack { friend class carinfo;public: carStack();//構(gòu)造函數(shù),棧的初始化,停車場(chǎng)容量為【size】 void Pushcar(T cnum,int ctime);//有車停入停車場(chǎng)

int Popcar(T outcnum,int outctime);//將第cnum輛車出棧,并返回其停車時(shí)間(hour)bool full();//判斷棧是否為滿?滿則返回1 carinfo *S;//?? int top;};******************************【以下為類的實(shí)現(xiàn)】**************************************** template //初始化隊(duì)列 carQueue::carQueue(){ front=rear=NULL;} template int carQueue::EnQueue(T cnum)//車子進(jìn)入便道 { int i(0);Node *s,*p;//??

s=new Node;s->carnum=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=front;while(p!=NULL){ i++;p=p->next;}//i即車在過道上的位置,【從1開始計(jì)!!】 return i;}

template T carQueue::DeQueue(){ Node *p;if(front==NULL)cout<<“便道上沒車”;else { p=front;

front=front->next;//將隊(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){//建立一個(gè)最大尺寸為size的空棧

S=new carinfo[MaxSize];//創(chuàng)建存儲(chǔ)棧的數(shù)組 if(S==NULL)//分配不成功

{ cerr<<“動(dòng)態(tài)存儲(chǔ)失敗!”<

template void carStack::Pushcar(T cnum,int ctime){ if(top==MaxSize-1)cout<<“車場(chǎng)內(nèi)已停滿汽車”;else { S[++top].carnum=cnum;S[top].cartime=ctime;} }

template int carStack::Popcar(T outcnum,int outctime){ int i,hour;carStack Stemp;//建一個(gè)臨時(shí)模擬停車場(chǎng) int Stop=-1;for(i=0;i<=top;i++)if(outcnum==S[i].carnum)break;while(top>i)Stemp.S[++Stop]=S[top--];hour=outctime-S[top].cartime;return hour;top--;while(Stop>=0)S[++top]=Stemp.S[Stop--];} 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個(gè)結(jié)點(diǎn)(結(jié)點(diǎn)位置從1開始)if(!p||!p->next)cout<<“i不合法!”<next;p->next=q->next;delete q;} } ******************************【以下為主函數(shù)】***************************************

void outputpark()//系統(tǒng)功能選擇頁面,輸入泊車信息

{ cout<<“========================”< cs;carQueue cq;while(1){ outputpark();cin>>arrive>>carnum>>cartime;if(arrive=='A'){ if(cs.top!=MaxSize-1)//停車場(chǎng)內(nèi)有空位可以駛?cè)?/p>

{ cs.Pushcar(carnum,cartime);cout<<“請(qǐng)駛?cè)胪\噲?chǎng)的”<

Node *p;p=cq.front;while(p!=NULL){ if(p->carnum==carnum){ flagde=1;break;} pos++;p=p->next;} if(flagde){ cout<<“您的車停在便道上”<

第二篇:C++ 數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計(jì)報(bào)告 計(jì)算表達(dá)式

題目:計(jì)算表達(dá)式的值

1、問題描述

對(duì)于給定的一個(gè)表達(dá)式,表達(dá)式中可以包括常數(shù)、算術(shù)運(yùn)行符(“+”、“-”、“*”、“/”)和括號(hào),編寫程序計(jì)算表達(dá)式的值。

基本要求:從鍵盤輸入一個(gè)正確的中綴表達(dá)式,將中綴表達(dá)式轉(zhuǎn)換為對(duì)應(yīng)的后綴表達(dá)式,計(jì)算后綴表達(dá)式的值。

提高要求:(1)對(duì)于表達(dá)式中的簡單錯(cuò)誤,能夠給出提示;

(2)不僅提示錯(cuò)誤,也能給出錯(cuò)誤信息(3)表達(dá)式中可以包括單個(gè)字母表示的變量(4)能夠處理多種操作符(5)實(shí)現(xiàn)包含簡單運(yùn)算的計(jì)算器

(6)實(shí)現(xiàn)一個(gè)包含簡單運(yùn)算和函數(shù)運(yùn)算的計(jì)算器。

2.需求分析

軟件的基本功能:由鍵盤輸入中綴表達(dá)式,程序可以將輸入的中綴表達(dá)式轉(zhuǎn)換成對(duì)應(yīng)的后綴表達(dá)式,并計(jì)算后綴表達(dá)式的值。對(duì)于在輸入時(shí)發(fā)生的簡單錯(cuò)誤,程序可以給出提示。本程序支持整數(shù)、小數(shù)、多種操作數(shù)的處理,可以計(jì)算含加、減、乘、除、運(yùn)算符的表達(dá)式,并能判斷表達(dá)式括號(hào)是否匹配。輸入/輸出形式:用戶可以通過控制臺(tái),根據(jù)輸入提示。輸入形式:

①正確的不含字母變量的中綴表達(dá)式; ②含有簡單錯(cuò)誤的中綴表達(dá)式。

輸出形式:

①對(duì)于正確的中綴表達(dá)式,可以輸出其轉(zhuǎn)化后的后綴表達(dá)式及表達(dá)式的計(jì)算結(jié)果;

②對(duì)于含有簡單錯(cuò)誤的中綴表達(dá)式,程序?qū)⒆詣?dòng)輸出錯(cuò)誤提示,并給出錯(cuò)誤信息。

測(cè)試數(shù)據(jù)要求:用戶可以輸入一個(gè)符合要求的中綴表達(dá)式,也可以輸入一個(gè)包含簡單錯(cuò)誤的表達(dá)式。表達(dá)式中可以包括各種類型的常數(shù)以及小數(shù)等,操作符包括(+、-、*、/),同時(shí)表達(dá)式還可以包括各種括號(hào)。

3.概要設(shè)計(jì)

(1)抽象數(shù)據(jù)類型:

根據(jù)題目的要求,考慮用棧類型比較適合。ADT SeqStack Data 棧中元素具有相同類型及后進(jìn)先出特性,相鄰元素具有前驅(qū)和后繼關(guān)系 Operation SeqStack 前置條件:棧不存在

輸入:無

功能:棧的初始化

輸出:無

后置條件:構(gòu)造一個(gè)空棧 ~ SeqStack 前置條件:棧已存在輸入:無

功能:銷毀棧 輸出:無

后置條件:釋放棧所占用的存儲(chǔ)空間

Push 前置條件:棧已存在

輸入:元素值x 功能:在棧頂插入一個(gè)元素x 輸出:如果插入不成功,拋出異常

后置條件:如果插入成功,棧頂增加了一個(gè)元素 Pop 前置條件:棧已存在輸入:無

功能:刪除棧頂元素

輸出:如果刪除成功,返回被刪元素值,否則,拋出異常

后置條件:如果刪除成功,棧頂減少了一個(gè)元素 GetTop 前置條件:棧已存在

輸入:無

功能:讀取當(dāng)前的棧頂元素

輸出:若棧不空,返回當(dāng)前的棧頂元素值 后置條件:棧不變

Empty 前置條件:棧已存在輸入:無

功能:判斷棧是否為空

輸出:如果棧為空,返回1;否則,返回0 后置條件:棧不變

End ADT 4.詳細(xì)設(shè)計(jì)

(1)實(shí)現(xiàn)概要設(shè)計(jì)的數(shù)據(jù)類型:

采用順序棧

const int StackSize = 50;template //定義模板類SeqStack class SeqStack { public: SeqStack();//構(gòu)造函數(shù),棧的初始化

~SeqStack();//析構(gòu)函數(shù)

void Push(T x);//將元素x入棧

DataType Pop();

//將棧頂元素彈出

DataType GetTop();//取棧頂元素(并不刪除)

int Empty();//判斷棧是否為空

private:

DataType data[StackSize];//存放棧元素的數(shù)組

int top;//棧頂元素 };(2)主程序以及其它模塊的算法描述:

這個(gè)函數(shù)主要調(diào)用了實(shí)現(xiàn)功能的各個(gè)函數(shù)。其步驟為:在用戶沒有選擇退出時(shí),先調(diào)用輸入函數(shù),輸入中綴表達(dá)式;然后調(diào)用判斷表達(dá)式,如果中綴表達(dá)式錯(cuò)誤,則根據(jù)返回的值來輸出錯(cuò)誤提示,不再往下運(yùn)算;如果中綴表達(dá)式正確,則將中綴表達(dá)式轉(zhuǎn)換為后綴表達(dá)式,然后輸出中綴表達(dá)式和轉(zhuǎn)換后的后綴表達(dá)式;接著,再調(diào)用計(jì)算函數(shù),計(jì)算后綴表達(dá)式的結(jié)果輸出。最后是清屏函數(shù)。直至用戶選擇退出。

5、編碼與調(diào)試分析

編碼與調(diào)試過程中遇到的問題及解決辦法:

【問題1】程序在判斷表達(dá)式輸入形式有誤時(shí),考慮情況不周全。解決辦法:盡可能多的將表達(dá)式有誤的情況考慮在內(nèi)。以下為現(xiàn)已考慮到并解決的問題:①表達(dá)式中出現(xiàn)非數(shù)字或非運(yùn)算符的其他字符; ②表達(dá)式中括號(hào)不匹配。

【問題2】給變量賦值時(shí)出現(xiàn)重定義問題。

解決辦法:在定義暫存棧頂元素的變量t時(shí),應(yīng)該在函數(shù)外面定義,在函數(shù)里面給變量賦值時(shí)不能定義。【問題3】無法處理多位數(shù)和小數(shù)。

解決辦法:在連續(xù)的操作數(shù)結(jié)束之后插入空格到后綴表達(dá)式中,以分隔操作數(shù)。

解決此問題的核心代碼: int i,t=0;float sum=0;for(i=0;i

if(a[i]=='.'){

}

} t=i;break;if(t!=0){

} else {

} return sum;

2.待解決問題: for(i=0;i

} i++;for(;i

} sum=(a[i]-'0')*pow(0.1,i-t)+sum;if(a[i]=='.')break;sum=(a[i]-'0')*pow(10,n-(n-t)-1-i)+sum;for(i=0;i

6、使用說明

進(jìn)入菜單,根據(jù)提示進(jìn)行選擇。

7、測(cè)試結(jié)果

(1)含小數(shù)、多位數(shù)及括號(hào)的表達(dá)式顯示結(jié)果:

8、自學(xué)知識(shí)

在課程設(shè)計(jì)過程中,特別是在代碼編寫和調(diào)試的過程中,自學(xué)了很多新的知識(shí)。例如atof()函數(shù),包含于表頭文件 #include 。其功能是: 把字符串轉(zhuǎn)換成浮點(diǎn)數(shù)。具體的函數(shù)說明是: atof()會(huì)掃描參數(shù)nptr字符串,跳過前面的空格字符,直到遇上數(shù)字或正負(fù)符號(hào)才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時(shí)('

主站蜘蛛池模板: 日本一道综合久久aⅴ免费| 亚洲呦女专区| 国产爆乳无码一区二区麻豆| 亚洲精品久久国产精品浴池| 粉嫩被粗大进进出出视频| 97精品依人久久久大香线蕉97| 国产成人av无码精品| 色综合色狠狠天天综合色| 亚洲av无码不卡一区二区三区| 少妇无码av无码专区在线观看| 久久精品亚洲中文字幕无码网站| 超碰cao已满18进入离开官网| 在线天堂中文www官网| 日韩精品亚洲人成在线观看| 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲国产高清aⅴ视频| 麻豆精产一二三产区| 成人无码一区二区三区网站| 少妇高潮一区二区三区99| 久久久亚洲欧洲日产国码αv| 国产亚洲精品久久久久妲己| 亚洲精品国产第一区二区尤物| 天堂va欧美va亚洲va好看va| 日本少妇寂寞少妇aaa| 自拍偷自拍亚洲精品情侣| 激情伊人五月天久久综合| 欧美精品无码久久久久久| 美女露出奶头扒开尿口免费网站| 久久99国产精品二区| 伊人久久大香线蕉综合狠狠| 无码h肉动漫在线观看| 瑜伽裤国产一区二区三区| 免费无码又爽又刺激网站直播| 亚洲美女做爰av人体图片| 欧美国产亚洲日韩在线二区| 国产精品日韩专区第一页| 无码专区男人本色| 亚洲欧洲日产国码无码av一| 人妻有码av中文字幕久久琪| 大战丰满无码人妻50p| 无码aⅴ精品一区二区三区浪潮|