顺序表
基本描述
话说, 人们都喜欢吃薯条和薯片或者零食 ,如果没有包装那不是拿不了,那么这个时候包装是不是很重要呢,
此时产生了顺序表;
顺序表:
能在图片看到了一个大仓库,这个大仓库里的数据是一致的,而且必须是一致的否则无法,访问
这就好比你吃薯片的时候,突然出现了食品安全问题
在就是顺序表
顺序表的优点:
- 访问数据时比较方便
直接通过 e[pos] 这个 pos<=0或者pos>=size-1 都可以访问
顺序表的缺点:
插入,删除需要大量的移动
顺序表的原理精讲
顺序表 是一种线性结构
存储时相邻的数据,在计算机里内存里面的位置也是相邻的
顺序表不仅仅是简单的数组,而且有特征
快速定位第n个数据元素
中间不能出现空值
支持插入和删除
通过移动数组每一个元素
达到插入和删除
删除数据元素
数据元素往前移动
元素的个数就会 -1
插入数据元素
数据元素往后移动
元素的个数就会 +1
顺序表三大要素
需要指向首元素的地址 ,存储的位置
称之为基地址
到底能存储的多少个元素
size
存储元素的个数
length
顺序表的算法实现
初始化
函数 init
返回值类型 bool
返回真 :一切正常
返回假:异常
参数为Sqlist &list, size=default_size
default_size=100
判断参数<=0
返回假
根据参数size 分配内存
new ElemType[size];
将new ElemType[size]返回值给接收者
list.elems
将list.length置为0
将list.size设置为参数size;
返回真
尾部追加元素
函数 listAppend
返回值类型 bool
返回真 :一切正常
返回假:异常
参数为Sqlist &list,ElemType &&elem 或者 const ElemType&elem
判断list.length要>=list.size
返回假
将第list.length个元素 添加进来
list.elems[lst.length]=elem;
将list.length往后偏移
++list.length;
返回真
插入元素
函数 listInsert
返回值类型 bool
返回真 :一切正常
返回假:异常
参数为Sqlist &list,int pos,ElemType &&elem 或者 const ElemType&elem
判断pos<0
返回假
判断 pos>=list.length
调用listAppend
数据后移
循环变量i=list.length-1位置
i=list.length-1;
i>=pos
数据后移
list.elems[i+1]=list.elems[i];
例如说i=4 i+1=5 前面的数据移动到后面的数据
--i;
将第pos的位置的数据设置为elem
list.elems[pos]=elem;
将list.length往后偏移
++list.length;
返回真
删除元素
函数 listDelete
返回值类型 bool
返回真 :一切正常
返回假:异常
判断pos<0
返回假
判断list.length<=0
返回假
判断 pos>=list.length-1
最后一个元素时
将list.length往前偏移
--list.length;
返回真
数据前移
循环变量i=pos 位置
i=pos;
i<list.length
数据前移
list.elems[i]=list.elems[i+1];
例如说i=4 i+1=5 后面的数据移动到前面的数据
++i;
将list.length往前偏移
--list.length;
返回真
销毁
函数 ListDestroy
返回值类型 void
参数为Sqlist &list
判断 list.elems
释放list.elems 指向的内存空间
delete[]list.elems;
list.length置为0
list.length=0;
list.size置为0
list.size=0;
顺序表添加元素 web link
顺序表添加元素
顺序表插入元素 web link
顺序表插入元素
顺序表删除元素 web link
顺序表删除元素