还有,怎么把上面的和下面的合二为一,满足题目要求?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#define OK 1
#define NULL 0
#define ERROR 0
#define OVERFLOW 0
#define STACK_INIT_SIZE 2 //停车场大小
typedef struct{
    char AorD;
       //表示车到达或离去的信息
  
    char num[10];
    //表示车的车牌号码
    int time;
        //表示车到达或离开的时间
}ElemType;
typedef struct{
      //定义栈的结构体
    ElemType *base;
  //在栈构造之前和销毁之后,base的值为null
    ElemType *top;
   //栈顶指针
    int stacksize;
   //当前已分配的存储空间
}SqStack;
typedef struct QNode{
  
    ElemType cardata;
    struct QNode *next;
}QNode,*Queueptr;
typedef struct{
      //定义队的结构体
    Queueptr front;
  //队头指针
    Queueptr rear;
   //队尾指针
}LinkQueue;
unsigned InitStack(SqStack &s){//构造一个空栈
    s.base=(ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
    if(!s.base)exit(OVERFLOW);
  //存储分配失败
    s.top=s.base;
    s.stacksize=STACK_INIT_SIZE;
    return OK;
}//InitStack
unsigned Push(SqStack &s,ElemType e){//插入元素e为新的栈顶元素
    *s.top++=e;
    return OK;
}//Push
unsigned pop(SqStack &s,ElemType &e){//若栈不空,则删除S的栈顶元素,用e返回其值并返回OK;否则返回ERROR;
    if(s.top==s.base)return ERROR;
    e=*--s.top;
    return OK;
}//pop
void Delete(SqStack &s,ElemType e){//若栈不空,则删除S中元素为e的元素
    ElemType m[20],n,g;
    int a,i=0;
    while(s.base!=s.top){
        g=*--s.top;
        s.top++;
        if(strcmp(g.num,e.num)==0)
            pop(s,n);
        else
            pop(s,m[i++]);
            
    }
    for(a=0;a<i;a++)
        Push(s,m[a]);
}
unsigned FullStack(SqStack s){//判断栈是否满
    if(s.top-s.base>=s.stacksize)
        return OK;
    else 
        return ERROR;
}//FullStack
unsigned InitQueue(LinkQueue &Q){//构造一个空队列
    Q.front=Q.rear=(Queueptr)malloc(sizeof(QNode));
    if(!Q.front)exit(OVERFLOW);
    Q.front->next=NULL;
    return OK;
}//InitQueue
unsigned EnQueue(LinkQueue &Q,ElemType e){//插入元素e为Q的新的队尾元素
    Queueptr p;
    p=new QNode;
    if(!p)exit(OVERFLOW);
    p->cardata=e;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
    return OK;
}//EnQueue
unsigned EmptyQueue(LinkQueue Q){//判断队列是否为空
    if(Q.front==Q.rear)
        return OK;
    else
        return ERROR;
}//EmptyQueue
unsigned DeQueue(LinkQueue &Q,ElemType &e){//若队列不空,则删除Q的对头元素,并用e返回其值
    Queueptr p;
    if(!EmptyQueue(Q))
    {
        p=Q.front->next;
        e=p->cardata;
        Q.front->next=p->next;
        if(Q.rear==p)
          Q.rear=Q.front;
          free(p);
          return OK;
    }
   else
      return ERROR;
}//DeQueue
unsigned SeekStack(SqStack s,ElemType e,ElemType &m){//查找栈中是否和e有相同号码的这个元素,若有则返回OK,否则返回ERROR,并用m返回这个元素
    while(s.top!=s.base){
        m=*(--s.top);
        if(strcmp(m.num,e.num)==0)
            return OK;
    }
    return ERROR;
}//SeekStack
void StackTrverse(SqStack s){//输出栈中的元素
        ElemType m;
    while(s.top!=s.base){
        m=*(--s.top);
        printf(" %s
           %d\n",m.num,m.time);
    }
}
unsigned SeekQueue(LinkQueue &Q,ElemType e,ElemType &n){//查找队中是否有和e相同号码的这个元素,若有则返回OK,否则返回ERROR,并用n返回这个元素
    Queueptr p,q;
    p=Q.front;
    while(p->next){
        if(strcmp(p->next->cardata.num,e.num)==0){
            n=p->next->cardata;
            q=p->next;
            p->next=q->next;
            free(q);
            return OK;
        }
        else
            p=p->next;
    }
    return ERROR;
}//SeekQueue
void QueueTrverse(LinkQueue Q){//输出队列中的元素
    Queueptr p;
    p=Q.front;
    while(p->next){
        printf(" %s
           %d\n",p->next->cardata.num,p->next->cardata.time);
        p=p->next;
    }
}
void main(){//主函数
    int i=1,m=1,n=1,totaltime;
    ElemType e,f,g,k;
    SqStack s;
    LinkQueue Q; 
    InitStack(s);
    InitQueue(Q);
    printf("*******************停车场 管理系统******************\n");
    printf("*****车停在停车场内0.5元每分钟,停在便道上免费******\n\n");
    printf("(A:表示ARRIVAL
  D:表示DEPARTURE
  E:表示END)\n");
    for(i=1;;i++)
    {
        printf("\n请输入车辆信息:A/D/E
  车牌号码
   到达/离开时间\n\n");
        fflush(stdin);
        scanf("%c%s%d",&e.AorD,&e.num,&e.time);
      
        if(e.AorD=='A')
        {
            if(SeekStack(s,e,f))//查找栈中是否有和e相同号码的这个元素(车)
            {
                printf("你输入的车牌号码有误(与停车场内的车有相同的),请重新输入:\n");
                i--;
            }
            else{
                  if(!FullStack(s))
                  {
                     Push(s,e);
                     printf("请将车停在停车场的第%d个位置\n\n",m++);
                   printf("\n现在停车场内的车有:\n");
                     printf("车牌号码
    停入停车场的时间\n\n");
                     StackTrverse(s);
                   printf("\n现在便道上的车有:\n");
                     printf("车牌号码
    停入便道上的时间\n\n");
                     QueueTrverse(Q);
                  }
                  else{
                         if(SeekQueue(Q,e,k))//查找队中是否有和e相同号码的这个元素(车)
                         {
                             printf("你输入的车牌号码有误(与便道上的车有相同的),请重新输入:\n");
                                i--;
                         }
                         else
                         {
                             EnQueue(Q,e);
                             printf("停车场已满,请将车停在便道的第%d个位置\n",n++);
                             printf("\n现在停车场内的车有:\n");
                             printf("车牌号码
    停入停车场的时间\n\n");
                             StackTrverse(s);
                             printf("\n现在便道上的车有:\n");
                             printf("车牌号码
    停入便道上的时间\n\n");
                             QueueTrverse(Q);
                         }
                  }
            }
        }
        if(e.AorD=='D')
        {
            if(SeekStack(s,e,f))//查找栈中是否有和e相同号码的这个元素(车)
            {
                Delete(s,f);
                m--;
                totaltime=e.time-f.time;
                printf("你的车在停车场内停留了%d分钟\n", totaltime );
                printf("你应付停车费%.2f元\n\n",totaltime*0.5);
                if(!EmptyQueue(Q)){
                    DeQueue(Q,g);
                    g.time=e.time;
                    Push(s,g);
                    m++;
                    n--;
                    printf("\n现在停车场内的车有:\n");
                     printf("车牌号码
    停入停车场的时间\n\n");
                   StackTrverse(s);
                  printf("\n现在便道上的车有:\n");
                   printf("车牌号码
    停入便道上的时间\n\n");
                   QueueTrverse(Q);
                }
            }
            else
            {
                if(SeekQueue(Q,e,k)){//查找队中是否有和e相同号码的这个元素(车)
                totaltime=e.time-k.time;
                printf("你的车在便道上停留了%d分钟\n",totaltime);
                printf("你不用缴纳停车费\n\n");
                n--;
                printf("\n现在停车场内的车有:\n");
                printf("车牌号码
    停入停车场的时间\n\n");
                StackTrverse(s);
                printf("\n现在便道上的车有:\n");
                printf("车牌号码
    停入便道上的时间\n\n");
                QueueTrverse(Q);
                }
                else
                    printf("你的输入有误(停车场和便道上都没有此车),请重新输入:\n");
            }
        }
        if(e.AorD=='E')
        {
             printf("输入结束,请按任意键结束.\n");
            break;
        }
    }
}