一、线性表的基本概念

线性表是具有相同数据类型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链表的存储表示

六、顺序表与链表的比较

  1. 存取(读写)方式
    顺序表可以顺序存储,也可以随机
    链表只能从表头顺序存取元素

  2. 逻辑结构和物理结构
    顺序存储:逻辑上相邻的元素,物理存储位置也相邻
    链式存储:逻辑上相邻的元素,物理存储位置不一定相邻,对应的逻辑关系是通过指针链接来表示的

  3. 查找、插入和删除操作
    按值查找:顺序表无序,二者都是O(n)
    若有序,可以采用折半查找,时间复杂度为O(log2n)
    按序号查找:顺序表支持随机存储O(1),链表平均时间复杂度O(n)

  4. 空间分配
    顺序存储在静态存储分配情况下,一旦分配好就不能扩充,因此需要预先分配大量空间
    链式存储只在需要时神情分配即可,内存有空间就可以分配,更高效、操作灵活

七、现实如何选取存储结构:

  1. 基于存储的考虑
    难以估计线性表长度或存储规模不适合用顺序表
  2. 基于运算的考虑
    按序号访问时顺序表时间复杂度O(1),链表O(n)
  3. 基于环境的考虑
    顺序表容易实现,任何高级语言都有数组类型;
    而链表的操作是基于指针的

八、关于线性链表的术语:

1.结点:数据元素的存储映像。由数据域和指针域两部分组成
2.头结点:链表的首元结点之前设置的一个结点,结点内通常不存储信息(且单链表的长度是不包括头结点的)
3.头指针:是指向链表的第一个指针

8.1引入头结点的优点

1.便于首元结点的处理
首元结点(第一个数据结点)的地址在头节点的指针域中,所以在链表的第一个位置的操作和其他操作一致,无须进行特殊处理
2.便于空表和非空表的统一处理
无论链表是否为空,头指针都是指向头节点的非空指针

(二)数据结构-线性表相关推荐

  1. 数据结构-线性表之用队列实现栈用栈实现队列

    文章目录 **********用队列实现栈 一:思路 二:实现 (1)结构体定义 (2)初始化和销毁 (3)进"栈" (4)出"栈" 三:代码 ******** ...

  2. 数据结构——线性表(三)

    数据结构--线性表(三) 作者:黑衣侠客 一.线性表的定义 线性表,从名字来看,可以发现,是具有像线一样性质的表 线性表:零个或多个数据元素的有限序列. 首先,它是一个序列,也就是说,元素之间是有顺序 ...

  3. 数据结构-线性表之带头结点的双向循环链表

    文章目录 前言 实现 (1)结构定义 (2)基本函数 (3)操作实现 测试 代码 前言 链表的类型有很多种(根据带头或不带头,循环或非循环等等),但是我们重点研究的只有两种,一种结构非常简单是无头单向 ...

  4. 数据结构摧毁线性表用c语言,[简述]数据结构-线性表(c语言实现)

    [简述]数据结构-线性表(c语言实现)second60 20180422 1. 线性表的定义 线性表是具有相同特性的数据元素的一个有限序列. 2. 线性表抽象数据类型描述 ADT  List { 数据 ...

  5. 王道数据结构线性表:有读者认为直接去掉p结点会造成断链?

    王道数据结构线性表:有读者认为直接去掉p结点会造成断链? 我用图解的方式来说明一下,文字有点多,看起来比较眼疼,但是内容不多,希望能对你有帮助. 书上的代码 解释 (ps:对上面解释的一点补充↓)

  6. 数据结构-线性表(严书代码实现)

    数据结构-线性表的顺序表示代码 //头文件内容实现 #ifndef SEQLIST_H_INCLUDED #define SEQLIST_H_INCLUDED #include<string.h ...

  7. 数据结构-线性表-思维导图+小结

    数据结构-线性表思维导图+小结 1 数据结构-第二章-线性表-思维导图 2 数据结构-第二章-线性表-习题小结 2.1 概念性习题小结 2.2 操作性习题小结 1 数据结构-第二章-线性表-思维导图 ...

  8. 数据结构-线性表知识总结

    一.线性表的逻辑结构 1. 线性表:是零个或多个具有相同类型的数据元素的有限序列. 非空表:L=(a1,a2,-,an)(ai为数据元素) 2.线性表的抽象数据类型定义 Date 线性表中的数据元素具 ...

  9. 数据结构线性表基本操作

    数据结构线性表基本操作 基本内容 线性表的顺序表示和实现 线性表的顺序存储表示 顺序表中基本操作的实现 1.顺序表的初始化 2.取值 3.查找 4.插入 5.删除 线性表的链式表示和实现 单链表的定义 ...

最新文章

  1. Angular之Error: ExpressionChangedAfterItHasBeenChecked
  2. 电子商务应用课程知识整理 第四章-搜索引擎
  3. 7-7 六度空间 (30 分)(BFS遍历详解)(DFS最后一个点过不去)
  4. 唯美动态个人404单页HTML源码
  5. OPPO Enco Free真无线耳机:超低延迟高音质 智慧触控看得见
  6. Android 多层视差头部背景的实现
  7. php array_walk和array_map区别
  8. 易语言超级列表框怎么设置文本颜色_抖音超火的快闪动画怎么做?手把手教你!三分钟学会...
  9. cad批量打印_最好用的cad批量打印方法
  10. sci论文 计算机,计算机类SCI论文
  11. 【延展Extension的使用场景 Objective-C语言】
  12. android wps页面设置背景图片,wps word怎么设置背景图片
  13. AMD zen3 5600X + B550M 黑苹果 EFI Big Sur 11.5.2
  14. 《海洋测绘十年》序言
  15. 【自用】ESP32-S3新板子 从零配置micropython环境(安装CH343驱动等)
  16. Windows环境下Nginx配置本地虚拟域名和Nginx代理
  17. 基于百度api的违规文本识别 分词 tfidf关键词提取 违规文本检测
  18. [易飞]录入信息传递设置信息
  19. 听说Python成为世界性语言了? Python是怎么构建世界?字符串在哪里?(三)
  20. 第四十五讲:神州防火墙P2P流量控制配置

热门文章

  1. 缓解人才饥荒,中国南京大学成立国内首个人工智能学院
  2. 用计算机弹绅士的数字,计算器歌曲谱薛之谦-绅士
  3. typora自定义样式、自定义背景图片
  4. 智能电视前传——盒子
  5. 【计算机视觉】上游任务和下游任务的理解
  6. 计算机一级考试题目格式,2014年计算机一级考试MSOffice第三章考点解析 9
  7. Netgear wndr3700v2 路由器刷OpenWrt打造全能服务器(四)花生壳服务
  8. 融云超级群发布,从此社交不设限
  9. Unity3D如何脚本修改预制体并保存
  10. 简单的活动抽奖算法方案