停車場

#include <bits/stdc++.h>
int maxsize;
#define addsize 100
#define true 1
#define false 0
typedef long long int elemtype;    //  也可以用INT 
typedef struct qnode{
    elemtype data;
    struct qnode *next;
}qnode,*queuenode;
typedef struct
{
    queuenode front;
    queuenode rear;
    int queuelength;
}queue;
typedef struct
{
    elemtype *base;
    elemtype *top;
    elemtype *p;
    int stacksize;
}sqstack;
//隊列的定義
void initqueue(queue &q)
{
    q.front=new qnode;
    q.rear=q.front;
    q.front->next=NULL;

    q.queuelength=0;
}
void clearqueue(queue &q)
{
    while(q.front)
    {
        q.rear=q.front->next;
        free(q.front);
        q.front=q.rear;
    }
}
int top(queue &q)
{
    queuenode p;
    p=q.front->next;
    return p->data;
}
void enqueue(queue &q,elemtype e)
{
    queuenode p;
    p= new qnode;
    p->data=e;
    p->next=NULL;
    q.rear->next=p;
    q.rear=p;
    q.queuelength++;
}
void dequeue(queue &q) // 刪除隊列第一個元素
{
    if(q.front==q.rear) return;
    queuenode p;
    p=q.front->next;
    q.front->next=p->next;
    if(q.rear==p)
    {
        q.rear=q.front;
    }
    free(p);
    q.queuelength--;
}

int queuempty(queue &q)
{
    if(q.rear==q.front)
    {
        return true;
    }
    else
    {
        return false;
    }printf("%d\n",q.queuelength);
}
int query(queue &q,elemtype x)
{
    queuenode p;
    p=q.front;
    while(x--)
    {
        p=p->next;
    }
    return p->data;
}
void delqueue(queue &q,elemtype x)// 刪除隊列前x個元素
{
    queuenode p;
    q.queuelength=q.queuelength-x;
    while(x--)
    {
        p=q.front->next;
        q.front->next=p->next;
    }
    free(p);
}
void leave(queue &q,elemtype x)
{
    queuenode p;
    p=q.front;
    while(x!=1)
    {
        p=p->next;
        x--;
    }
    p->next=p->next->next;
    q.queuelength--;
}
//棧的定義
elemtype initstack(sqstack &s)
{
    s.base=new elemtype[maxsize];
    if(!s.base)
    {
        return false;
    }
    s.top=s.base;
    s.p=s.base;
    s.stacksize=maxsize;
    return true;
}
void push(sqstack &s,elemtype x)
{
    /*if(s.top-s.base>s.stacksize)
    {
        s.base=new elemtype[s.stacksize+addsize];
        s.top=s.base+addsize;
        s.stacksize+=addsize;
    }*/
    *s.top++=x;
}
elemtype pop(sqstack &s)
{
    /*if(s.top==s.base)
    {
        return false;
    }*/
    elemtype x;
    x=*--s.top;
    return x;
}
elemtype gettop(sqstack &s)
{
    return *(s.top-1);
}
elemtype isempty(sqstack &s)
{
    if(s.top==s.base)
    {
        return true;
    }
    else
    {
        return false;
    }
}
elemtype isfull(sqstack &s)
{
    if(s.top-s.base>=s.stacksize)
    {
        return true;
    }
    else
    {
        return false;
    }
}
int main()
{
    int m;
    int flag;
    sqstack s;
     long long int num;
    char a[10];
    queue q;
      while(scanf("%d%d",&maxsize,&m)!=EOF)
    {
        flag=0;
        initqueue(q);
        initstack(s);
        while(m--)
        {
            scanf("%s",a);
            if(strcmp(a,"Add")==0)
            {
                scanf("%lld",&num);
                if(isfull(s))
                {
                  enqueue(q,num);
                }
                else
                {
                    push(s,num);
                }

            }
            else if(strcmp(a,"Del")==0)
            {
                if(isempty(s))
                {
                    flag=1;
                }
                else
                {
                    pop(s);
                    if(q.queuelength!=0)
                    {
                        push(s,top(q));
                        dequeue(q);
                    }
                }

            }
            else if(strcmp(a,"Out")==0)
            {
                if(q.queuelength==0)
                {
                    flag=1;
                }
                else
                {
                   dequeue(q);
                }

            }
        }
        if(flag==1)
        {
            printf("Error\n");
        }
        else
        {
            while(!isempty(s))
            {
               printf("%lld\n",pop(s));
            }

        }
    }

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章