栈和队列停车场管理系统c语言代码
时间: 2023-11-08 08:05:24 浏览: 270
这个停车场管理系统是基于C语言数据结构中栈和队列思想的,以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码、到达或离去的时刻。这个系统的基本要求是要求以顺序栈模拟停车场,以链队列模拟便道。具体的算法思想如下:
1.车辆停入停车场的流程:首先判断停车场的车位是否停满。两种情况:(1)停满时此时后来的车辆只能停在走道上 (2)未停满时后来的车辆继续入栈。
2.车辆出站的思想。两种情况:(1)车辆在栈顶时,此时直接出栈而用不到辅助栈(2)车辆不在车顶时排在前面的车辆必须让位,此时它才能出栈,算法思想是首先根据输入的车牌号进行在栈中搜索,返还一个角标,根据角标来,找到出栈的车辆,这时前面的车辆入辅助栈,当循环的目标车辆时,这时不需要入辅助栈,直接出栈即可!
总体结构思路如下:这时车位停满的情况,若非栈顶出栈则需要把他前面的车让位进辅助栈,当目标车出栈的再回来。
以下是一个简单的栈和队列停车场管理系统C语言代码的范例,仅供参考:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
#define MAXCAR 20
#define PRICE 1
typedef struct{
char num[10];
int time;
}Car;
typedef struct{
Car stack[MAXSIZE];
int top;
}Stack;
typedef struct{
Car queue[MAXSIZE];
int front,rear;
}Queue;
Stack park;
Queue road;
void InitStack(Stack *s){
s->top=-1;
}
int IsFull(Stack *s){
if(s->top==MAXSIZE-1)
return 1;
else
return 0;
}
int IsEmpty(Stack *s){
if(s->top==-1)
return 1;
else
return 0;
}
void Push(Stack *s,Car c){
if(IsFull(s)){
printf("停车场已满!\n");
return;
}
s->top++;
s->stack[s->top]=c;
}
Car Pop(Stack *s){
Car temp;
if(IsEmpty(s)){
printf("停车场已空!\n");
temp.num[0]='\0';
temp.time=-1;
return temp;
}
temp=s->stack[s->top];
s->top--;
return temp;
}
void InitQueue(Queue *q){
q->front=q->rear=0;
}
int IsQueueFull(Queue *q){
if((q->rear+1)%MAXSIZE==q->front)
return 1;
else
return 0;
}
int IsQueueEmpty(Queue *q){
if(q->front==q->rear)
return 1;
else
return 0;
}
void InQueue(Queue *q,Car c){
if(IsQueueFull(q)){
printf("便道已满!\n");
return;
}
q->queue[q->rear]=c;
q->rear=(q->rear+1)%MAXSIZE;
}
Car OutQueue(Queue *q){
Car temp;
if(IsQueueEmpty(q)){
printf("便道已空!\n");
temp.num[0]='\0';
temp.time=-1;
return temp;
}
temp=q->queue[q->front];
q->front=(q->front+1)%MAXSIZE;
return temp;
}
void Arrive(){
Car temp;
printf("请输入车牌号和到达时间:\n");
scanf("%s%d",temp.num,&temp.time);
if(park.top<MAXCAR-1){
Push(&park,temp);
printf("停车成功!\n");
}
else{
InQueue(&road,temp);
printf("停车场已满,停在便道上!\n");
}
}
void Leave(){
Car temp;
int time,cost,i,flag=0;
printf("请输入车牌号和离开时间:\n");
scanf("%s%d",temp.num,&time);
while(!IsEmpty(&park)){
temp=Pop(&park);
if(strcmp(temp.num,num)==0){
flag=1;
cost=(time-temp.time)*PRICE;
printf("停车时间为%d小时,应缴纳停车费%d元!\n",time-temp.time,cost);
for(i=0;i<park.top;i++){
Push(&park,Pop(&park));
}
return;
}
else{
Push(&road,temp);
}
}
if(flag==0){
printf("未找到该车辆!\n");
return;
}
while(!IsEmpty(&road)){
Push(&park,OutQueue(&road));
}
}
void List(){
int i;
if(IsEmpty(&park)){
printf("停车场为空!\n");
return;
}
printf("停车场:\n");
for(i=park.top;i>=0;i--){
printf("%s %d\n",park.stack[i].num,park.stack[i].time);
}
if(IsQueueEmpty(&road)){
printf("便道为空!\n");
return;
}
printf("便道:\n");
for(i=road.front;i!=road.rear;i=(i+1)%MAXSIZE){
printf("%s %d\n",road.queue[i].num,road.queue[i].time);
}
}
int main(){
int choice;
InitStack(&park);
InitQueue(&road);
while(1){
printf("停车场管理系统\n");
printf("1.车辆到达\n");
printf("2.车辆离开\n");
printf("3.显示车辆信息\n");
printf("4.退出系统\n");
printf("请输入操作编号:\n");
scanf("%d",&choice);
switch(choice){
case 1:Arrive();break;
case 2:Leave();break;
case 3:List();break;
case 4:exit(0);
default:printf("输入有误,请重新输入!\n");
}
}
return 0;
}
```
阅读全文