一、查找
按值查找:在顺序表中从头查找结点值等于给定值x的结点
int Find_1(SqList L,ElemType x)
{
int i=1;
ElemType *p;
for(p=L.elem;p;p++)//p++将指针p进到L.elem[]的下一个元素位置
{
if(*p!=x)
i++;
else
break;
}
if(i<=L.length)
return i;
else
return 0;
}
int Find_2(SqList L,ElemType x)
{
int i=0;
while(i<L.length&&L.elem[i]!=x)
{
i++;
}
if(i<L.length)
return i+1;
else
return 0;
}
算法时间复杂度O(n)
二、插入
【算法思想】
(1)判断顺序表的存储空间是否已满。
(2)判断插入位置i是否合法。
(3)将第n至第i位的元素依次向后移动一个位置,空出第i个位置。
(4)将要插入的新元素e放入第i个位置。
(5)表长加1,插入成功返回OK
bool Insert(SqList L,ElemType x,int i)
{
//在表中第i个位置插入新元素x
if(i<1||i>L.length+1)
return 0;
if(L.length==L.listsize)
return 0;
//参数不合理或表已满,插入不成功
for(int j=L.length-1; j>=i-1; j--)
{
//插入位置及之后的元素后移
L.elem[j+1]=L.elem[j];
}
L.elem[i-1]=x;//实际插在第i-1个位置
L.length++;
return 1;//插入成功
}
算法的时间复杂度O(n)
三、删除
【算法思想】
(1)判断表是否非空
(2)判断删除位置是否合法(合法值1<=i<=n)
(3)将欲删除的元素保留在e中。
(4)将第i+1至第n位的元素依次向前移动一个位置。
(5)表长减1,删除成功返回OK。
bool Delete(SqList L,int i,ElemType x)
{
//在表中删除第i个元素,通过x返回其值
if(!L.length)//表空,无法删除
return 0;
if(i>0&&i<=L.length)
{
x=L.elem[i-1];
L.length--;
for(int j=i-1;j<=L.length;j++)
{
L.elem[j]=L.elem[j+1];
}
return 1;//成功删除
}
return 0;//表中没有合法的位置
}
算法时间复杂度O(n)