对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素。
- 解法一:用两个指针同时从头开始遍历顺序表,p指针用来判断当前元素是都需要留下来,如果需要留下来,就覆盖到q指针当前所指的位置,如果需要删除,则忽略当前元素,p指针指向下一个结点,再次重复这个步骤。
- 因为这个顺序表是需要丢弃一部分的,所以p指针一定会走在q指针的前面,当p指针指到最后一个元素且判断之后结束。
- 解法二:用k记录需要留下的元素的个数,遍历时将不等于x的元素覆盖到下标为k的位置,并更新k的值。
- 这个k又充当下标,又记录长度,真是妙啊。
- 代码如下:
#include <stdio.h>
#define maxsize 50
typedef int ElemType;
typedef struct{
ElemType data[maxsize];
int length;
}SqList;
void Delete(SqList &L, ElemType e