码迷,mamicode.com
首页 > 其他好文 > 详细

线性表

时间:2016-06-05 23:05:39      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:

;线性表定义 有以下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这个让增加变得效率低),查询的时候折半查找法,,缺点是牺牲了增加的效率提高了查询效率,可根据需求权衡
如要求查询效率高的地方可以这么干

线性表

标签:

原文地址:http://www.cnblogs.com/jk0011/p/5561968.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!