#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int data[101];
int front;//头指示器
int rear;//尾指示器
} SeqQueue; //循环队列
void Assignarray(SeqQueue*Q,int num);//给数组分配数据
void Movearray(SeqQueue*Q,int k,int num);//对数组进行循环右移
void Printfarray(SeqQueue*Q,int num);//打印出数组
int main()
{
SeqQueue A;
int num,k;
scanf("%d %d",&num,&k);
Assignarray(&A,num);//给数组分配数据
Movearray(&A,k,num);//对数组进行循环右移
Printfarray(&A,num);//打印出数组
return 0;
}
/*给数组分配数据
*Q:目标队列
*n:数组长度 = n + 1
*/
void Assignarray(SeqQueue*Q,int num)
{
for(int i=1; i<=num; i++)
{
scanf("%d",&(Q->data[i]));
}
Q->front=1;
Q->rear=num;
}
/*对数组进行循环右移
*Q:目标队列
*k:循环右移的位数
*num:数组长度 = num + 1
*/
void Movearray(SeqQueue*Q,int k,int num)
{
k=k%num;//数组循环 num 位不变
Q->front=Q->front+num-k;//只需调节头、尾指示器
Q->rear=Q->front-1;
}
/*打印出数组
*Q:目标队列
*num:数组长度 = num + 1
*/
void Printfarray(SeqQueue*Q,int num)
{
for(int i=Q->front; i!=Q->rear; i++)
{
if(i>num)
{
i=i-num;//到了数组末尾后,从头遍历
}
printf("%d ",Q->data[i]);
}
printf("%d",Q->data[Q->rear]);//队尾单独处理
}
循环右移(noj)
最新推荐文章于 2024-07-18 14:58:35 发布