/*对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素*/
#define MAXSIZE 50
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];
int length;
}SqList;
bool Del_x_1(SqList *L,ElemType x){//这里给进结构体的指针,因为要改变原结构体内顺序表的值,给进指针会更方便一些,速度上也会快一些。
int i,j;
if(L->length==0)
return false;
for(i=0,j=0;i<L->length;i++)
if(L->data[i]!=x)
L->data[j++]=L->data[i];//注意这里i不要++,因为i是由循环体控制的
L->length=j;//length是计算的个数,从1开始算起,所以j++后,作为长度是正好的
return true;
}
线性表里顺序表的习题都比较简单,挑出这道题是因为有一个空间复杂度O(1)的要求,一个双指针,其实在字符数组那边也有类似的操作,这是个基本的思想。