#include <stdio.h>
#include <stdlib.h>
typedef char string[10];
typedef struct car{
string state;
string id;
int t1;//到达时间
int t2;//离开时间
int d;//判断在不在栈里
}car;
//创栈
typedef car STDataType;
typedef struct{
STDataType* a;//栈数组
int top;//栈顶下标
int capa;//容量
}ST;
//栈的初始化
void init(ST* ps,int n){
ps->a=(STDataType*)malloc(n*sizeof(STDataType));
ps->top=-1;
ps->capa=n;
return ;
}
//入栈
int push(ST* ps,STDataType a1){
if(ps->top+1==ps->capa){
//栈满
printf("Queue\n");
return 0;
}
ps->top++;
ps->a[ps->top]=a1;
return 1;
}
//出栈,队里的一个数据入栈
void pop(ST* ps,STDataType a1){
int k=0;
for(int i=0;i<=ps->top;i++){
if( strcmp(ps->a[i].id,a1.id)==0){
k=i;
break;
}
}
for(int j=ps->top;j<=k;j--){
printf("22222222222\n");
printf("汽车%s:out\n",ps->a[j].id);
}
if(ps->top!=0){
for(int h=k+1;h<=ps->top;h++){
printf("汽车%s:in\n",ps->a[h].id);
ps->a[h-1]=ps->a[h];
}
}
ps->top--;
return ;
}
//创建链式队
typedef struct QNode{
STDataType data;
struct QNode *pnext;
}QNode,*pQNode;
typedef struct{
pQNode front;
pQNode rear;
int n;
}LinkQueue;
void initQueue(LinkQueue* pQ){
pQ->front=pQ->rear=(pQNode)malloc(sizeof(QNode));
pQ->front=pQ->rear=NULL;
pQ->n=0;
return ;
}
//入队
void inQueue(LinkQueue* pQ,STDataType a){
pQNode p=(pQNode)malloc(sizeof(QNode));
p->data=a;
p->pnext=NULL;
if(pQ->front==NULL){
pQ->front=pQ->rear=p;
pQ->n++;
return ;
}
pQ->rear->pnext=p;
pQ->rear=p;
return ;
}
//出队
void outQueue(LinkQueue* pQ,STDataType* e){
//队为空
if(pQ->front==pQ->rear){
return ;
}
pQNode p=pQ->front;
*e=p->data;
if(pQ->front==pQ->rear){
pQ->front=pQ->rear=NULL;
pQ->n--;
return ;
}
pQ->front=p->pnext;
pQ->n--;
free(p);
return ;
}
int main()
{
int n;//车场的最大容量
printf("输入车场的最大容量\n");
scanf("%d",&n);
ST* ps=(ST*)malloc(sizeof(ST));
init(ps,n);
LinkQueue* pQ=(LinkQueue*)malloc(sizeof(LinkQueue));
initQueue(pQ);
printf("请输入所要输入的信息数\n");
int q;
scanf("%d",&q);
car car1[q];
STDataType e;
for(int i=0;i<q;i++){
printf("输入第%d条信息,输入状态,id,时间\n",i+1);
scanf("%s %s ",&car1[i].state,&car1[i].id);
if(strcmp(car1[i].state,"arrive")==0){
scanf("%d",&car1[i].t1);
if(push(ps,car1[i])==0){
inQueue(pQ,car1[i]);
printf("在第%d个位置\n",pQ->n);
car1[i].d=0;
}
else{
printf("Stack\n");
printf("在第%d个位置\n",ps->top+1);
car1[i].d=1;
}
}
else{
scanf("%d",&car1[i].t2);
for(int j=0;j<i;j++){
if(strcmp(car1[i].id,car1[j].id)==0){
if(car1[j].d==1){
pop(ps,car1[j]);
outQueue(pQ,&e);
e.d==1;
push(ps,e);
printf("停留时间为%d",car1[i].t2-car1[j].t1);
break;
}
else{
pQ->n--;
printf("停留时间为0");
break;
}
}
}
}
}
return 0;
}
void pop(ST* ps,STDataType a1){
int k=0;
for(int i=0;i<=ps->top;i++){
if( strcmp(ps->a[i].id,a1.id)==0){
k=i;
break;
}
//这里输出不了怎么回事啊?
for(int j=ps->top;j<=k;j--){
printf("22222222222\n");
printf("汽车%s:out\n",ps->a[j].id);
}
if(ps->top!=0){
for(int h=k+1;h<=ps->top;h++){
printf("汽车%s:in\n",ps->a[h].id);
ps->a[h-1]=ps->a[h];
}
}
ps->top--;
return ;
}