(二)数据结构-线性表
一、线性表的基本概念
线性表是具有
相同数据类型
的n(n>=0)
个数据元素的有序序列
,其中n为表长,当n=0的时候线性表是一个空表。
1.线性表是最基本且最常用的一种线性结构
2.线性结构的基本特点:除第一个元素无直接前驱,最后一个元素无直接后继外,其他每个元素都有一个前驱和后继。
二、 线性表的存储结构/物理结构
线性表的存储结构/物理结构分为:顺序表(顺序存储)、链表(链式存储)
三、线性表的顺序表示/顺序存储
3.1顺序表的定义
线性表的顺序存储又称为顺序表
线性表的顺序表示:指的是用一组地址连续的存储单元依次存储线性表的数据元素
注意:
1.线性表中元素的位序从1开始,而数组元素的下标是从0开始的
3.2顺序表特点
- 顺序表最主要的特点就是随机访问,即通过首地址和元素序号可在时间O(1)内找到制定的元素
- 顺序表的存储密度高,每个节点置存储数据元素。
- 顺序表逻辑上相邻的元素物理上也相邻,所以插入和删除需要移动大量的元素
- 表中元素的逻辑顺序与物理顺序相同
四、线性表的链式存储
- 单链表:
- 对于每个链表结点除了存放元素自身的信息之外,还需要存放一个指向后继的指针;(一个数据域data,一个指针域next)- 缺点:1.单链表结点只有一个指向后继的结点,使得单链表只能从头结点依次顺序地向后遍历- 缺点:2.要访问某个**节点**的前驱结点时,只能从头开始遍历O(n),访问后继结点时O(1)
- 双链表:
- 为了克服单链表的缺点,双链表结点中有两个指针域(prior,next)
- 分别指向其前驱结点,后继节点
- 循环链表:分为循环单、双链表
- 与单链表不同的是,表中最后一个结点不是null
- 而是指向头节点从而整个链表形成一个环
- 分别指向其前驱结点,后继节点
- 从表中任一一个结点出发都能找到线性表中的其他结点
- 静态链表:
- 与线性表一样,都需要预先分配一块连续的内存
- 结点有数据域data,指针域next(此处指针的结点是相对地址,是数组下标,又称为游标)
五、链式存储表示
5.1 单链表的定义
1.单链表由表头唯一确定,因此单链表可以用头指针的名字来命名
2.若头指针名字为L,则把链表成为表L
3.指针变量p:表示结点地址
结点变量*p:表示一个结点
5.2链表的存储表示
六、顺序表与链表的比较
存取(读写)方式
顺序表可以顺序存储,也可以随机
链表只能从表头顺序存取元素逻辑结构和物理结构
顺序存储:逻辑上相邻的元素,物理存储位置也相邻
链式存储:逻辑上相邻的元素,物理存储位置不一定相邻,对应的逻辑关系是通过指针链接来表示的查找、插入和删除操作
按值查找:顺序表无序,二者都是O(n)
若有序,可以采用折半查找,时间复杂度为O(log2n)
按序号查找:顺序表支持随机存储O(1),链表平均时间复杂度O(n)空间分配
顺序存储在静态存储分配情况下,一旦分配好就不能扩充,因此需要预先分配大量空间
链式存储只在需要时神情分配即可,内存有空间就可以分配,更高效、操作灵活
七、现实如何选取存储结构:
- 基于存储的考虑
难以估计线性表长度或存储规模不适合用顺序表 - 基于运算的考虑
按序号访问时顺序表时间复杂度O(1),链表O(n) - 基于环境的考虑
顺序表容易实现,任何高级语言都有数组类型;
而链表的操作是基于指针的
八、关于线性链表的术语:
1.结点:数据元素的存储映像。由数据域和指针域两部分组成
2.头结点:链表的首元结点之前设置的一个结点,结点内通常不存储信息(且单链表的长度是不包括头结点的)
3.头指针:是指向链表的第一个指针
8.1引入头结点的优点
1.便于首元结点的处理
首元结点(第一个数据结点)的地址在头节点的指针域中,所以在链表的第一个位置的操作和其他操作一致,无须进行特殊处理
2.便于空表和非空表的统一处理
无论链表是否为空,头指针都是指向头节点的非空指针
(二)数据结构-线性表相关推荐
- 数据结构-线性表之用队列实现栈用栈实现队列
文章目录 **********用队列实现栈 一:思路 二:实现 (1)结构体定义 (2)初始化和销毁 (3)进"栈" (4)出"栈" 三:代码 ******** ...
- 数据结构——线性表(三)
数据结构--线性表(三) 作者:黑衣侠客 一.线性表的定义 线性表,从名字来看,可以发现,是具有像线一样性质的表 线性表:零个或多个数据元素的有限序列. 首先,它是一个序列,也就是说,元素之间是有顺序 ...
- 数据结构-线性表之带头结点的双向循环链表
文章目录 前言 实现 (1)结构定义 (2)基本函数 (3)操作实现 测试 代码 前言 链表的类型有很多种(根据带头或不带头,循环或非循环等等),但是我们重点研究的只有两种,一种结构非常简单是无头单向 ...
- 数据结构摧毁线性表用c语言,[简述]数据结构-线性表(c语言实现)
[简述]数据结构-线性表(c语言实现)second60 20180422 1. 线性表的定义 线性表是具有相同特性的数据元素的一个有限序列. 2. 线性表抽象数据类型描述 ADT List { 数据 ...
- 王道数据结构线性表:有读者认为直接去掉p结点会造成断链?
王道数据结构线性表:有读者认为直接去掉p结点会造成断链? 我用图解的方式来说明一下,文字有点多,看起来比较眼疼,但是内容不多,希望能对你有帮助. 书上的代码 解释 (ps:对上面解释的一点补充↓)
- 数据结构-线性表(严书代码实现)
数据结构-线性表的顺序表示代码 //头文件内容实现 #ifndef SEQLIST_H_INCLUDED #define SEQLIST_H_INCLUDED #include<string.h ...
- 数据结构-线性表-思维导图+小结
数据结构-线性表思维导图+小结 1 数据结构-第二章-线性表-思维导图 2 数据结构-第二章-线性表-习题小结 2.1 概念性习题小结 2.2 操作性习题小结 1 数据结构-第二章-线性表-思维导图 ...
- 数据结构-线性表知识总结
一.线性表的逻辑结构 1. 线性表:是零个或多个具有相同类型的数据元素的有限序列. 非空表:L=(a1,a2,-,an)(ai为数据元素) 2.线性表的抽象数据类型定义 Date 线性表中的数据元素具 ...
- 数据结构线性表基本操作
数据结构线性表基本操作 基本内容 线性表的顺序表示和实现 线性表的顺序存储表示 顺序表中基本操作的实现 1.顺序表的初始化 2.取值 3.查找 4.插入 5.删除 线性表的链式表示和实现 单链表的定义 ...
最新文章
- Angular之Error: ExpressionChangedAfterItHasBeenChecked
- 电子商务应用课程知识整理 第四章-搜索引擎
- 7-7 六度空间 (30 分)(BFS遍历详解)(DFS最后一个点过不去)
- 唯美动态个人404单页HTML源码
- OPPO Enco Free真无线耳机:超低延迟高音质 智慧触控看得见
- Android 多层视差头部背景的实现
- php array_walk和array_map区别
- 易语言超级列表框怎么设置文本颜色_抖音超火的快闪动画怎么做?手把手教你!三分钟学会...
- cad批量打印_最好用的cad批量打印方法
- sci论文 计算机,计算机类SCI论文
- 【延展Extension的使用场景 Objective-C语言】
- android wps页面设置背景图片,wps word怎么设置背景图片
- AMD zen3 5600X + B550M 黑苹果 EFI Big Sur 11.5.2
- 《海洋测绘十年》序言
- 【自用】ESP32-S3新板子 从零配置micropython环境(安装CH343驱动等)
- Windows环境下Nginx配置本地虚拟域名和Nginx代理
- 基于百度api的违规文本识别 分词 tfidf关键词提取 违规文本检测
- [易飞]录入信息传递设置信息
- 听说Python成为世界性语言了? Python是怎么构建世界?字符串在哪里?(三)
- 第四十五讲:神州防火墙P2P流量控制配置