计蒜客:顺序表的循环左移

版权声明:本文仅提供学习参考,不得抄袭 https://blog.csdn.net/qq_39100624/article/details/89206292

顺序表的循环左移:

顺序表的构造、插入、扩展、查找、删除、遍历这 6 种操作。一种新的操作:循环左移。

对于顺序表 L=(a_0, a_1, …, a_{n-1})L=(a​0,a​1,…,a​n−1),循环左移 k位意味着将顺序表变为 L^k=(a_k, a_{k+1}, …, a_{n-1}, a_0, a_1, …, a_{k1})
L​k=(ak,a​k+1,…,an−1,a​0,a1,…,a​k−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)a​i​​ (0≤a​i≤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;
}

猜你喜欢

转载自blog.csdn.net/qq_39100624/article/details/89206292
今日推荐