数据结构题:由逆置数组方法——逆置线性表L的所有元素
前言文章代码皆经Dev-C++ 5.11中测试无误,若有代码错误或表述不当,欢迎指正!题目输入一个数组,要求对该数组进行逆序然后输出。当我们想对一个数组的所有元素进行逆置时,可以通过for()循环,每次进行二分(这里的二分是对数组的长度进行),使每次数组的最左边和最右边的两个元素进行交换从而实现逆置,即将数组的长度/2,即当数组的长度为奇数时,剩下的那个元素不用逆置(因为它位于所以元素的中心,即使
前言
文章代码皆经Dev-C++ 5.11中测试无误,若有代码错误或表述不当,欢迎指正!
题目
输入一个数组,要求对该数组进行逆序然后输出。
当我们想对一个数组的所有元素进行逆置时,可以通过for()循环,每次进行二分(这里的二分是对数组的长度进行),使每次数组的最左边和最右边的两个元素进行交换从而实现逆置,即将数组的长度/2,即当数组的长度为奇数时,剩下的那个元素不用逆置(因为它位于所以元素的中心,即使逆序也不变),而当数组的长度为偶数时,逆置的元素刚好每次交换两个,如下代码:
#include<stdio.h>
int main() {
int s,i,a,temp,length;
int array[length];
printf("请输入数组的长度:\n");
scanf("%d",&length);
for(s=0; s<length; s++) {
printf("请输入数组array[%d]的值:\n",s);
scanf("%d",&array[s]);
}
printf("输出当前数组元素:\n");
for(a=0; a<length; a++)
printf("%d ",array[a]);
printf("\n");
for(i=0; i<length/2; i++) {
temp=array[i];
array[i]=array[length-i-1];
array[length-i-1]=temp;
}
printf("逆序输出数组元素:\n");
for(a=0; a<length; a++)
printf("%d ",array[a]);
return 0;
}
运行结果如下,例如输入一个数组长度为5,array={4,9,0,2,7}:
【王道•数据结构】 例、设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)。
其实这道题,可以按照逆置数组的方法来完成逆置顺序表L,因为它也是由数组组成的,关键部分为:
定义顺序表结构体:
#define MaxSize 50
typedef struct{
int data[MaxSize];
int length;
}SqList;
首先对顺序表L进行/2,将L中前半元素与后半元素进行交换,也就是交换L.data[i]和L.data[L.length-i-1],由于是考研所以只需写相对应实现的函数,且要求它的空间复杂度为O(1),代码如下:
void Reverse(SqList &L) {
int temp,i; //temp作为临时变量
for(i=0; i<L.length/2; i++) { //交换L.data[i]和L.data[L.length-i-1]
temp=L.data[i];
L.data[i]=L.data[L.length-i-1];
L.data[L.length-i-1]=temp;
}

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)