本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a0a1⋯an−1)变换为(am⋯an−1a0a1⋯am−1)(最前面的m个数循环移至最后面的m个位置)。如果还需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
要求移动的数据次数尽量少,题目还有数组,所以循环数组(静态)是一个很契合的方法!!
#include<iostream>
using namespace std;
const int MAX = 100;
typedef struct { //顺序存储的循环队列
int data[MAX];
int front,rear; //队头指针和队尾指针
int len; //队列长度
} SqQueue;
int main()
{
int n,m;
cin>>n>>m;
SqQueue sq;
sq.front = 0;
sq.rear = 0;
sq.len = 0;
int temp = n;
while(temp--)
{
cin>>sq.data[sq.rear];
sq.rear++;
sq.rear = sq.rear % n;
sq.len++;
}
int i,j;
for( i = (sq.front+m)%n,j = 0;j < sq.len-1;j++)
{
cout<<sq.data[i]<<" ";
i++;
i = i%n;
}
cout<<sq.data[i]; //最后一个数据不要空格
cout<<endl;
return 0;
}