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

  • 相关阅读:
    二叉树
    oracle 查看某session的历史执行sql情况
    mongodb备份与恢复
    MongoDB数据库基本用法
    常见Oracle HINT的用法
    提高Oracle的WHERE语句性能一些原则
    javascript的类、委托、事件
    Swift数据类型简介(二)
    arcgis api 3.x for js 入门开发系列十七在线天地图、百度地图、高德地图(附源码下载)
    arcgis api 4.x for js之图层管理篇
  • 原文地址:https://www.cnblogs.com/2015-16/p/13301971.html
Copyright © 2011-2022 走看看