笔试题:顺序表元素删除
笔试题:
长度为n的线性表L,编写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素.
解决方法:
用K记录顺序表中不等于x的元素个数(即需要保存的元素个数),边扫描L边统计k,并将不等于x的元素像前放置K个位置,最后修改L的长度.
#include <stdio.h>#include <stdlib.h>#define MaxSize 50typedef struct{ int data[MaxSize]; int length;}SqList; void del_x(SqList &L,int x) { int k=0; for(int i=0;i<L.length;i++) if(L.data[i]!=x) { L.data[k]=L.data[i]; k++; //不等于x的元素个数加1 } L.length=k; //顺序表L的长度等于K }int main(){ SqList Data; Data.length=10; for(int i=1;i<Data.length;i=i+2) Data.data[i]=i; for(int i=0;i<Data.length;i=i+2) Data.data[i]=0;//调用函数前Data.data[10]={0,1,0,3,0,5,0,7,0,9}//调用函数删除元素0,并修改Length的长度. del_x(Data,0);//显示删除完成后的顺序表. for(int i=0;i<Data.length;i++) printf("%d",Data.data[i]); system("pause"); }