设有一线性表e=(e1 , e2 , … , en-1 , en),其逆线性表定义为e'=( en , en-1 , … , e2 , e1),请设计一个算法,将线性表逆置,要求逆线性表仍占用原线性表的空间,并且用顺序表和单链表两种方法来表示,写出不同的处理函数。
时间: 2023-03-19 07:26:38 浏览: 282
数据结构实验 线性表的逆置
5星 · 资源好评率100%
顺序表的处理函数:
1. 定义两个指针i和j,分别指向线性表的第一个元素和最后一个元素。
2. 交换i和j所指向的元素,并将i向后移动一位,j向前移动一位,直到i>=j为止。
单链表的处理函数:
1. 定义三个指针p、q、r,分别指向线性表的第一个、第二个和第三个元素。
2. 将p的next指针指向NULL,q的next指针指向p,r的next指针指向q。
3. 将p、q、r依次向后移动一位,直到r指向NULL为止。
4. 将原线性表的头指针指向逆置后的第一个元素。
顺序表的处理函数代码:
void reverse(SeqList &L) {
int i = , j = L.length - 1;
while (i < j) {
swap(L.data[i], L.data[j]);
i++;
j--;
}
}
单链表的处理函数代码:
void reverse(LinkList &L) {
if (L == NULL || L->next == NULL) {
return;
}
ListNode *p = L, *q = p->next, *r = q->next;
p->next = NULL;
while (r != NULL) {
q->next = p;
p = q;
q = r;
r = r->next;
}
q->next = p;
L = q;
}
阅读全文