#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define N 10 //停车场最多停车数
#define M 10 //候车场最多停车数
#define Price 2 //每单位时间停车费用
/定义存储结构/
typedef struct
{
int carnum[N]; //车牌号,其中N指的是车牌的数量,等价于停车的数量,从0~(N-1)个
int time[N];//进入时间
int top;//停车位置,栈顶指针
}Seqstack;//顺序栈
typedef struct Node
{
int data;//车牌号码
struct Node* next;//指针域
}linkqueuenode;//链队结点
typedef struct
{
linkqueuenode * front;//结点类型的队头指针
linkqueuenode * rear;//结点类型的队尾指针
}linkqueue;//链队
/顺序栈的方法定义/
void Init(Seqstack *S)//初始化
{
S->top=-1;
}
int StackEmpty(Seqstack *S)//栈空
{
return(S->top==-1);
}
int StackFull(Seqstack *S)//栈满
{
return(S->top==N-1);
}
int Push(Seqstack *S, int e1,int e2)//进栈,压入
{
if(S->top==N-1)//表示栈已满
return FALSE;
else
{
S->top++;//栈顶指针先往上移一位,第一次从-1到0
S->carnum[S->top]=e1;// 车牌号
S->time[S->top]=e2;//时间
return TRUE;
}
}
int Pop(Seqstack *S,int *e1,int *e2) //出栈,弹出
{
if(S->top==-1)//空栈时无法再删除
return FALSE;
else
{
*e1=S->carnum[S->top];//车牌号码
*e2=S->time[S->top];//时间
S->top--;//栈顶指针下移一位
return TRUE;
}
}
void Printstack(Seqstack *S)//打印数据
{
for(int i=0;i<=S->top;i++)//循环输出
{
printf("%d ",S->carnum[i]);
}
printf("\n");
}
/链队的方法/
int Initqueue(linkqueue &Q)//初始化
{
if((&Q)->front!=NULL)//申请成功
{
(&Q)->front=(linkqueuenode *)malloc(sizeof(linkqueuenode));//为头结点指针申请分配空间
(&Q)->rear=(&Q)->front;/*只为头结点分配空间,那么,这个链队列只是一个带头结点的空链表,
尾指针也指向头结点 */
(&Q)->front->next=NULL;//空队列的头结点指针域为空
return TRUE;
}
else
return FALSE;
}
int Enterqueue(linkqueue *Q, int x)//这里的x是需要在主函数里输入的
{
linkqueuenode * temp;
temp=(linkqueuenode *)malloc(sizeof(linkqueuenode));
if(temp!=NULL)
{
temp->data=x;//车牌号
temp->next=NULL; //
Q->rear->next=temp;//尾指针的指针域指向新指针
Q->rear=temp;//尾指针移动 ,成为最末尾
return TRUE;
}
else
return FALSE;
}
int Deletequeue(linkqueue *Q ,int *x)//出队首先要判断的是队列是否为空
{
linkqu