目录
题目
题目描述
设有长度为n(n>1)的顺序表R,将R中保存的序列循环左移P(0 < P < n)个位置,即将R中的数据由(x0,x1,…,xn-1)变换为(xp,xp+1,…,xn-1,x0,x1,…,xp-1)。如果p值不合法,输出“error!”。
输入
第一行为数据元素个数n; 第二行为n个整数; 第三行为要左移的位数p
输出
移动后的序列。
样例输入
10
1 2 3 4 5 6 7 8 9 10
5
样例输出
6 7 8 9 10 1 2 3 4 5
代码
数据结构解法
#include <iostream>
#include <algorithm>
using namespace std;
typedef int Data;
//定义顺序表
typedef struct
{
Data data[10005];
int len;
} Seqlist;
//初始化顺序表
void Init_Seqlist(Seqlist *&L)
{
L = (Seqlist *)malloc(sizeof(Seqlist));
L->len = 0;
}
//创建顺序表
void Creater_Seqlist(Seqlist *&L)
{
int n, x;
cin >> n;
while (cin >> x, L->data[L->len++] = x, --n);
}
//主要代码并打印顺序表
void Printf_Seqlist(Seqlist *&L)
{
int i, k;
cin >> k;
if (k > L->len)
cout << "error!";
else
{
for (i = 0; i < k; i++)
{
L->data[L->len++] = L->data[i];
}
for (i = k; i < L->len; i++)
{
cout << L->data[i] << ' ';
}
}
}
int main()
{
Seqlist *L;
Init_Seqlist(L);
Creater_Seqlist(L);
Printf_Seqlist(L);
return 0;
}
STL解法
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
int main()
{
queue<int> a;
int n, x;
cin >> n;
while (cin >> x, a.push(x), --n);
cin >> n;
if (n > a.size())
{
cout << "error!";
return 0;
}
else
{
while (n--)
{
a.push(a.front());//将队头元素加到队尾
a.pop();//删除队头元素
}
}
while (!a.empty())
{
cout << a.front() << ' ';//输出一个队头元素,便删除一个,直至容器的大小为0.
a.pop();
}
return 0;
}