线性表之顺序存储结构删除操作
来源:互联网 发布:软件bs架构 编辑:程序博客网 时间:2024/06/10 03:58
线性表之顺序存储结构删除操作
线性表顺序存储结构知识补充
线性表顺序存储的结构代码:
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int length; // 线性表当前长度
} SqList;
顺序存储结构封装需要三个属性:
存储空间的起始位置,数组data,它的存储位置就是线性表存储空间的存储位置。
线性表的最大存储容量:数组的长度MaxSize。
线性表的当前长度:length。
注意:数组的长度与线性表的当前长度需要区分一下:数组的长度是存放线性表的存储空间的总长度,一般初始化后不变。而线性表的当前长度是线性表中元素的个数,是会变化的
顺序存储结构的优缺点:
优点:
无须为表示表中元素之间的逻辑关系而增加额外的存储空间。
可以快速地存取表中任意位置的元素。
缺点:
插入和删除操作需要移动大量元素。
当线性表长度变化较大时,难以确定存储空间的容量。
容易造成存储空间的“碎片”。
1.删除操作的算法思路
如果删除位置不合理,抛出异常;
取出删除元素;
从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置;
表长length=length-1。
2.删除操作的时间复杂度
最好的情况:删除操作刚好要求在最后一个位置操作,因为不需要移动任何元素,所以此时的时间复杂度为O(1)。
最坏的情况:如果要删除的位置是第一个元素,那就意味着要移动所有的元素向后或者向前,所以这个时间复杂度为O(n)。
至于平均情况,就取中间值O((n-1)/2),平均情况复杂度简化后还是O(n)。
1.6代码清单
/** 初始条件:顺序线性表L已存在,1<=i<=ListLength(L) *操作结果:删除L的第i个数据元素,并用e返回其值,L的长度-1 */Status ListDelete(SqList *L, int i, ElemType *e){ int k; if( L->length == 0 ) { return ERROR; } if( i<1 || i>L->length ) { return ERROR; } *e = L->data[i-1]; if( i < L->length ) { for( k=i; k < L->length; k++ ) { L->data[k-1] = L->data[k]; } } L->length--; return OK;}
2.1插入算法的思路:
如果插入位置不合理,抛出异常;
如果线性表长度大于等于数组长度,则抛出异常或动态增加数组容量;
从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;
将要插入元素填入位置i处;
线性表长length=length+1
2.2插入算法的时间复杂度
最好的情况:插入操作刚好要求在最后一个位置操作,因为不需要移动任何元素,所以此时的时间复杂度为O(1)。
最坏的情况:如果要插入的位置是第一个元素,那就意味着要移动所有的元素向后,所以这个时间复杂度为O(n)。
至于平均情况,就取中间值O((n-1)/2),平均情况复杂度简化后还是O(n)。
2.3代码清单
Status ListInsert(SqList *L, int i, ElemType e){ int k; if( L->length == MAXSIZE ) // 顺序存储已满 { return ERROR; } if( i<1 || i>L->length+1) // 插入位置不在存储范围内 { return ERROR; } if( i <= L->length ) // 插入位置在表长以内且不在表尾 { for( k=L->length-1; k >= i-1; k-- ) { L->data[k+1] = L->data[k];//将要插入的位置的数据元素向后移动一位 } } L->data[i-1] = e; // 插入新元素 L->length++; return OK;}
- 线性表之顺序存储结构删除操作
- 数据结构一一线性表的顺序存储结构之删除操作
- C语言实现线性表之顺序存储结构操作
- 线性表顺序存储结构操作
- 线性表顺序存储结构的操作
- 线性表顺序存储结构的操作
- 线性表顺序存储结构基本操作
- 线性表之顺序表存储结构
- 数据结构:线性表之顺序存储结构
- 线性表之顺序存储结构
- 数据结构-线性表之顺序存储结构
- 线性表之顺序存储结构
- 【数据结构】线性表之顺序存储结构
- 线性表之顺序存储结构
- 数据结构之顺序存储结构线性表
- 数据结构:线性表之顺序存储结构
- C# 线性表之顺序存储结构
- 线性表之顺序存储结构
- unity开发 --------- c# 基本语法 002
- 用友NC6该产品的用户数已达到产品授权数!
- Word Break II
- Python序列化的使用(有少量修改)
- 谷歌在招什么样的人?
- 线性表之顺序存储结构删除操作
- form外观控制
- SQL Server 2012 安装图解教程
- ip转换为基本类型的简单封装
- hadoop 单机 伪分布式 完全分布式 区别
- media and camera 框架之二: MediaRouter
- 虚拟xp扩充C盘大小的方法
- 我对软件开发的一些感悟
- Android修改文件权限遇到的问题