zoukankan      html  css  js  c++  java
  • 1008 数组元素循环右移问题

    1008 数组元素循环右移问题

    这个问题实际上还是比较容易解出来的,比如可以用链表,也可以用数组交换,也可按照特定顺序直接输出;

    • 直接输出方式:我们可以想象一下,数据循环移动,不过是从数组的中间部分开始输出,然后回到开头,继续输出,直到数组元素全部输出。比如数组a[10],1 2 3 4 5 6 7 8 9 10 ,当我们移动3个数据位的时候,输出序列就是 :8 9 10 1 2 3 4 5 6 7 ,那么是不是可以取巧,直接从8开始输出,然后回到1,再输出到7呢?——可以

    • 数组交换:我担心直接输出数据不行,那我交换数据,就用那种老老实实的方法,总没问题吧。可以,但是相对复杂一点,首先每一次挪动一个数据,把最后面的数据放入第一个数据位,剩下的往后挪一位,这样循环m次,可以达到我们的目的。然后直接输出即可。

    • 链表方式:我觉得这个方式是比较好的,首先建立链表,当然,采取尾插法比较好,这样产生的链表序列是正序,方便处理。不过还需要注意一点,那就是关于最后一个节点的next应该接上第一个结点。这实际上是一个带头结点的单循环链表。当我们的链表建立完成之后,其实得到了一个围成了一个圆的数据组,我们按照个数m开始数,数到第m+1个数据时,开始输出,直到我们回到这个节点,数据输出完毕,我觉得这样做简便很多。

    下面给出对应的相关代码:

    //直接输出方式
    int
    main() { int N,M; cin>>N>>M; int * array = new int [N]; for(int i = 0;i < N;i++) cin>>array[i]; M = M % N; for(int j = N - M, i = 0;i < N;j++, i++) { if(j == N) j = 0; cout<<array[j]; if(i != N-1) cout<<" "; } return 0; }
    //链表方式
    struct List {
        int data;
        struct List * next;
    };
    
    int main()
    {
        int N,M;
        cin>>N>>M;
        List * head = (List *)malloc(sizeof(List));
        List * p,* temp = head;
      //尾插法建立链表
    for(int i = 0;i < N;i++) { p = (List *)malloc(sizeof(List)); cin >> p->data; temp->next = p; temp = p; }
      //尾结点连接上首节点 temp
    ->next = head->next; temp = head; M = M % N;
      //寻找出输出开头的节点
    for(int i = 0;i < N-M;i++) temp = temp->next; head = temp;
      //输出链表 List
    * out = head->next; for(int i = 0;i < N;i++) { cout << out->data; if(i != N-1) cout << " "; out = out->next; } return 0; }
     //数组交换
    for(i = 0;i < m;i++) {    t = a[n-1];    for(j = n-m;j >= 0;j--) {        a[j+1] = a[j];    }    a[0] = t; }//数据整体往后挪一位,然后最后一位放在最前面,循环m次即可

    2020-07-14

  • 相关阅读:
    Coursera机器学习week11 单元测试
    关于 TypeReference 的解释
    getModifiers 方法解释。
    instanceof isInstance isAssignableFrom 比较
    elasticsearch 基础 语法总结
    kibana 启动 关闭 和进程查找
    MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别
    spring boot 项目 热启动
    java zip 压缩文件
    Packet for query is too large (1660 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
  • 原文地址:https://www.cnblogs.com/2015-16/p/13301971.html
Copyright © 2011-2022 走看看