版权声明:本文仅提供学习参考,不得抄袭 https://blog.csdn.net/qq_39100624/article/details/89206292
顺序表的循环左移:
顺序表的构造、插入、扩展、查找、删除、遍历这 6 种操作。一种新的操作:循环左移。
对于顺序表 L=(a_0, a_1, …, a_{n-1})L=(a0,a1,…,an−1),循环左移 k位意味着将顺序表变为 L^k=(a_k, a_{k+1}, …, a_{n-1}, a_0, a_1, …, a_{k1})
Lk=(ak,ak+1,…,an−1,a0,a1,…,ak−1)。
比如:长度为 8 的顺序表 (1, 2, 3, 4, 5, 6, 7, 8)(1,2,3,4,5,6,7,8),循环左移 3 位后的结果为 (4, 5, 6, 7, 8, 1, 2, 3)(4,5,6,7,8,1,2,3)。
输入格式:
第一行输入两个整数 n(1 \leq n \leq 100)n(1≤n≤100) 和 k(0 \leq k \leq n)k(0≤k≤n),分别表示顺序表的元素个数和循环左移的位移量。
第二行一共 n 个整数 a_i(0 \leq a_i \leq 10000)ai (0≤ai≤10000),表示顺序表中元素的值。
输出格式:
输出输出只有一行 n 个整数,顺序输出循环左移后顺序表中每个元素的值,每个元素之间用一个空格分隔。行末不要有多余空格。
样例输入
8 3
1 2 3 4 5 6 7 8
样例输出
4 5 6 7 8 1 2 3
// An highlighted block
#include<iostream>
#include <stdio.h>
#define maxsize 100
using namespace std;
template<typename Type>class Vector{
private:
int size,length;
Type*data;
public:
Vector(int input_size){
size=input_size;
length=0;
data=new Type[size];
}
~Vector(){
delete[] data;
}
void insert(Type value) {
data[length++]=value;
}
void llop(Type k){
k=k%length;
if(k==0)
return ;
Type*old_data=data;
data=new Type[size];
for(int i=0;i<length;i++){
if(i>=k){
data[i-k]=old_data[i];
}else{
data[length-k+i]=old_data[i];
}
}
delete[] old_data;
}
void print(){
for(int i=0;i<length;i++){
if(i!=length-1){
cout<<data[i]<<" ";
}else{
cout<<data[i];
}
}
}
};
int main(){
int n,k,b;
cin>>n>>k;
Vector<int>a(n);
for(int i=0;i<n;i++){
cin>>b;
a.insert(b);
}
a.llop(k);
a.print();
return 0;
}