【问题描述】
设计一个高效算法,将顺序表L中的所有元素逆置,要求算法的空间复杂度为O(1)。
【输入形式】
两行,第一行是输入数据数量,第二行是线性表数据,元素之间用空格间隔。
【输出形式】
输入线性表的逆序,元素之间用空格间隔
【样例输入】
5
1 2 3 4 5
【样例输出】
5 4 3 2 1
【样例说明】
输入数据是整数列,数据间以空格分开。
【评分标准】
必须使用顺序表存储元素,算法空间复杂度O(1),顺序表存储实现逆序。
#include<iostream>
using namespace std;
const int MAXSIZE = 100;
struct seqList {
int data[MAXSIZE]; //存放数组
int length; //顺序表长度
};
//创建顺序表,n为顺序表长度
void create(seqList& L,int n) {
L.length = 0;
for (int i = 0; i < n; i++) {
cin >> L.data[i];
L.length++;
}
}
//逆置顺序表
void Reverse(seqList& L) {
int temp; //交换中介
for (int i = 0; i <L.length / 2; i++) {
temp = L.data[i];
L.data[i] = L.data[L.length - i - 1];
L.data[L.length - i - 1] = temp;
}
}
//遍历顺序表
void print(seqList L,int n) {
for (int i = 0; i < n; i++) {
cout << L.data[i] << " ";
}
}
int main() {
seqList L; int n;
cin >> n;
create(L,n);
Reverse(L);
print(L, n);
}