0
点赞
收藏
分享

微信扫一扫

用指针实现数组元素多次逆置(用指针实现数组循环移动)

瑾谋 2022-04-16 阅读 59
c语言

hello,小伙伴们,大家好,废话不多说,先上题:
对长度为n的数组,先实现逆置前m个,再逆置其后面的,最后再整个逆置

关于利用指针逆置主要靠以下小操作;

t=*p,*p=*q.*q=t;

这不就是其核心吗,对,但也不完全对?更重要的在中值的选取:
mid=(末尾数下标+初始数下标)/2;

这一步理解可是关键,你也可以自己写几个数试一下

好了,现在解释为什么有两个标题:

用多次逆置的方法比如:       本题用三次逆置可以实现数组前m个元素移动到末尾,像是数组向左移动了m个长度:例如当m为3时,对数组(0 1 2 3 4 5 6 7 8 9)可至(3 4 5 6 7 8 9 0 1 2)

好了,理解上面之后咱就上代码了:

#include <stdio.h>

int main()

{

    int a[100],n,m,t,*p,*q;

    scanf("%d",&n);//输入整数个数

    for(i=0;i<n;i++)

    {

        scanf("%d",&a[i]);

    }

    p = a;

    scanf("%d",&m);//输入移动位数

    /***** 首先逆置数组前m个元素 *****/

    q=a+m-1;

   for(p=a;p<=a+(m-1)/2;p++,q--)

   {

       t=*p,*p=*q,*q=t;

   }

    /***** 逆置余下n-m个元素 *****/

    q=a+n-1;

    for(p=a+m;p<=a+(n-1+m)/2;p++,q--)

    {

        t=*p,*p=*q,*q=t;

    }

    /***** 逆置整个数组 *****/

     q=a+n-1;

     for(p=a;p<=a+(n-1)/2;p++,q--)

     {

         t=*p,*p=*q,*q=t;

     }

   //输出数组

    for(i=0;i<n;i++)

    {  

        printf("%d ",a[i]);

    }

    printf("\n");

    return 0;

}

好了小伙伴们,快去实操一下吧!

举报

相关推荐

0 条评论