基础数据结构总结

线性表

算法contains(Object e)、indexOf(Object e)主要是在线性表中查找某个数据元素。只是存在查找可能会出现不成功的情况。此时可以假设在具有n
个数据元素的线性表中包含一个本不属于线性表的数据元素an+1,如果把查找不成功的情况对应为查找本不属于线性表的数据元素an+1,则上述两个算法数组实现的平均时间复杂度可以对应为在具有n+1 个数据元素的数组中查找成功的情况(这时查找不成功的机率为1/(n+1)),算法运行时间T(n)= ((n+1)+1)/2 ≈ n/2。


算法insert(int i, Object e)、remove(int i)主要是按照线性表中的序号来完成数据元素的插
入与删除。在使用数组实现时,算法的时间复杂度在对数组基本操作的分析中已经说明,要
完成这些操作平均要移动数组中大约一半的数据元素。并且如果在插入数据元素的过程中,
出现了数组空间的扩展,通过前面的均摊分析我们知道对于每个数据元素而言需要的时间是
常数,因此算法的运行时间T(n)≈n/2。


算法insertBefore(Object obj, Object e)、insertAfter(Object obj, Object e)、remove(Object e)
是按照线性表中的某个特定数据元素来完成数据元素的插入、删除操作。此时算法可以看成
由两个部分组成,首先需要在线性表中找到对应的数据元素,然后按照数据元素在线性表中
的位置来完成相应的插入和删除操作。在使用数组实现时,算法的运行时间T(n) ≈ n。



在单链表中查找操作的运行时间与在数组中的查找操作一样,在平均情况下需要比较大
约一般的数据元素,即T(n) ≈ n/2。


并且在已知单链表中某个结点
引用的基础上,完成结点的插入操作需要的时间是Θ(1)。由于在单链表中数据元素的插入
是通过节点的插入来完成的,因此在单链表中完成数据元素的插入操作要比在数组中完成数
据元素的插入操作所需Ο(n)的时间要快得多。


在单链表中删除一个结点时,除首结点外都必须知道该结点的直
接前驱结点的引用。并且在已知单链表中某个结点引用的基础上,完成其后续结点的删除操
作需要的时间是Θ(1)。



如果在线性表的使用中主要操作是查找,那么应当选用顺序存储实
现的线性表。

如果在线性表的使用中主要操作是插入、删除操作,
那么选用链式存储的线性表为佳。


后序的时间复杂度分析和先序、中序
遍历算法一样,其时间复杂度T(n) = Ο(n)。


基于线性结构的查找主要介绍两种最常见的查找方法:顺序查找和折半查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值