线性表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性表相关的知识,希望对你有一定的参考价值。
;线性表定义 有以下3个点组成线性表
1线性表有头元素和尾元素
2表的长度即线性表中数据元素的数目
3线性表可以为空
;线性表特征
头元素没有前驱 尾元素没有后继
其余中间的每个数据元素都有一个唯一前驱和唯一后继
;抽象数据类型线性表,至少有以下几个操作
initList(&L) //构造空的线性表L
lengthList(L) //求线性表L的长度
getElem(L,i,&e) //取线性表L中第i个元素ai,由e返回ai
priorElem(L,ce,&pre_e)//求ce的前驱,由pre_e返回
insertElem(&L,i,e); //在L[i]元素之前插入新的元素e
deleteElem(&L,i)//删除L[i] 这个数据元素
emptyElem(L) //判断线性表L时候为空表
clearList(&L) //置L为空表
;动态数组堆的申请失败的原因
;动态数组
空间特点:空间是连续的
应用场合:
问题规模确定,随机访问频率高(arr[i] 即下标访问不知道值的访问) 数据更新频率低,增加删除操作频率低
例如键盘上的26个英文字母,字母更新频率低(很长时间不增加一个按键),敲击以下键盘相当于随机访问一次(随机访问率高)
;增加O(n)线性阶原因:
1空间不够的时候需重新申请空间
2插入的时候需要整体往后移动元素
3最优的时候,空间够并且尾部插入(不用移动元素) 这个时候出现算法的最优解,O(1)常量阶,所以多多推荐使用者使用尾部插入那么速度最快
;删除O(n)线性阶原因:
1移动元素
算法的最优解O(1),删除最后一个元素不用移动元素直接更改长度和大小
;查询O(n)原因:
1得遍历所有的元素看等不等于要查询的值
2优化成O(log2n)对数阶 每次增加完毕的时候做排序操作,然后查询使用折半查找法查找,缺点是牺牲了增加的效率提高了查询效率,可根据需求权衡
;修改O(1)原因:
1知道要修改的index索引值
2或者知道要修改的值的地址,这个可以在增加的时候返回这个元素的地址,由调用方保存所有值的地址,修改的时候传入地址值就好了
;修改O(n)原因:
1不知道值的索引或者地址,那么就要遍历
2优化成O(log2n),每次增加完做排序操作O(n2这个让增加变得效率低),查询的时候折半查找法,,缺点是牺牲了增加的效率提高了查询效率,可根据需求权衡
如要求查询效率高的地方可以这么干
以上是关于线性表的主要内容,如果未能解决你的问题,请参考以下文章