停车场问题
来源:互联网 发布:家装软件 编辑:程序博客网 时间:2024/04/20 04:51
#include < stdio.h >
#include < stdlib.h >
#include < malloc.h >
int Mark=0;
typedef struct stack
{//定义停车场数据类型
int *base;
int *top;
int stacksize;
}stack;//完成停车堆栈数据类型定义
void InitStack ( stack &s )
{//构造一个空栈s
s.base = (int *) malloc (s.stacksize * sizeof(stack));
if(!s.base) exit(1);//分配空间失败
s.top = s.base;
}//完成空堆栈的构造
void Push( stack &s , int e , int f)
{//插入一辆新车进入停车场
s.base = (int *) realloc (s.base , (s.stacksize +2) * sizeof(stack));
if(!s.base) exit(1);//分配空间失败
s.top = s.base + s.stacksize ;
s.stacksize += 2;
* s.top++ = e;
* s.top++ = f;
}//完成压入一个元素的操作
void Pop( stack &s , int &e , int &f)
{//若停车场不空,则删除S的栈顶元素,用e返回车牌号,用f返回进入停车场的时间
if(s.top == s.base)
{
printf("ERROR/n");
exit(1);
}
f=* --s.top;
e=* --s.top;
}//完成弹出一个元素的操作
typedef struct queue
{//定义便道的数据类型
int carnum;
int time;
queue *next;
}queue;//完成便道的数据类型定义并重命名
typedef struct
{//定义指针
queue *front;
queue *rear;
}linkqueue;//完成便道的指针创建
void InitQueue(linkqueue &Q)
{//构造一个空的队列Q
Q.front = Q.rear = (queue *)malloc(sizeof(queue));
if(!Q.front)
exit(1);//分配空间失败
Q.front->next = NULL ;
}//空队列Q创建完毕
void EnQueue(linkqueue &Q, int e, int f)
{//插入新元素到Q的队尾作为新的队尾元素
queue *p;
p = (queue *)malloc(sizeof(queue));
if(!p)
exit(1);//分配空间失败
p->carnum = e;
p->time = f;
p->next=NULL;
Q.rear->next = p;
Q.rear = p;
Mark++;
}//完成进入便道的操作
void DeQueue(linkqueue &Q,int &e,int &f)
{//若队伍不空,则队头元素出队
queue *p;
p = (queue *)malloc(sizeof(queue));
if(Q.front == Q.rear)exit(1);//分配空间失败
p = Q.front->next;
e = p->carnum;
f = p->time;
Q.front->next = p->next;
if(Q.rear == p)
Q.rear=Q.front;
free(p);
Mark--;
}//完成驶出便道操作
int main()
{
int I;//停车场容量
int carnum;//车牌号码
int time;//进入时间
char ch;//操作要求
int J;//设置便道标志
int i;//循环计数器
int Marks;//便道标志位
printf("请输入停车场容量: ");
scanf("%d" , &I);
printf("/n");
printf("请输入操作要求: ");
getchar();
scanf("%c" , &ch);
stack S1;
S1.stacksize=1;
stack S2;
S2.stacksize=1;
linkqueue Q2;
InitStack(S1);//完成队列堆栈的初始化
InitStack(S2);
InitQueue(Q2);
J=0;
Marks=0;
while(ch!='E')
{
switch(ch)
{
case 'A':
case 'a':
printf("/n请输入车牌号码:");
scanf(" %d",&carnum);
printf("/n请输入进入停车场的时间:");
scanf(" %d",&time);
if(I!=0)//判断堆栈是否已满
{
Push(S1,carnum,time);//压入车辆
I--;
printf("/n您的车辆已经进入停车场内,并开始计费!/n");
break;
}
else
{
EnQueue( Q2,carnum,time);
J++;
printf("/n车辆停留在便道,不收取费用!/n");
break;
}
case 'D':
case 'd':
printf("/n请输入要开走的车辆的车牌号码:");
scanf("%d", &carnum);
printf("/n请确认当前时刻: ");
scanf("%d",&time);
int comcarnum;//比较车牌信息
int comtime;//比较时间信息
Pop(S1,comcarnum,comtime);
I++;
if(comcarnum == carnum)
{
printf("/n停车时间为:%d分钟/n",time - comtime);
if(J>=1)
{
DeQueue(Q2,comcarnum,comtime);
comtime = time;
J--;
Push(S1,comcarnum,comtime);
I--;
break;
}
else
break;
}
Push(S2,comcarnum,comtime);
Pop(S1,comcarnum,comtime);
I++;
if(comcarnum == carnum)
{
printf("/n停车时间为:%d/n",time - comtime);
Pop(S2,comcarnum,comtime);
Push(S1,comcarnum,comtime);
I--;
if(J>=1)
{
DeQueue(Q2,comcarnum,comtime);
comtime = time;
Push(S1,comcarnum,comtime);
I--;
break;
}
else
break;
}
Push(S1,comcarnum,comtime);
I--;
Pop(S2,comcarnum,comtime);
Push(S1,comcarnum,comtime);
I--;
for(i=0;i!=Mark;i++)
{
DeQueue(Q2,comcarnum,comtime);
if(comcarnum==carnum)
{
printf("/n您的车停留在便道内,不收费!/n");
Marks=1;
Mark++;
}
else
{
EnQueue(Q2,comcarnum,comtime);
}
}
if(Marks==1)
{
Mark--;
Marks=0;
}
else
printf("/n您的车没有停在此处/n");
break;
default:
printf("您的输入有误,请重新输入所要执行的操作!/n");
break;
}
printf("/n请输入操作要求:");
getchar();
scanf("%c",&ch);
}
return 0;
}//完成停车场的基本操作
最新修改的停车场问题,加入便道测试的功能,希望大家能给与测试,麻烦各位了!
- 停车场问题
- 停车场管理问题摘抄
- 停车场模拟管理问题
- 关于停车场管理的问题
- 停车场
- 停车场
- 停车场
- 停车场
- 停车场
- 停车场
- 停车场
- 停车场
- C程序模拟停车场管理问题
- 数据结构上机作业2-停车场问题
- 实验二:[栈和队列]停车场管理问题
- 数据结构(C语言版)严蔚敏 实习2 停车场管理 问题
- java栈+队列实现简单的停车场管理问题
- 停车场收费
- 5.7
- 无法获取保存在session中的验证码
- 不知道是为什么
- inal、static
- 态度决定一切!
- 停车场问题
- EJB会话bean查找和注入注解两种方式
- 信息获取与总结
- sql server中利用sql语句创建用户和角色
- 性能监视器计数器要求
- 根据汉字获得其区位码
- JS 的间隔线程
- 获得输入框的文本document.getElementById('id').value;
- Domino 发短信