您好,登錄后才能下訂單哦!
這篇文章主要介紹了C語言怎么實(shí)現(xiàn)停車場管理的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇C語言怎么實(shí)現(xiàn)停車場管理文章都會(huì)有所收獲,下面我們一起來看看吧。
1.問題描述
停車場內(nèi)只有一個(gè)可停放n輛汽車的狹長通道,且只有一個(gè)大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停放在停車場的最北端),若車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時(shí),在它之后開入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其它車輛再按原次序進(jìn)入車場,每輛停放在車場的車在它離開停車場時(shí)必須按它停留的時(shí)間長短交納費(fèi)用。試為停車場編制按上述要求進(jìn)行管理的模擬程序。
2.基本要求
(1)以棧模擬停車場,以隊(duì)列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模擬管理。
(2)每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車“到達(dá)”或“離去”信息、汽車牌照號(hào)碼及到達(dá)或離去的時(shí)刻,對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出數(shù)據(jù)為:若是車輛到達(dá),則輸出汽車在停車場內(nèi)或便道上的停車位置;若是車離去;則輸出汽車在停車場內(nèi)停留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留的時(shí)間不收費(fèi))。
(3)棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。
(4)按照題意要求獨(dú)立進(jìn)行設(shè)計(jì),設(shè)計(jì)結(jié)束后按要求寫出設(shè)計(jì)報(bào)告。
#include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef int ElemType; #define MaxSize 100 #define QNODE struct QNode typedef struct Node //車輛信息 { char AL; int NO; int time; }Node; typedef struct Stack //棧定義 { struct Node data[MaxSize]; int top; int num; }SqStack; QNODE //隊(duì)列節(jié)點(diǎn) { struct Node data; QNODE *next; }; typedef struct linkqueue //隊(duì)列結(jié)構(gòu)體定義 { QNODE *front,*rear; int num; }LinkQueue; SqStack *Init_SeqStack() //置空棧 { SqStack *s; s=(SqStack*)malloc(sizeof(SqStack)); s->top=-1; s->num=0; return s; } LinkQueue *Init_LQueue() //創(chuàng)建空隊(duì)列 { LinkQueue *q; QNODE *p; q=(LinkQueue*)malloc(sizeof(LinkQueue)); p=(QNODE*)malloc(sizeof(QNODE)); p->next=NULL; q->front=q->rear=p; q->num=0; return q; } int ISEmpty_SeqStack(SqStack *s) //判斷棧是否為空,棧為空返回1 { if(s->top ==-1) return 1; else return 0; } int ISFULL_SeqStack(SqStack *s,int n) //判斷棧是否已滿,若棧滿返回1 { if(s->top==n-1) return 1; else return 0; } int ISEmpty_LQueue(LinkQueue *q) //判斷隊(duì)列是否為空,隊(duì)列為空返回1 { if(q->front==q->rear) return 1; else return 0; } void IN_Lqueue( LinkQueue *q,struct Node s) //入隊(duì) { QNODE *p; p=(QNODE*)malloc(sizeof(QNODE)); p->data=s; q->num++; p->next=NULL; q->rear->next =p; q->rear =p; } void Push_SeqStack(SqStack *p,struct Node s) //入棧 { p->top ++; p->data[p->top]=s; p->num++; } int POP_SeqStack(SqStack *s,struct Node car)//出棧 { SqStack *p; int t; p=Init_SeqStack(); while(s->data[s->top].NO !=car.NO)//找到車牌號(hào)為P.NO的車, { Push_SeqStack(p,s->data[s->top]); s->top--; s->num--; } t=car.time-s->data[s->top].time; s->top--; s->num--; while(ISEmpty_SeqStack(p)==0) { Push_SeqStack(s,p->data[p->top]); p->top--; p->num--; } return t; } struct Node Out_LQueue(LinkQueue *q) //出隊(duì) { QNODE *p; p=q->front->next; q->front->next=p->next; q->num --; if( q->front->next==NULL) q->rear=q->front; return p->data; free(p); } int main() { SqStack *parkstack; //parkstack為表示停車場的棧 LinkQueue *parkqueue; //parkqueue為表示便道的隊(duì)列 struct Node car; int n,a=0,t; //n為停車場棧的最大容量 float f; //f為每小時(shí)收費(fèi) parkstack=Init_SeqStack(); parkqueue=Init_LQueue(); //初始界面 printf("***************停車場信息查詢***************\n"); printf("請(qǐng)輸入停車場最大容量n="); scanf("%d",&n); printf("\n請(qǐng)輸入每分鐘收取費(fèi)用f="); scanf("%f",&f); printf("\n請(qǐng)輸入車輛信息\n"); scanf("%c,%d,%d",&car.AL,&car.NO,&car.time); while(car.AL!='Q') { if(car.AL=='A' ) { // 汽車到達(dá)的情況 if(ISFULL_SeqStack(parkstack,n)==1) //棧滿的情況 { IN_Lqueue(parkqueue,car); //進(jìn)入隊(duì)列等待 printf("這輛車在門外便道上第%d個(gè)位置\n",parkqueue->num); printf("\n"); printf("請(qǐng)輸入車輛信息\n"); } else { Push_SeqStack(parkstack,car); //入棧 printf("這輛車在停車場內(nèi)第%d個(gè)位置\n",parkstack->num); printf("\n"); printf("請(qǐng)輸入車輛信息\n"); } } if(car.AL=='L' ) //汽車離開的情況 { t=POP_SeqStack(parkstack,car);//出棧 printf("這輛車停留時(shí)間為%d,收費(fèi)為%f。\n",t,f*t); printf("\n"); printf("請(qǐng)輸入車輛信息\n"); if(ISEmpty_LQueue(parkqueue)==0) //隊(duì)列不為空需要進(jìn)棧 Push_SeqStack(parkstack,Out_LQueue(parkqueue) ); } if(car.AL=='P'&&car.NO==0&&car.time==0 )//顯示停車場的車數(shù) { printf("停車場的車數(shù)為%d\n",parkstack->num); printf("\n"); printf("請(qǐng)輸入車輛信息\n"); } if(car.AL=='W'&&car.NO==0&&car.time==0 )//顯示候車場的車數(shù) { printf("候車場的車數(shù)為%d\n",parkqueue->num); printf("\n"); printf("請(qǐng)輸入車輛信息\n"); } scanf("%c,%d,%d",&car.AL,&car.NO,&car.time); } printf("輸入結(jié)束\n"); return 1; }
關(guān)鍵字:A——arrive;L——leave;P——park;Q——quit;W——wait.
關(guān)于“C語言怎么實(shí)現(xiàn)停車場管理”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“C語言怎么實(shí)現(xiàn)停車場管理”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。