- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
⑴若线性表需频繁查找却很少进行插入和删除操作,或其操作和元素在表中的位置密切相关时,宜采用顺序表作为存储结构;若线性表需频繁插入和删除时,则宜采用单链表做存储结构。 ⑵当线性表中元素个数变化较大或者未知时,最好使用单链表实现;而如果用户事先知道线性表的大致长度,使用顺序表的空间效率会更高。 单链表的实现——销毁函数 销毁函数将单链表中所有结点的存储空间释放。 2.3 线性表的链接存储结构及实现 操作接口:int destroyLinkList(LinkList L ); L a1 a2 an ∧ ai p q 算法描述: q=p; p=p-next; delete q; p 注意:保证链表未处理的部分不断开 单链表的实现——销毁函数 int destroyLinkList(LinkList L ) { p=L; while (p) { q=p; p=p-next; delete q; } return 1; } 2.3 线性表的链接存储结构及实现 算法描述: 启示:算法设计的一般过程 算法设计的一般步骤: 第一步:确定入口(已知条件)、出口(结果); 第二步:根据一个小实例画出示意图; 第三步:① 正向思维:选定一个思考问题的起点,逐步提出问题、解决问题;② 逆向思维:从结论出发分析为达到这个结论应该先有什么;③ 正逆结合; 第四步:写出具体算法,分析边界情况; 第五步:进一步验证,手工运行。 存储分配方式比较 顺序表采用顺序存储结构,即用一段地址连续的存储单元依次存储线性表的数据元素,数据元素之间的逻辑关系通过存储位置来实现。 单链表采用链接存储结构,即用一组任意的存储单元存放线性表的元素。用指针来反映数据元素之间的逻辑关系。 2.4 顺序表和单链表的比较 2.4 顺序表和单链表的比较 时间性能比较 按位查找: 顺序表的时间复杂度为O(1),是随机存取; 单链表的时间复杂度为O(n),是顺序存取。 插入和删除: 顺序表需移动表长一半的元素,时间复杂度为O(n) 单链表不需要移动元素,在给出某个合适位置的指针后,插入和删除操作所需的时间复杂度仅为O(1) 2.4 顺序表和单链表的比较 空间性能比较 空间性能是指某种存储结构所占用的存储空间的大小。 定义结点的存储密度: 数据域占用的存储量 整个结点占用的存储量 存储密度= 2.4 顺序表和单链表的比较 空间性能比较 结点的存储密度: 顺序表中每个结点的存储密度=1(只存储数据元素),没有浪费空间; 单链表的每个结点的存储密度1(包括数据域和指针域),有指针的存储空间开销。 整体结构: 顺序表需要预分配存储空间,如果预分配得过大,造成浪费,若估计得过小,又将发生上溢; 单链表不需要预分配空间,只要有内存空间可以分配,单链表中的元素个数就没有限制。 结论 2.4 顺序表和单链表的比较 总之,线性表的顺序实现和链表实现各有其优缺点,不能笼统地说哪种实现更好,只能根据实际问题的具体需要,并对各方面的优缺点加以综合平衡,才能最终选定比较适宜的实现方法。 单链表:线性表的链接存储结构。 存储思想:用一组任意的存储单元存放线性表的元素。 2.3 线性表的链接存储结构及实现 单链表 数组存储分配 顺序表 事先确定容量 链 表 动态存储分配 运行时分配空间 连续 不连续 零散分布 0200 0208 0300 0325 … … … … 存储特点: 逻辑次序和物理次序 不一定相同。 2.元素之间的逻辑关系 用指针表示。 2.3 线性表的链接存储结构及实现 例:(a1, a2 ,a3, a4)的存储示意图 单链表 a1 0200 a2 0325 a3 0300 a4 ∧ 2.3 线性表的链接存储结构及实现 单链表 结点 数据域 指针域 单链表是由若干结点构成的; 单链表的结点必须有一个指针域。 data:存储数据元素 next:存储指向后继结点的地址 单链表的结点结构: 数据域 指针域 data next 0200 0208 0300 0325 … … … … a1 0200 a2 0325 a3 0300 a4 ∧ struct node { ElemType data; struct node *next; }; 2.3 线性表的链接存储结构及实现 如何申请一个结点? 单链表的结点结构: 数据域 指针域 data next s=new struct node ; … … s
文档评论(0)