这道题考察数组应用,难度不大,我们利用循环队列做,不过用最简单的一维数组也可以做,而且更加简单。
话不多说上代码
#include<stdio.h>
#include <stdlib.h>
#define ok 1
#define error 0
typedef struct//定义循环队列
{
int *data;//定义一个int数组
int front;//这里的指针根本不是指针,是表示元素的位置的数字
int rear;
int length;//队列长度
int m;
}seq;
void creatQueue(seq *q,int n)//动态分配数组大小
{
q->m=n;//由于本题不会出现队满。所以不需要多加一个空间判断溢出
q->data=(int*)malloc(sizeof(int)*(q->m));
q->length=q->rear=q->front=0;
for(int i=0;i<=n;i++) q->data[i]=0;
}
int EnterQueue(seq *q,int x)//入队操作
{
q->data[q->rear]=x;
q->rear=(q->rear+1)%(q->m);
return ok;
}
void shuchu(seq *q,int k)//从头输出k个元素的队列
{
for(int i=0;i<k;i++)
{
printf("%d ",q->data[q->front]);
q->front=(q->front+1)%(q->m);
}
}
void xunhuan(seq *q,int k)//向右循环k位
{
for(int i=0;i<k;i++)//即将前后指针都向左移动k位
{
if(q->front==0) q->front=q->front+q->m-1;
else q->front=q->front-1;
}
for(int i=0;i<k;i++)
{
if(q->rear==0) q->rear=q->rear+q->m-1;
else q->rear=q->rear-1;
}
}
int main()
{
int max,k,l;
scanf("%d%d",&max,&k);
seq *q;
q=(seq*)malloc(sizeof(seq));
creatQueue(q,max);
for(int i=0;i<max;i++)
{
scanf("%d",&l);
EnterQueue(q,l);
}
xunhuan(q,k);
shuchu(q,max);
return 0;
}