设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)。
算法思想:扫描顺序表L的前半部分元素,对于元素L.data[i] (0<=i<L.length/2),将其与后半部分的对应元素L.data[L.length - i - 1]进行交换。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define MaxSize 10
//定义顺序表结构
typedef struct
{
int data[MaxSize];
int length;
}SqList;
//初始化一个顺序表
void InitList(SqList& L) {
L.length = 0;
int num;
for (int i = 0; i < MaxSize; i++) {
printf("请输入:");
scanf("%d", &num);
if (num == -1) {
break;
}
L.data[i] = num;
L.length++;
}
}
void SortList(SqList& L) {
int s = 0;
for (int i = 0; i < L.length/2; i++) {
s = L.data[i];
L.data[i] = L.data[L.length - i - 1];
L.data[L.length - i - 1] = s;
}
}
int main() {
SqList L;
InitList(L);
int re = 0;
printf("原始顺序表:\n");
for (int i = 0; i < L.length; i++) {
printf("%d\t", L.data[i]);
}
printf("\n");
SortList(L);
printf("置换后的顺序表为:\n");
for (int i = 0; i < L.length; i++) {
printf("%d\t", L.data[i]);
}
printf("\n");
return 0;
}