课程设计题目:线性表逆置实验
一、问题描述
试分别以顺序表和单链表作存储结构,各写一实现线性表就地逆置的算法。
二、基本要求
- 逆置线性表。
- 就地(空间复杂度至多 O ( 1 ) O(1) O(1))。
三、概要设计
1. 数据结构的设计
依题目要求,本实验采用顺序表和单链表。
2. 算法的设计
对于顺序表的逆置,我们使用两个指针i
和j
,分别从左到右和从右到左扫描,交换元素,直到相遇。
伪代码如下
void reverse() {
for (int i = 0, j = length - 1, t; i < j; i++, j--)
t = data[i], data[i] = data[j], data[j] = t;
}
时间复杂度 | 空间复杂度 |
---|---|
O ( n ) O(n) O(n) | O ( 1 ) O(1) O(1) |
对于单链表的逆置,我们使用按链表顺序对 Node 使用头插法。
伪代码如下
void reverse() {
Node *p = first.next;
first.next = NULL;
for (; p;) {
Node *s = p;
p = s->next;
s