本题重新定义队列出队的操作:队首出队的数字重新在队尾入队。
例:队列中有1 2 3三个数字,现要求队首出队,则1从队首出队,同时1从队尾入队,队列变成2 3 1。
入队的顺序为1,2,3,4......n,同时给一个二进制字符串,1代表出队操作,0代表入队操作。
输入格式:
在第一行有两个数字n,m(n<=100,n<m),其中n为入队的数字个数,m代表操作数
接下来m行,每行一个数字,1或者0,代表不同的操作
输出格式:
输出操作后队列的每个数字,数字间以空格分隔,最后一个数字后没有空格
输入样例:
5 8
0
0
1
0
1
0
1
0
输出样例:
3 2 4 1 5
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
typedef int ElemType;
typedef struct{
int data[MaxSize];
int front,rear;
}SqQueue;
void InitQueue(SqQueue &Q){
Q.rear=Q.front=0;
}
bool EnQueue(SqQueue &Q,ElemType x){
if((Q.rear+1)%MaxSize==Q.front){
return false;
}
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MaxSize;
return true;
}
bool DeQueue(SqQueue &Q,ElemType &x){
if(Q.rear==Q.front){
return false;
}
x=Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize;
return true;
}
int main(){
SqQueue Q;
InitQueue(Q);
int n,m,i,k,p=1;
ElemType r;
scanf("%d %d",&n,&m);
for(i=0;i<m;i++){
scanf("%d",&k);
if(k==0){
EnQueue(Q,p);
p++;
}
else{
DeQueue(Q,r);
EnQueue(Q,r);
}
}
ElemType element;
for(i=0;i<n;i++){
DeQueue(Q,element);
printf("%d",element);
if(i<n-1){
printf(" ");
}
}
printf("\n");
return 0;
}