• 转载-数组循环移位


    数组循环移位算法详细介绍:http://blog.chinaunix.net/uid-26642637-id-3291386.html

    方法1

    利用memcpy函数,需开辟临时空间。先把从a+n-k到a+n-1这k个字符,存到tmp中;然后,把以a开始的地址空间中的字符复制到a+k开始的地址空间中去;最后,把tmp的k个字符放回以a开始的地址空间中去。
     
     a  ... a+n-k-1  a+n-k   ...  a+n-1
     

    void loopRightShiftV2(char a[], int n, int k)
    {
        char *tmp = (char *)malloc(sizeof(char)*k);

        k %= n;
        memcpy(tmp, a+n-k, k);
        memcpy(a+k, a, n-k);
        memcpy(a, tmp, k);
    }


    「方法1版本2
    先看循环右移一个字符的思路:首先,保存最有一个非''字符;然后将字符数组从最后一个非''字符开始,依次后移;最后将已保存的最后一个字符放到第一字符所在位置处。循环右移k个字符,只需将上述过程重复k次即可。
     

    void loopRightShift(char a[], int n, int k)
    {
        int tmp;
        int i;

        k %= n;
        while(k--){
            tmp = a[n-1];
            for(i = n-1; i >0; i--){
                a[i] = a[i-1];
            }
            a[0] = tmp;
        }
    }

    方法2

    转载自:http://blog.csdn.net/zz198808/article/details/7539827

    // Perverse.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    void Reverse(char a[],int begin,int end)
    {
        for (;begin<end;begin++,end--)
        {
            char temp=a[end];
            a[end]=a[begin];
            a[begin]=temp;
        }
    }
    void RightShift(char *array,int N,int K)
    {
        K%=N;
        Reverse(array,0,N-K-1);
        Reverse(array,N-K,N-1);
        Reverse(array,0,N-1);
    
    }
    void LeftShift(char* array,int N,int K)
    {
        K%=N;
        Reverse(array,K,N-1);
        Reverse(array,0,K-1);
        Reverse(array,0,N-1);
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        char a[]="abcd1234";
    
        /*Reverse(a,1,2);
        for (int i=0;i<5;i++)
        {
            printf("%3c ",a[i]);
        }
        system("pause");*/
        LeftShift(a,8,2);
    
        for (int i=0;i<8;i++)
        {
            printf("%c",a[i]);
        }
        system("pause");
        return 0;
    }
  • 相关阅读:
    javascript权威指南(2)
    javascript权威指南(1)
    java之jvm学习笔记四(安全管理器)
    JavaEE Tutorials (2)
    Java高效编程(2) -- Creating and Destroying Objects
    JavaEE Tutorials (1)
    Java Web整合开发(12) -- JDBC
    memcached安装和验证
    [leetcode]Two Sum
    Java Web整合开发(11)
  • 原文地址:https://www.cnblogs.com/lwflourish/p/4494749.html
Copyright © 2020-2023  润新知