#define _CRT_SECURE_NO_WARNINGS//visual stduio添加对scanf的信任
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<math.h>
#define size 1 //停车场位置数
//模拟停车场的堆栈的性质;
typedef struct zanlind {
int number; //汽车车号
float ar_time; //汽车到达时间
}zanInode;//车结点
typedef struct {
zanInode* base; //停车场的堆栈底
zanInode* top; //停车场的堆栈顶
int stacksize_curren;//堆栈长度
}stackhead;
//堆栈的基本操作;
void initstack(stackhead& L) //构造一个空栈L
{
L.base = (zanInode*)malloc(size * sizeof(zanlind));//给栈L分配空间
if (!L.base) exit(0); //存储分配失败
L.top = L.base;//初始化栈顶和栈底指针相同
L.stacksize_curren = 0;//初始化栈长度为0
}
void push(stackhead& L, zanInode e) //插入元素e为新的栈顶元素
{
*L.top++ = e;//先让L栈的栈顶指向e,然后栈顶指针+1
L.stacksize_curren++;//由于上面的e进入了栈内,所以栈长度加一
}
void pop(stackhead& L, zanInode& e) //若栈不为空,删除L的栈顶元素,用e返回其值
{
if (L.base==L.top)//栈长度为0时,停车场为空
{
printf("停车场为空!!");
return;
}
e = *--L.top;//如果栈顶和栈底不等,那么e为当前top指针减一后的指向,这是因为栈顶指针始终指向栈顶元素的上面。
L.stacksize_curren--;//随着top指针减一,栈长度减一。注意返回e是通过引用完成的,就是 &e,e的变化会导致实参的变化
}
//模拟便道的队列的性质;
typedef struct duilie {//队列就是便道(候车区)
int number; //汽车车号
float ar_time; //汽车到达时间
struct duilie* next;//链式的队列结点,通过next指针访问相邻的队列结点
}*queueptr;//指向队列结点自身的指针
typedef struct {