版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
實(shí)習(xí)指導(dǎo)[實(shí)習(xí)題目]:泊車場管理。[實(shí)習(xí)內(nèi)容]:第一,實(shí)現(xiàn)棧和行列的基本操作,在此基礎(chǔ)上,實(shí)現(xiàn)泊車場管理。泊車場管理問題描繪:設(shè)泊車場是一個可停放n輛車的狹長通道,且只有一個大門可供汽車出入。在泊車場內(nèi),汽車按抵達(dá)的先后序次,由北向南挨次擺列(假定大門在最南端)若車場內(nèi)已停滿n輛車,則以后的汽車需在門外的便道上等待,當(dāng)有車開走時,便道上的第一輛車即可開入。當(dāng)泊車場內(nèi)某輛車要走開時,在它以后進(jìn)入的車輛一定先退出車場為它讓路,待該輛車開出大門后,其余車輛再按原序次返回車場。每輛車走開泊車場時,應(yīng)按其停
。留時間的長短交費(fèi)(在便道上逗留的時間不收費(fèi))。試編寫程序,模擬上述管理過程。要求以次序棧模擬泊車場,以鏈行列模擬便道。從終端讀入汽車抵達(dá)或離開的數(shù)據(jù),每組數(shù)據(jù)包含三項(xiàng):①是“抵達(dá)”仍是“離開”;②汽車牌照號碼;③“抵達(dá)”或“離開”的時刻。與每組輸入信息相應(yīng)的輸出信息為:假如是抵達(dá)的車輛,則輸出其在泊車場中或便道上的地點(diǎn);假如是離開的車輛,則輸出其在泊車場中逗留的時間和應(yīng)交的花費(fèi)。(提示:需另設(shè)一個棧,暫時停放為讓路而從車場退出的車。)[實(shí)習(xí)目的]:經(jīng)過實(shí)習(xí),熟習(xí)棧和行列的基本特色,掌握利用棧和行列解決詳細(xì)問題的方法。[實(shí)習(xí)步驟]:1.實(shí)現(xiàn)次序棧的基本操作基本思路第一實(shí)現(xiàn)一個整型次序棧的初始化、判???、進(jìn)棧、出棧等基本操作,并在主程序中調(diào)用這些操作?;究蚣?include<>#defineTRUE1#defineFALSE0#defineStack_Size50typedefintStackElementType;typedefstruct{StackElementTypeelem[Stack_Size];inttop;}SeqStack;/*以下是函數(shù)原形說明。注意函數(shù)頭后邊有分號。*/voidInitStack(SeqStack*s);intIsEmpty(SeqStack*s);intPush(SeqStack*s,StackElementTypee);intPop(SeqStack*s,StackElementType*e);/*以下是函數(shù)定義。注意函數(shù)頭后邊無分號。*/voidInitStack(SeqStack*s)/*次序棧的初始化函數(shù)*/{;}intIsEmpty(SeqStack*s)/*次序棧的判??蘸瘮?shù)*/{;}intPush(SeqStack*s,StackElementTypee)/*次序棧的進(jìn)棧函數(shù)*/{;}StatusPop(SeqStack*s,StackElementType*e)/*次序棧的出棧函數(shù)*/{;}voidmain(void){;}重點(diǎn)提示主程序的基本過程以下:voidmain(void){SeqStackmy_stack;StackElementTypex;StackElementTypey;InitStack(&my_stack);if(IsEmpty(&my_stack))打?。骸癿y_stack已被初始化為空?!?提示輸入10個正整數(shù);循環(huán)10次,履行下邊操作:{讀入整數(shù)x;Push(&my_stack,x);}while(!IsEmpty(&my_stack)){Pop(&my_stack,&y);打印y;}}測試數(shù)據(jù)讀入數(shù)據(jù):19,14,23,01,68,20,84,27,55,11打印結(jié)果:讀入序列的逆序。2.同時實(shí)現(xiàn)次序棧和鏈行列的基本操作基本思路在前面已經(jīng)實(shí)現(xiàn)的整型次序棧的基礎(chǔ)上,進(jìn)一步實(shí)現(xiàn)一個整型鏈行列的基本操作?;究蚣?)在上述程序框架的前面,增添以下包含語句:#include<>2)在上述程序框架的種類定義部分,增添以下鏈行列定義:typedefintQueueElementType;typedefstructNode{QueueElementTypedata;structNode*next;/*
/*
數(shù)據(jù)域*/指針域
*/}LinkQueueNode;typedefstruct{LinkQueueNode*front;LinkQueueNode*rear;}LinkQueue;3)在上述程序框架的函數(shù)原型說明部分,增添以下鏈行列的操作函數(shù)原型說明:intInitQueue(LinkQueue*Q);intEmptyQueue(LinkQueueQ);intEnterQueue(LinkQueue*Q,QueueElementTypex);intDeleteQueue(LinkQueue*Q,QueueElementType*x);4)在上述程序框架的函數(shù)定義部分,增添上述鏈行列的操作函數(shù)定義。5)在上述程序框架的主程序中,增添調(diào)用鏈行列操作函數(shù)的相關(guān)語句。重點(diǎn)提示主程序的基本過程以下:voidmain(void){SeqStackmy_stack;LinkQueuemy_queue;intx;InitStack(&my_stack);InitQueue(&my_queue);if(IsEmpty(&my_stack))打?。骸皸榭铡?提示輸入10個正整數(shù);循環(huán)10次,履行下邊操作:{讀入整數(shù)x;Push(&my_stack,x);}while(!IsEmpty(&my_stack)){Pop(&my_stack,&x);將x加入行列my_queue;}while(行列my_queue非空){刪除my_queue的隊(duì)首元素,并送給x;打印x;}}注意指針參數(shù)的調(diào)用方法。測試數(shù)據(jù)讀入數(shù)據(jù):19,14,23,01,68,20,84,27,55,11打印結(jié)果:讀入序列的逆序。3.實(shí)現(xiàn)泊車場管理問題基本思路泊車場管理問題能夠用以下簡圖說明:車庫暫時退車道便道將“車庫”和“暫時退車道”定義為兩個棧,將“便道”定義為一個行列。在前面程序的基礎(chǔ)上,進(jìn)行以下改正:1)定義一個表示“車輛信息”的構(gòu)造體種類。2)將棧元素種類和行列元素種類均改為“車輛信息”構(gòu)造體指針種類(或“車輛信息”構(gòu)造體種類),并相應(yīng)改正相關(guān)函數(shù)。3)定義一個“車輛抵達(dá)辦理”函數(shù)和“車輛走開辦理”函數(shù)?;究蚣?)在上述程序框架的種類定義部分,增添一個表示“車輛信息”的構(gòu)造體種類定義,設(shè)置兩個數(shù)據(jù)域:牌照號碼、抵達(dá)時刻。牌照號碼用字符串表示,抵達(dá)時刻可先用正整數(shù)表示(參后邊測試數(shù)據(jù))。2)在上述程序框架的函數(shù)原型說明部分,增添“車輛抵達(dá)辦理”函數(shù)和“車輛走開辦理”函數(shù)的原型說明。3)在上述程序框架的函數(shù)定義部分,增添“車輛抵達(dá)辦理”函數(shù)和“車輛走開辦理”函數(shù)的函數(shù)定義。4)為了簡化參數(shù)傳達(dá),能夠先將相關(guān)的棧和行列定義為全局變量,調(diào)通后再改為用參數(shù)傳達(dá)。重點(diǎn)提示主程序的基本過程以下:voidmain(void){重復(fù)以下過程,直到讀入結(jié)束標(biāo)記:{提示輸入一輛車的信息(抵達(dá)/走開,牌照號碼,目前時刻);讀入這輛車的信息;假如是抵達(dá)車輛,則調(diào)用“車輛抵達(dá)辦理”函數(shù);不然調(diào)用“車輛走開辦理”函數(shù)。}}“車輛走開辦理”函數(shù)的基本過程以下:voidleave(牌照號碼,走開時刻){當(dāng)“車庫”棧不空,而且棧頂車輛不是要走開的車時,重復(fù)下邊操作:{將“車庫”棧的棧頂車輛退出;讓退出的車輛進(jìn)入“暫時退車道”棧;}假如找到要走開的車輛,則計算并輸出泊車花費(fèi);將“暫時退車道”棧中的車輛倒回“車庫”棧;假如“便道”行列不空,則隊(duì)頭車輛出隊(duì),并進(jìn)入“車庫”棧;}注意將“出隊(duì)車輛”的抵達(dá)時刻改為“走開車輛”的走開時刻。測試數(shù)據(jù)假定用0表示車輛走開,1表示車輛抵達(dá),-1表示程序結(jié)束;用字符串表示車輛的牌照號碼;用正整數(shù)表示時刻,每單位時間的泊車花費(fèi)是5元;泊車場大小n=2。則運(yùn)轉(zhuǎn)結(jié)果如下:輸入數(shù)據(jù):1,A001,5輸出結(jié)果:A001目前停放在車庫1號位輸入數(shù)據(jù):1,B002,10輸出結(jié)果:B002目前停放在車庫2號位輸入數(shù)據(jù):0,A001,15輸出結(jié)果:A001停放時間為10,泊車花費(fèi)為50元輸入數(shù)據(jù):1,C003,20輸出結(jié)果:C003目前停放在車庫2號位輸入數(shù)據(jù):1,D004,25輸出結(jié)果:D004目前停放在便道1號位輸入數(shù)據(jù):1,E005,30輸出結(jié)果:E005目前停放在便道2號位輸入數(shù)據(jù):0,B002,35輸出結(jié)果:B002停放時間為25,泊車花費(fèi)為125元便道上的D004進(jìn)入車庫,入庫時刻為35,目前停放在車庫2號位輸入數(shù)據(jù):0,D004,40輸出結(jié)果:D004停放時間為5,泊車花費(fèi)為25元便道上的E005進(jìn)入車庫,入庫時刻為40,目前停放在車庫輸入數(shù)據(jù):-1,#000,0輸出結(jié)果:目前車庫中還有2輛車,便道上無車。再會!
2號位[改良建議]:1.每次輸出結(jié)果中,打印整個車庫和整個便道的目前泊車狀況一覽表。2.將車庫”棧、“暫時退車道”棧改為對頂棧,共享同一空間。3.依據(jù)車輛種類,分別收費(fèi)。4.便道上的車能夠直接開走,此時排在它前面的車要挨次開出,并排到隊(duì)尾。5.停放在便道上的車也收費(fèi),但收費(fèi)標(biāo)準(zhǔn)較低。6.將時間改為時、分表示法。7.抵達(dá)時刻和走開時刻采納本機(jī)系統(tǒng)時間。8.用隨機(jī)數(shù)模擬車輛抵達(dá)間隔和泊車時間。9.用動畫演示運(yùn)轉(zhuǎn)過程。源代碼:#include<>#include<>#include""#defineTRUE1#defineFALSE0#defineStack_Size2/**************車輛信息******************/typedefstructCar{charNumber[10];inttime;/*
/*
車牌號*/抵達(dá)時刻*/}Car;/******************車庫棧定義**********************/typedefstruct{Carelem[Stack_Size];inttop;}SeqStack;/******************暫退車道棧定義**********************/typedefstruct{Carelem2[Stack_Size];inttop2;}SeqStack2;/*****************行列定義******************/typedefstructNode{Cardata;/*數(shù)據(jù)域structNode*next;/*
*/
指針域
*/}LinkQueueNode;typedefstruct{LinkQueueNode*front;LinkQueueNode*rear;intlength;}LinkQueue;/*以下是函數(shù)原形說明。注意函數(shù)頭后邊有分號。*/voidInitStack(SeqStack*s);intIsEmpty(SeqStack*s);intPush(SeqStack*s,Care);intPop(SeqStack*s,Car*e);intInitQueue(LinkQueue*Q);intEmptyQueue(LinkQueueQ);intEnterQueue(LinkQueue*Q,Carx);intDeleteQueue(LinkQueue*Q,Car*x);intCarArrive(SeqStack*s,LinkQueue*Q,charnum[],intarrivetime);intCarLeave(SeqStack*s,LinkQueue*Q,SeqStack*s2,char[],intleavetime);/**********以下是函數(shù)定義。注意函數(shù)頭后邊無分號。********/voidInitStack(SeqStack*s)/*次序棧的初始化函數(shù)*/{s->top=-1;}intIsEmpty(SeqStack*s)/*次序棧的判棧空函數(shù)*/{if(s->top==-1)return(TRUE);elsereturn(FALSE);}intIsFull(SeqStack*s)/*次序棧的判棧滿函數(shù)*/{if(s->top==Stack_Size)return(TRUE);elsereturn(FALSE);}intPush(SeqStack*s,Car*e)/*次序棧的進(jìn)棧函數(shù)*/{if(s->top==Stack_Size-1)return(FALSE);else{s->top++;s->elem[s->top]=*e;return(TRUE);}}intPop(SeqStack*s,Car*e)/*次序棧的出棧函數(shù)*/{if(s->top==-1)return(FALSE);else{*e=s->elem[s->top];s->top--;return(TRUE);}}intInitQueue(LinkQueue*Q)/*鏈行列的初始化*/{Q->length=0;Q->front=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));if(Q->front!=NULL){Q->rear=Q->front;Q->front->next=NULL;return(TRUE);}elsereturn(FALSE);/*溢出*/}intEmptyQueue(LinkQueue*Q)/*鏈行列的判空*/{if(Q->front==Q->rear)return(TRUE);elsereturn(FALSE);}intEnterQueue(LinkQueue*Q,Car*x)/*鏈行列的入隊(duì)操作,將數(shù)據(jù)元素x插入到行列中*/{LinkQueueNode*NewNode;NewNode=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));if(NewNode!=NULL){NewNode->data=*x;NewNode->next=NULL;Q->rear->next=NewNode;Q->rear=NewNode;Q->length++;return(TRUE);}elsereturn(FALSE);umber,num)))當(dāng)"車庫"棧不空,而且棧頂車輛不是要走開的車時,重復(fù)下邊操作:{將"車庫"棧的棧頂車輛退出;Pop(s,Acar);讓退出的車輛進(jìn)入"暫時退車道"棧;Push(&s2,Acar);}假如找到要走開的車輛,則計算并輸出泊車花費(fèi);Pop(s,Acar);parktime=leavetime-Acar->time;money=5*parktime;printf("-------------------------------------\n");printf("%s的泊車時間為%d,泊車花費(fèi)為%d\n",num,parktime,money);將"暫時退車道"棧中的車輛倒回"車庫"棧;while(!IsEmpty(&s2)){Pop(&s2,Acar);Push(s,Acar);}假如"便道"行列不空,則隊(duì)頭車輛出隊(duì),并進(jìn)入"車庫"棧;if(!EmptyQueue(Q)){Car*Bcar;//出便道進(jìn)車庫的車Bcar=(Car*)malloc(sizeof(Car));DeleteQueue(Q,Bcar);Bcar->time=leavetime;//將"出隊(duì)車輛"的抵達(dá)時刻改為"走開車輛"的走開時刻。Push(s,Bcar);printf("便道上的%s進(jìn)入車庫,入庫時刻為%d,目前停放在車庫%d號位\n",Bcar->Number,Bcar->time,s->top+1);}}/***********************車庫泊車狀況一覽表函數(shù)*******************************************/voidprintfstack(SeqStacks){Car*Ccar;Ccar=(Car*)malloc(sizeof(Car));if==-1)printf("車庫無車\n");else{while!=-1){*Ccar=[];;printf("%s%d\n",Ccar->Number,Ccar->time);}//endwhile}//ENDELSE}/***********************便道泊車狀況一覽表函數(shù)*******************************************/intprintfQueen(LinkQueueQ){Car*Dcar;Dcar=(Car*)malloc(sizeof(Car));LinkQueueNode*p;p=>next;if=={printf("便道無車\n");return(FALSE);}while!={*Dcar=p->data;if==p)/*假如對中只有一個元素p,則p出對后成為空隊(duì)*/=;printf("%s%d\n",Dcar->Number,Dcar->time);p=p->next;free(p);/*開釋儲存空間*/}return(TRUE);}/***************************
主
函
數(shù)**************************************************/voidmain(void){charch;SeqStackmy_stack;LinkQueuemy_queue;InitStack(&my_stack);InitQueue(&my_queue);while(1){intt;printf("*************************************\n");printf("
WELCO
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026秋招:內(nèi)蒙古交通集團(tuán)面試題及答案
- 2026秋招:龍煤礦業(yè)控股集團(tuán)試題及答案
- 2026秋招:遼寧控股集團(tuán)試題及答案
- 2026秋招:聯(lián)塑科技筆試題及答案
- 2026秋招:精工控股集團(tuán)面試題及答案
- 2026秋招:金螳螂企業(yè)集團(tuán)筆試題及答案
- 2026秋招:江西農(nóng)業(yè)發(fā)展集團(tuán)面試題及答案
- 2026秋招:江蘇惠隆資產(chǎn)管理公司 面試題及答案
- 做賬實(shí)操-中醫(yī)院公司會計賬務(wù)處理分錄
- 數(shù)學(xué)方程式編輯指南細(xì)則
- 礦產(chǎn)企業(yè)管理辦法
- 2025秋季學(xué)期國開電大專本科《經(jīng)濟(jì)法學(xué)》期末紙質(zhì)考試名詞解釋題庫珍藏版
- 建筑設(shè)計防火規(guī)范-實(shí)施指南
- 2025國開《中國古代文學(xué)(下)》形考任務(wù)1234答案
- 肺部感染中醫(yī)護(hù)理
- 租地合同協(xié)議書合同
- 《肺炎的CT表現(xiàn)》課件
- 糧食倉儲設(shè)施建設(shè)維修資金申請報告
- 腦器質(zhì)性精神障礙護(hù)理查房
- 中考英語聽力命題研究與解題策略省公開課金獎全國賽課一等獎微課獲獎?wù)n件
- 物聯(lián)網(wǎng)智能家居設(shè)備智能控制手冊
評論
0/150
提交評論