📄 tingchechang.cpp
字号:
#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#define PERHOUR 10
#define N 100
#define OK 1
#define OVERFLOW -2
#define ERROR 0
#define CARNUM 2
typedef int ElemType;
typedef int Status;
struct{
int number;
int time;
int flag;
}car[N];
typedef struct{
ElemType *base;
ElemType *top;
int stacksize;
}Stack;/* 构造两个栈,一个为模拟停车场的栈,一个为辅助栈 */
typedef struct QNode{
ElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue;/* 构造一个队列模拟车场外的便道 */
Stack ZS;/* 定义栈ZS */
Stack VS;/* 定义栈VS */
LinkQueue Q;/* 定义队列Q */
QueuePtr p;
int a,b,c,i=0,r;
ElemType e;
int InitStack(Stack *S);
int InitQueue(LinkQueue *Q);
int GetTop(Stack S,ElemType *e);
int Push(Stack *S,ElemType e);
int Pop(Stack *S,ElemType *e);
int EnQueue(LinkQueue *Q,ElemType e);
int DeQueue(LinkQueue *Q,ElemType *e);
void Exchange(ElemType e);
int In(ElemType e);
int In1(ElemType e);
int InitStack(Stack *S){
S->base=(ElemType*)malloc(CARNUM*sizeof(ElemType));
if(!S->base) exit(OVERFLOW);
S->top=S->base;
S->stacksize=CARNUM;
return OK;
}//构造栈
int InitQueue(LinkQueue *Q){
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q->front) exit(OVERFLOW);
Q->front->next=NULL;
return OK;
}/* 构造一个模拟场外便道的队列 */
int GetTop(Stack S,ElemType *e){
if(S.top==S.base) {
*e=0;
return ERROR;}
*e=*(S.top-1);
return(*e);
} /*GetTop*/
int Push(Stack *S,ElemType e){
if((S->top-S->base)>=CARNUM)
EnQueue(&Q,e); /* 栈满,后来的车去便道等候 */
else
*S->top++=e;
return OK;
}/* 一辆车入停车场 */
int Pop(Stack *S,ElemType *e){
if(S->top==S->base) return ERROR;
*e=*--S->top;
return OK;
}/* 一辆车出停车场 */
int EnQueue(LinkQueue *Q,ElemType e){
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);
p->data=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
printf("车牌号为%d的车进入了便道\n",b);
return OK;
}/* 当停车场满后入的车进便道 */
int DeQueue(LinkQueue *Q,ElemType *e){
int j;
if(Q->front==Q->rear) return ERROR;
p=Q->front->next;
*e=p->data;
Q->front->next=p->next;
if(Q->rear==p) Q->rear=Q->front;
free(p);
j=*e;
printf("车牌号为%d的车退出了便道进入车场\n",j);
return(OK);
}/* 当停车场有一辆车出栈时便道的一辆车进停车场 */
void Exchange(ElemType e){
int money;
while(In(e)){
Pop(&ZS,&e);/* ZS的栈顶车出栈 */
Push(&VS,e);/* 从ZS出栈的车进VS */
}/* while */
Pop(&ZS,&e);/* 第b辆车开出停车场 */
for(r=0;r<i;r++){
if(b==car[r].number && car[r].flag==0)
{
money=c-car[r].time;
money=money*PERHOUR;
car[r].flag=1;
printf("你的停车费用是:%d元,欢迎下次再来.祝你一路顺风\n",money);printf("\n");}
}/* 出栈时计算出要付的钱 */
while(In1(e)){
Pop(&VS,&e);
Push(&ZS,e);
}/* 进入辅助栈的车开回停车场 */
if(Q.front!=Q.rear)
{DeQueue(&Q,&e);
Push(&ZS,e);}/* 从便道上的对头车进入停车场 */
}
int In(ElemType e){
GetTop(ZS,&e);
if(e==b)
return 0;
else
return OK;
}/* 判断出栈的车是否在盏顶 */
int In1(ElemType e){
GetTop(VS,&e);
if(e==0) return 0;
else
return OK;
}
main()
{
InitStack(&ZS); /* 构造一个模拟停车场的空栈ZS */
InitStack(&VS); /* 构造一个空的辅助栈VS */
InitQueue(&Q); /* 构造一个模拟场外便道的队列 */
printf("*-*-*-*-*欢迎来到停车场管理系统*-*-*-*-*\n");
printf("\n");
printf("本停车场收费标准是每小时10元,在便道上不收费用\n");
printf("\n");
printf("------请按提示操作--------\n");
printf("\n");
printf("A.到达,车牌号登记,到达时间\nD.离去,要离去车的车牌号,离去时间\nE.输入结束\n");
printf("\n");
printf("请按顺序输入操作先输入要进入还是离开停车场,然后是车牌号码,最后是进入离开时间\n");
printf("\n");
printf("例如: 5时刻进入一号车到停车场: A,1,5\n");
while(1){
printf("-------请输入你要的操作-----------\n");
scanf("%c,%d,%d",&a,&b,&c);
getchar();//接收回车键
car[i].number=b;
car[i].time=c;
car[i].flag=0;//在队列时的车辆作标析,为了在便道上不收费
if(a=='E') break;/* 选择E则退出操作 */
if(a=='A') {
printf("你的操作是车牌号为%d的车在%d时刻进入停车场\n",b,c);
Push(&ZS,b);}/* 选择A则停车 */
if(a=='D') {
printf("你的操作是车牌号为%d的车在%d时刻离开停车场\n",b,c);printf("\n");
Exchange(e);car[i].flag=1;}/* 选择D则离开停车场 */
i++;
}
}/* main()函数结束 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -