顺序表的基本操作

1静态数组的创建

#define MaxSize 10;       //顺序表的最大长度

typedef struct{

        int data [MaxSize];       //用静态数组存储数据元素

        int length;         //顺序表的当前长度

}SqList;          //顺序表的类型定义

void InitList(SqList &L){         //初始化一个顺序表

        L.length=0;         //顺序表的初始长度为0

}

2动态数组的创建

#define InitSize 10;        //顺序表的初始长度

typedef struct{

         int *data      //指示分配动态数组的指针

        int MaxSize;        //顺序表的最大容量

        int length;        //顺序表的当前长度

}SeqList;        //顺序表的类型定义

3顺序表的基本操作——插入

bool ListInsert(SeqList &L,int i,int e){

        if(i<1 || i>L.length+1)        //判断 i 的范围是否有效

                return false;

        if(L.length>=L.MaxSize)        //内存不足,分配失败

                return false;

        for(int j=L.length; j>=i; j--)

                L.data[j] = L.data[j-1];        //将第i及以后的元素后移一位

        L.data[i-1]=e;        //在第i位置插入元素e

        L.length++;        //顺序表的长度加1

        return true;

}

插入操作的时间复杂度:

最好情况:新元素插入到表尾,不需要移动元素

                  i=n+1,循环0次,最好时间复杂度为O(1);

最坏情况:新元素插入到表头,需要将原有的n个元素全部都向后移;

                  i=1,循环n次;最坏时间复杂度为O(n);

平均情况:假设新元素插入到任何一个位置的概率相同,即i=1,2,3......length+1的概率都是p=1/(n+1);

                  平均时间复杂度为O(n);

4.顺序表的基本操作——删除

bool ListDelete(SeqList &L, int i, int &e){

        if(i<1 || i>L.length)        //判断 i 的范围是否有效

                return false;

        e=L.data[i-1];        //将被删除的元素赋值给e

        for(int j=i; j<L.length; j++)        //将第i位置后的全部元素前移

                L.data[j-1] < L.data[j];

        L.length--;        //顺序表的长度减1

        return true;

}

删除操作得时间复杂度

最好情况:删除表尾元素,不需要移动其他元素

                  i=n,循环0次,最好时间复杂度为O(1);

最坏情况:删除表头元素,需要将后续的n-1个元素全部向前移动

                  i=1,循环n-1次,最坏时间复杂度为O(n);

平均情况:假设删除任何一个元素的概率相同,即i=1,2,3......length的概率都是p=1/n;

                  平均时间复杂度为O(n);

5顺序表的基本操作——查找

GetElem(L, i)按位查找操作。获取表L中第 i 个位置的元素的值。

int GetElem(SqList L, int i){

        if(i<1 || i>L.length)

                return false;

        return L.data[i-1];

}

按位查找时间复杂度O(1);

LocateElem(L, e)按值查找操作。在表L中查找具有给定关键字值的元素。

int GetElem(SqList L, int i){

        if(i<1 || i>L.length)

                return false;

        return L.data[i-1];

}

按值查找的时间复杂度

最好情况:目标元素在表头

                  循环1次;最好时间复杂度为O(1);

最坏情况:目标元素在表尾

                  循环n次,最坏时间复杂度为O(n);

平均情况:假设目标元素出现在任一位置的概率相同,都是1/n

                  平均时间复杂度为O(n);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值