📄 bus.cpp
字号:
#include<stdlib.h>
#include<stdio.h>
#define stacksize 100;
#define STACKINCREMENT 10;
enum status{FALSE=0 ,ERROR=0, OVERFLOW=0,TRUE=1,OK=1};
typedef struct{
char flag;
int num;
int time;
}car_infor;
typedef struct{
car_infor *base;
car_infor *top;
}sqstack;
typedef struct qnode{
car_infor data;
struct qnode *next;
}qnode,*queueptr;
typedef struct{
queueptr front;
queueptr rear;
}linkqueue;
status InitStack(sqstack &S)
{
S.base=(car_infor*)malloc(3*sizeof(car_infor));
// S.base=(car_infor*)malloc(STACK_INIT_SIZE*sizeof(car_infor));
if (!S.base)
exit(OVERFLOW); //存储分配失败
S.top = S.base;
return OK;
} // InitStack
status GetTop(sqstack S,car_infor &e)
{
// 若栈不空,则用e 返回S的栈顶元素,
// 并返回OK;否则返回ERROR
if (S.top==S.base)
return ERROR; //栈空
e=*(S.top-1);
return OK;
} // GetTop
status Push(sqstack &S, car_infor e)
{
//插入元素e为新的栈顶元素
*S.top = e;
S.top++;
return OK;
} // Push
status Pop(sqstack &S, car_infor &e)
{ // 若栈不空,则删除S的栈顶元素,用e返回
// 其值,并返回OK;否则返回ERROR
if (S.top==S.base) // 栈空,栈溢出(下溢)
return ERROR;
e = *--S.top;
return OK;
} //Pop
status InitQueue (linkqueue &Q)
{
// 构造一个空队列Q
Q.front = Q.rear =(queueptr)malloc(sizeof(qnode));
//产生一个头结点,头、尾指针均指向头结点
if (!Q.front) exit (OVERFLOW);
// 存储分配失败
Q.front->next = NULL;
return OK;
}
status EnQueue (linkqueue &Q, car_infor e)
{
queueptr p; // 插入元素e为Q的新的队尾元素
p=(queueptr)malloc(sizeof(qnode));
if (!p) exit (OVERFLOW); // 存储分配失败
p->data = e; p->next = NULL;
Q.rear->next = p; Q.rear = p;
return OK;
}
status DeQueue (linkqueue &Q, car_infor &e) {
// 若队列不空,则删除Q的队头元素,
// 用 e 返回其值,并返回OK;否则返回ERROR
queueptr p;
if (Q.front == Q.rear)
return ERROR; //队空
p = Q.front->next; e = p->data; //p指向队头元素
Q.front->next = p->next;
//修改头结点指针域,指向新的队头元素
if (Q.rear==p)
Q.rear=Q.front;
free (p); //释放被删掉的原队头元素
return OK;
}
int main()
{
sqstack port;//停车场
sqstack temp;//出车时临时使用
linkqueue road;//便道
car_infor m,n;//输入时暂存数据
int cartime,carcost,pos,q;//循环所用变量
InitStack(port);
InitStack(temp);
InitQueue(road);
printf("The length of the carport is 3.\n");
printf("Please input the datas (A/D,number,time) : \n");
scanf("%c%d%d",&m.flag,&m.num,&m.time);
do
{
if ( m.flag=='A')
{
Push(port , m);
printf("%c %d %d",port.base->flag,port.base->num,port.base->time);
printf("\n##");scanf("%d",&q);
printf("Please input the datas2 (A/D,number,time) :\n");
scanf("%c%d%d",&m.flag,&m.num,&m.time);
printf("\n##");scanf("%d",&q);
// printf("%c%d%d",m.flag,m.num,m.time);
printf("\n##");scanf("%d",&q);
scanf("%c%d%d",&m.flag,&m.num,&m.time);
printf("\n##");scanf("%d",&q);
printf("%c%d%d",m.flag,m.num,m.time);
printf("\n##");scanf("%d",&q);
scanf("%c%d%d",&m.flag,&m.num,&m.time);
printf("\n##");scanf("%d",&q);
scanf("%c%d%d",&m.flag,&m.num,&m.time);
printf("%c%d%d",m.flag,m.num,m.time);
printf("\n##");scanf("%d",&q);
if(port.top-port.base==3)
EnQueue(road , m);
}
else
{
do
{
if(port.top==port.base)
return ERROR;
else
{
Pop(port , n);
if(n.num!=m.num)
Push(temp , n);
}
}
while(n.num==m.num);
cartime=m.time-n.time;
carcost=3*cartime;
pos=port.top-port.base+1;
printf("The number of car is : ",m.num);
printf("The position of car is : ",pos);
printf("The time of car is : ",cartime);
printf("the cost of car is : ",carcost);
do
{
Pop(temp , n);
Push(port , n);
}
while(temp.top==temp.base);
if(road.front != road.rear)
{
DeQueue(road,n);
Push(port,n);
};
printf("Please input the datas (A/D,number,time) : ");
scanf("%c%d%d",m.flag,m.num,m.time);
}
}
while(m.flag=='E');
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -