博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《数据结构与算法 C语言版》—— 2.6小结
阅读量:7114 次
发布时间:2019-06-28

本文共 1367 字,大约阅读时间需要 4 分钟。

本节书摘来自华章出版社《数据结构与算法 C语言版》一 书中的第2章,第2.6节,作者:徐凤生,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.6小结

线性表是整个数据结构课程的重要基础,本章的主要内容如下。

一个线性表是由n个数据元素构成的有限序列,其特点是数据元素之间存在着线性关系。在计算机中表示这种关系的两种不同的存储结构是顺序存储结构(顺序表)和链式存储结构(链表)。
1顺序表
顺序表是在内存中用一组地址连续的存储单元依次存储线性表的数据元素,借助数组来实现。顺序表中数据元素之间的逻辑关系通过其“存储位置相邻”来表示。
对于顺序表,主要有初始化、建立、销毁、插入、删除、按值查找等基本操作。插入和删除操作约需移动一半的元素,时间复杂度为O(n)。
2链表
除了常用的单链表外,还有单循环链表、双向链表、双向循环链表、静态链表等不同的形式,它们有不同的应用场合。单链表是链表中的重点,掌握了单链表之后,其他形式的链表就易于掌握了。
(1)单链表
链式存储结构是用一组地址任意的存储单元存储线性表中的数据元素。其中,单链表是一种最简单的链式存储结构,在C语言中可用“结构指针”来描述。
为了使在任意位置插入或删除结点时操作统一,常在单链表的第一个结点(也称首元结点)前附设一个结点,称为头结点。头结点的数据域可以不存储任何信息,也可存储链表的长度等附加信息,头结点的指针域存储指向第一个结点的指针。
对于单链表,主要有初始化、求表长、按序号查找、按值查找、插入、删除、建立等操作。其中,插入和删除操作只需修改指针,而不必移动数据元素,其时间复杂度为O(n)。单链表的建立有头插法和尾插法两种方法。
(2)单循环链表
在单链表的基础上,将最后一个结点的指针域指向头结点得到单循环链表。单循环链表和单链表的差别仅在于,判别链表中最后一个结点的条件不再是“后继是否为空”,而是“后继是否为头结点”。单循环链表相关操作的实现几乎与单链表的相应操作完全相同,只是注意最后一个结点的指针要指向头结点。单循环链表往往只设尾指针。
(3)双向链表
双向链表与单链表相比,增加了一个指向前驱的指针域。双向链表各种操作的实现可以仿照单链表的相应操作来完成,只是注意需要修改两个指针。一个双向链表L可以看成由两个方向相反的单链表组成,其中一个是带头结点的单链表(L指向头结点),一个是不带头结点的单链表(L指向尾结点),因此,在双向链表中删除尾结点和删除其他位置的结点的操作是不同的,在尾部插入结点和在其他位置插入结点的操作也是不同的,这只需要从两个单链表考虑就能很好地理解。另外,还需注意双向链表与单链表建立时操作的异同。
(4)双向循环链表
双向循环链表与双向链表相比,只是将头结点的前驱指针域指向最后一个结点,因此,双向循环链表的操作与双向链表相似。一个双向循环链表可以也看成由两个方向相反的单循环链表组成。
(5)静态链表
静态链表是用数组来表示和实现链表,其相应的操作与单链表类似。
学完本章后,应熟练掌握顺序表和链表的查找、插入和删除,以及单链表建立的算法等,并能够设计出线性表应用的常用算法,如顺序表的合并、单循环链表的逆置等;要求能够从时间和空间复杂度的角度比较两者存储的不同特点及其应用场合,明确它们各自的优缺点。

转载地址:http://iyzel.baihongyu.com/

你可能感兴趣的文章
scala快速一览
查看>>
二维码生成原理
查看>>
ARC机制
查看>>
完成登录与注册页面的前端
查看>>
Java二十三设计模式之------中介者模式
查看>>
电子商城实录------项目目录的结构搭建及其说明3
查看>>
wget命令详解
查看>>
note_简单的数据绑定
查看>>
A Course on Borel Sets Exercise 1.3.3
查看>>
陶哲轩实分析 习题10.2.7 导函数有界的函数一致连续
查看>>
用C语言实现的轴对称变换
查看>>
陶哲轩实分析定理17.3.8(一)
查看>>
使用iostat分析IO性能
查看>>
left top right bottom问题
查看>>
android内存优化之图片压缩和缓存
查看>>
python中super与成员属性
查看>>
mysql 分库分表 ~ 方案选择浅谈
查看>>
回头再学Asp.net系列--基础篇(五)
查看>>
Linux 小知识翻译 - 「内核(kernel)」
查看>>
P3758 [TJOI2017]可乐
查看>>