顺序表的基本操作(查找,插入,删除)

本文详细介绍了顺序表的查找算法Find_1和Find_2,它们的时间复杂度均为O(n)。随后讨论了插入和删除操作的实现,包括判断空间、定位位置、元素移动等步骤,同样强调了这两种操作的时间复杂度也是O(n)。
摘要由CSDN通过智能技术生成

一、查找

按值查找:在顺序表中从头查找结点值等于给定值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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值