以顺序表存储非空线性表编写一个实现线性表就地逆置的算法。空间复杂度均是O1。#include iostreamusing namespace std;const int MaxSize=100;typedef int DataType;DataType dataMaxSize;int length;void reverseList void show
算法思路:
- 使用两个指针,一个指向顺序表的第一个元素,一个指向顺序表的最后一个元素。
- 交换两个指针指向的元素,并将指针向中间移动一位。
- 重复步骤2,直到两个指针相遇或者交叉。
- 此时顺序表已经逆置完成。
算法实现:
void reverseList()
{
int low = 0; // 第一个元素的下标
int high = length - 1; // 最后一个元素的下标
while (low < high) {
// 交换low和high指向的元素
DataType temp = data[low];
data[low] = data[high];
data[high] = temp;
// 移动指针
++low;
--high;
}
}
时间复杂度分析: 该算法使用了两个指针,分别从两端向中间移动,时间复杂度为O(n),其中n为线性表的长度。
空间复杂度分析: 该算法只使用了常数个额外的变量,因此空间复杂度为O(1)。
原文地址: http://www.cveoy.top/t/topic/i8Et 著作权归作者所有。请勿转载和采集!