数据结构实验之队列一:排队买饭

来源:互联网 发布:韵乐x5效果器软件 编辑:程序博客网 时间:2024/05/30 12:31
一开始交WA,写了个输出队列元素的函数调试了一下,原来是删数的时候位置弄反了。
#include<iostream>#include<algorithm>#include<string>using namespace std;const int maxn=100000+10;typedef struct{    int *data;    int frot, rear;}Queue;void initqueue(Queue &q)///队列初始化{    q.data=new int [maxn];    q.frot=0;    q.rear=-1;}void display(Queue &q)///从头到尾输出元素数据{    for(int i=q.frot;i<=q.rear;i++)        cout<<q.data[i]<<" ";}void enqueue(Queue &q, int key)///进队操作队尾元素{    q.rear++;    q.data[q.rear]=key;}void del(Queue &q, int k)///删除k位置上的元素{    q.frot++;    for(int i=q.frot+k-2;i>=q.frot;i--)        q.data[i]=q.data[i-1];}void dequeue(Queue &q)///出队操作队首元素{    q.frot++;}int main(){    ios::sync_with_stdio(false);    int n;    cin>>n;    Queue q;    initqueue(q);    for(int i=0;i<n;i++)        cin>>q.data[++q.rear];    int T;    cin>>T;    while(T--)    {        string s;        cin>>s;        if(s=="JOIN")        {            int x;            cin>>x;            enqueue(q, x);   //         display(q);        }        else if(s=="LEAVE")        {            int k;            cin>>k;            del(q, k);   //         display(q);        }        else if(s=="ASK")        {            int p;            cin>>p;            cout<<q.data[q.frot+p-1]<<endl;        }        else if(s=="FINISH")        {            int d;            cin>>d;            q.frot=q.frot+d;   //         display(q);        }        else if(s=="LENGTH")        {            cout<<q.rear-q.frot+1<<endl;        }    }    return 0;}

0 0