AC代码:
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct
{
int data[100010];
int fron;
int rear;
}myqueue;
void chushihua(myqueue *&s)
{
s=(myqueue *)malloc(sizeof(myqueue));///顺序队列
s->fron=0;
s->rear=0;
}
void jiaru(myqueue *&s,int num)///入队买饭
{
s->rear++;///因为rear先加了1,所以数组下标是从1开始的
s->data[s->rear]=num;///像下标这种东西也是很重要的细节
}
int chang(myqueue *s)///队长
{
return (s->rear-s->fron+1);///不要忘了加1
}
void likai(myqueue *&s,int y)///中途离开
{
int i;
for(i=y-1+s->fron;i<s->rear;i++)
s->data[i]=s->data[i+1];
s->rear--;
}
void wancheng(myqueue *&s,int num)///买完饭离开
{
s->fron=s->fron+num;
}
void xunwen(myqueue *s,int num)
{
cout<<s->data[num-1+s->fron]<<endl;///因为fron被我在主函数中给赋值为1了,所以在这减回来
}
int main()
{
myqueue *s;
char a[100];
chushihua(s);
int n,m,i,shu,ru,li,wen,wan;
cin>>n;
for(i=0;i<n;i++)
{
cin>>m;
jiaru(s,m);
}
s->fron=1;
cin>>shu;
for(i=0;i<shu;i++)
{
cin>>a;
if(a[0]=='J')
{
cin>>ru;
jiaru(s,ru);
}
else if(a[0]=='L'&&a[1]=='E'&&a[2]=='A')
{
cin>>li;
likai(s,li);
}
else if(a[0]=='A')
{
cin>>wen;
xunwen(s,wen);
}
else if(a[0]=='F')
{
cin>>wan;
wancheng(s,wan);
}
else if(a[0]=='L'&&a[1]=='E'&&a[2]=='N')///队列长度
{
cout<<chang(s)<<endl;
}
}
return 0;
}
这个题很不错,因为我是使用顺序队列存储的数据,所以在处理数组下标的时候出了一些错误,主要错误就是在当有人中途离开队伍时数组的变化考虑得不够完善;其实就是下标问题,其它也没啥。