美文网首页
数组元素左移

数组元素左移

作者: SK_Wang | 来源:发表于2020-04-09 20:50 被阅读0次

    设将n(n>1)个整数存放到一维数组R中, 试设计一个在时间和空间两方面都尽可能高效的算法;将R中保存的序列循环左移p个位置(0<p<n)个位置, 即将R中的数据由(x0,x1,......,xn-1)变换为(xp,xp+1,...,xn-1,x0,x1,...,xp-1)。

    示例:

    输入:pre[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, 
         n = 10, p = 3
    输出:pre[10] = {3, 4, 5, 6, 7, 8, 9, 0, 1, 2}
    

    解题思路:

    先逆置整个数组,再逆置前n-p个元素和后面的p个元素

    代码:

    typedef struct Node{
        int data;
        struct Node *next;
    } Node;
    typedef struct Node * LinkList;
    
    void Reverse(int *pre, int left, int right) {
        int i = left;
        int j = right;
        int temp;
        while (i < j) {
            temp = pre[i];
            pre[i] = pre[j];
            pre[j] = temp;
            i++;
            j--;
        }
    }
    
    void RotateLeft(int *pre, int n, int p) {
        if (p > 0 && p < n) {
            Reverse(pre, 0, n - 1);
            Reverse(pre, 0, n -1 - p);
            Reverse(pre, n - p, n - 1);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:数组元素左移

          本文链接:https://www.haomeiwen.com/subject/invhmhtx.html