此处记录常见的顺序表题目。
(1)顺序表--对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素。
下面给出了C++与C的解法。
算法思想:1.定义i,j变量,i变量用来指示顺序表的下标,用于指示所有元素,j元素用来保存目的顺序表长度,并用来指示下一个可以存储合法数据的位置。
2.遍历顺序表所有元素,当数据不是x时,则把合法数据加入线性表,j变量加1。
3.当遍历到的数据为x时,则不去理会,继续执行下次操作。
总结:简单说,就是合法数据加入顺序表,顺序表长度加一。
例子:
/*对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素*/ #define MAXSIZE 50 typedef int ElemType; typedef struct{ ElemType data[MAXSIZE]; int length; }SqList; //1.C语言 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; } //2.C++语言 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=k;//length是计算的个数,从1开始算起,所以j++后,作为长度是正好的 return true; }
原文:https://www.cnblogs.com/hmy-666/p/13486460.html