数据结构(四)--顺序表的操作

本文介绍了数据结构中顺序表的操作,包括插入和删除。插入操作在表尾插入的时间复杂度为O(1),在表头插入为O(n),平均时间复杂度为O(n)。删除操作删除表尾元素的时间复杂度为O(1),删除表头为O(n),平均时间复杂度同样为O(n)。顺序表的优点在于存储密度大和随机存取效率高,但插入和删除可能涉及大量元素移动。
摘要由CSDN通过智能技术生成

数据结构(四)–顺序表的操作

一. 插入操作

4.1 实现目标:在顺序表L的第i(1≤i≤Length+1)个位置插入新元素。如果i的输入不合法,则返回False,表示插入失败,否则,将顺序表的第i个元素以及其后的所有元素都右移一个位置,腾出一个空位置来插入新元素e,顺序表长度增加1,插入成功,返回True.

4.2 算法思路:

  1. 判断i的值是否正确
  2. 判断表长是否超过数组长度
  3. 从后向前到第i个位置,分别将这些元素都往后移动一位
  4. 将该元素插入位置i并修改表长

4.3 具体实现

bool ListInsert(SqList & L, int i, ElemType e){
   
	if(i<1 || i>L.length+1)
		return false;
     if(L.length>=MaxSize)
     	return false;			//当前存储空间已满,不能插入
     for(int j=L.length; j>=i; j--){
      //将第i个元素及之后的元素后移
     	L.data[j]=L.data[j-1];
     	
     }
     L.data[i-1]=e;   //在位置i处放入e
     L.length++;
     return true;
}

4.4 分析顺序存储的插入算法

最好情况:在表尾插入(即i=n+1),元素后移语句将不执行,时间复杂度为O(1).

最坏情况:在表头插入(即i=1),元素后移语句将执行n次,时间复杂度为O(n)

平均情况:假设pi(pi=1/(n+1))是在第i个位置上插入一个结点的概率,则在长度为n的线性表中插入一个结点时所需移动结点的平均次数是:
∑ i = 1 n + 1 p i ( n − i + 1 ) = ∑ i = 1 n + 1 1 n + 1 ( n − i + 1 ) = 1 n + 1 ∑ i = 1 n + 1 ( n − i + 1 ) = 1 n + 1 ( n ( n + 1 ) 2 ) = n 2 \sum_{i=1}^{n+1}{p_i(n-i+1)}=\sum_{i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值