顺序表——2010统考真题

该代码示例展示了一个C++函数,用于将一维数组中的元素循环左移指定位置。函数首先创建一个新的静态数组存储结果,然后分两步将原数组后半部分和前半部分元素填充到新数组中,从而实现循环左移。最后,提供了主函数进行测试并打印结果,整个过程的时间和空间复杂度均为O(n)。
摘要由CSDN通过智能技术生成

2010统考真题

设将n(n>1)个整数存放到一维数组R中,设计一个在时间和空间两个方面都尽量高效的算法。
将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(X0,X1,…Xn-1)变换为(Xp,Xp+1,…Xn-1,X0,X1,…Xp-1)。

// 设将n(n>1)个整数存放到一维数组R中,设计一个在时间和空间两个方面都尽量高效的算法。
// 将R中保存的序列循环左移p(0<p<n)个位置,
// 即将R中的数据由(X0,X1,...Xn-1)
// 变换为(Xp,Xp+1,...Xn-1,X0,X1,...Xp-1)
#include <stdio.h>
#define n 10

int* cycleLeftShiftList(int *R,int p)           //*R: 一维数组 p: 循环左移的位置
{
    if(NULL == R) return -1;                    //入参保护
    static int newR[n]={0};                     //返回静态局部变量地址
    int i = 0;
    for (i; i < n - p; i++)                     //把R[p]之后的元素按顺序放到newR数组里
    {
        newR[i] = R[i + p];
    }
    for (int j = 0; j < p; j++)                 //把R[p]之前的元素按顺序放到newR数组里
    {
        newR[i] = R[j];
        i++;
    }
    return newR;
}


//验证
int main()
{
    int R[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //原先的一维数组
    int p = 3;                                  
    int *newR  = cycleLeftShiftList(R,p);
    //打印
    for (int i = 0; i < n; i++)
    {
        printf("newR[%d] = %d\n", i, newR[i]);
    }
}

//空间复杂度和时间复杂度都是n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值