线性表的基本操作方法

顺序表的基本运算方法

1)初始化线性表运算方法

将顺序表L的length域设置为0,对应的算法如下。

void InitList(SqList &L)
{
   L.length=0;
}

本算法的时间复杂度为O(1)。

2)销毁线性表运算算法

这里顺序表L作为自动变量,其内存空间是由系统自动分配的,在不需要时会由系统自动释放空间,所以函数不含任何语句。对应的算法如下

void DestroyList(SqList L)
{ }

3)求线性表长度运算算法

返回顺序表L的length域值,对应的算法如下

void GetLength(SqList L)
{
   return L.length;
}

本算法的时间复杂度为O(1)。

4)求线性表中第 i 个元素运算算法

对于顺序表L,算法在逻辑序号 i 无效时返回特殊值0(假),有效时返回1(真),并用引用型形参 e 返回第 i 个元素的值。对应的算法如下

int GetElem(SqList L,int i,ElemType &e)
{ 
   if(i<1||i>L.length)
      return 0;              //取无效的值返回0
   else
   {
      e=L.data[i-1];
      return 1;              //取元素值返回1
   }
}

本算法的时间复杂度为O(1)。

5)按值查找运算算法

在顺序表L中找第一个值为 x 的元素,找到后返回其逻辑序号,否则返回0(由于线性表的逻辑序号从1开始,这里用0表示没有找到值为 x 的元素)。对应的算法如下。

int Locate(SqList L,ElemType x)
{
int i=0;
while(i<L.length&&L.data[i]!=x)        //查找第一个值为x的元素查找范围0~L.length-1
i++;
if(i>=L.length)                        //未找到返回0
return (0);
else
return (i+1);                          //找到后返回其逻辑序号
}

本算法的时间复杂度为O(n), 其中 n 为 L 中的元素个数。

6)插入元素运算算法

将新元素 x 插入到顺序表 L 中逻辑序号为 i 的位置(如果插入成功,元素 x 成为线性表的第 i 个元素)。当 i 无效时返回0(表示插入失败),i 有效时将 L.data[i-1…L.length-1]均后移一个位置,再在 L.data[i-1]处插入 x ,顺序表长度增1,并返回1(表示插入成功)。对应的算法如下

int InsElem(SqList &L,ElemType x,int i)
{   int j;
    if(i<1||i>L.length+1)               //无效参数i
    return 0;
    for(j=L.length;j>i;j--)
    L.data[j]=L.data[j-1];              //将位置为i的元素及之后的元素均后移
    L.data[i-1]=x;                      //在位置i处放入x
    L.length++;                         //线性表长度增1
    return 1;                           
}

本算法的平均时间复杂度为O(n)。

7)删除元素运算算法

删除顺序表 L 中逻辑序号为 i 的元素。在 i 无效时返回0,i 有效时将 L.data[i…L.length-1]均前移一个位置,顺序表长度减1,并返回1。对应的算法如下

int DelElem(SqList &L,int i)
{
    int j;
    if(i<1||i>L.length)                  //无效的参数i
    return 0;
    for(j=i;j<L.length;j++)              //将位置i的元素之后的元素均前移 
    L.data[j-1]=L.data[j];
    L.length--;                          //线性表长度-1
    return 1;
}

本算法的平均时间复杂度为O(n)。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值