数据结构-线性表-顺序存储

目录

一、线性表的定义

一、线性表的基本操作

*时间复杂度


一、线性表的定义

        线性表具有相同数据类型的n个数据元素的有限序列

#define MaxSize 50        //线性表的最大长度
typedef struct{           
    int data[MaxSize];    //线性表的元素
    int length;           //线性表的当前长度
}SqList                   //线性表的类型定义

一、线性表的基本操作

InitList(&L):初始化表。构建一个空的线性表

Length(L):求表长。返回线性表的长度。元素个数

LocateElem(L,e):按值查找。

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

ListInsert(&L,i,e):插入操作。L表中第i个位置插入指定元素e

ListDelete(&L,i,&e):删除元素。删除表中第i个位置的元素,并用e返回删除的元素

PrintList(L):输出操作。按前后顺序输出表L的值

Empty(L):判空操作。若为空,返回true,否则false

DestroyList(&L):销毁操作。销毁表,并释放表所占的空间

插入操作

//在顺序表L中第i个位置插入新的元素e,i的合法范围为1<= i <= L.length+1(插入)
//插入的过程中,增加一个数据位,需要移动数据时,先移动数据,然后将数据插入
bool ListInsert(Sqlist &L,int i, ElemType e){
    
    if(i<1 || i>L.length + 1) //判断i范围是否有效
        return false;  
    if(L.length == MAXSIZE) //存储空间已满,不能插入
        return false;    
    
    for(int j = L.length; j >= i; j--)
        L.data[j] = L.elem[j-1];    //插入位置及之后的元素后移
    L.data[i-1] = e;            //将新元素e放入第i个位置
    L.length++;                 //表长增1
    return true;                  
    
}

*时间复杂度

最好情况:表尾插入O(1)

最坏情况:移动n个元素O(n)

平均情况:假设\tiny P_i=\frac{1}{n+1} 在第i个位置插入的概率,在长度为n的表中插入一个节点平均次数为

*移动元素计算:表长n,第 i \tiny ( 0\leqslant i\leqslant n )个位置插入数据e,需要移动多少个元素

移动元素个数=\tiny n-i+1 

n个元素有n+1个位置插入

平均情况为 

\tiny \sum_{i=1}^{n+1}P^i(n-i+1)=\sum_{i=1}^{n+1}\frac{1}{n+1}(n-i+1)=\frac{1}{n+1}\sum_{i=1}^{n+1}(n-1+1)=\frac{1}{n+1}\frac{n(n+1)}{2}=\frac{n}{2}

*申请空间 假如以有长度为n的表,申请增加m个空间失败,说明没有系统 n+m 连续的存储空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值