将一个数组的数据按相反的顺序储存

将一个数组的数据按相反的顺序储存;int a[10]={1,2,3,4,5,6,7,8,9,0},处理完成后,数组的内容变成{0,9,8,7,6,5,4,3,2,1}

思路:

1.利用数组,将数组的首地址和末地址分别保存为left,right.首末位置的元素两两相互交换,left向右移,left++。right向左移,right–。当left等于right时,跳出循环。

具体代码:
#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
void Reserve(int arr[], int sz)
{
    int left = 0;
    int right = sz - 1;
    while (left < right)
    {
        int temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
        left++;
        right--;
    }
}

int main()
{
    int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    Reserve(arr, sz);
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }
    getchar();
    return 0;
}

结果:
这里写图片描述
2.利用指针:利用指针来实现left,right

具体代码:
#include<stdio.h>
#include<assert.h>
void Reserve(int *left,int *right)
{

    assert(left != NULL);
    assert(right != NULL);
    while (left < right)
    {
        int temp = *left;
        *left = *right;
        *right = temp;
        left++;
        right--;
    }
}

int main()
{
    int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    Reserve(arr ,arr+sz-1);
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d ",arr[i]);
    }

    getchar();
    return 0;
}

结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/cute_Niu/article/details/81231937