IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【数据结构】线性表 -> 正文阅读

[数据结构与算法]【数据结构】线性表

《数据结构(第二版)》清华大学出版社,严蔚敏,吴伟民 编.

线性表的逻辑结构

线性表是一种数据结构,一个线性表是 n 个数据元素的有限序列。关系N是一个序偶的集合,它表示线性表中数据元素之间的相邻关系,即 ai-1 领先于 ai,ai 领先于 ai+1

稍复杂的线性表中,一个数据元素可以由若干个数据项组成,把数据元素称为记录,含有大量线性表称为文件。数据元素可以是各种各样的,但同一线性表中的元素必定具有相同特性,因此属于统一数据对象。

一个学校的学生健康情况文件,每个学生的情况为一个记录,由姓名、学号、性别、年龄、班级和建康状况等六个数据项组成。

对线性表进行的基本操作:

  1. INITIATE(L) 初始化操作。设定一个空的线性表 L。
  2. LENGTH(L) 求长度函数。函数值为给定线性表 L 中数据元素的个数。
  3. GET(L,i) 取元素函数。若 1 ≤ i ≤ L E N G T H ( L ) 1\leq i \leq LENGTH(L) 1iLENGTH(L),则函数值为给定线性表 L 中第 i 个数据元素,否则为空元素 NULL。称 i 为该数据元素在线性表中的位序。
  4. PRIOR(L,elm) 求前驱函数。已知 elm 为给定线性表 L 中的第一个数据元素,若它的位序大于 1,则函数值为 elm 的前驱,否则为空元素。
  5. NEXT(L,elm) 求后继函数。已知 elm 为给定线性表 L 中的一个数据元素,若它的位序小于 LENGTH(L),则函数值为 elm 的后继,否则为空元素。
  6. LOCATE(L,x) 定位函数。给定值 x,若线性表 L 中存在其值和 x 相等的数据元素,则函数值为该数据元素在线性表中的位序,否则为零。
  7. INSERT(L,i,b) 前插操作。在给定线性表 L 中第 i 个数据元素之前插入一个新的数据元素 b。
  8. DELETE(L,i) 删除操作。删除给定线性表 L 中第 i 个数据元素。
  9. EMPTY(L) 判空表函数。
  10. CLEAR(L) 表置空操作。操作结果将 L 置为空表。

线性表的顺序存储结构

用一组地址连续的存储单元依次存储线性表的元素,逻辑关系上相邻的两个元素在物理位置上也相邻。

假设线性表的每个元素需要占用 l 个存储单元,并以所占的第一个单元的存储地址作为数据的存储位置。一般来说,线性表的第 i 个元素 ai 的存储位置为:

L O C ( a i ) = L O C ( a i ) + ( i ? 1 ) ? l LOC(a_i)=LOC(a_i)+(i-1)*l LOC(ai?)=LOC(ai?)+(i?1)?l

式中 L O C ( a 1 ) LOC(a_1) LOC(a1?)是线性表的第一个数据元素 a 1 a_1 a1?的存储位置,通常称作线性表的起始位置或基地址。它的特点是为表中相邻的元素 a i a_i ai? a i + 1 a_{i+1} ai+1?赋以相邻的存储位置 L O C ( a i ) LOC(a_i) LOC(ai?) L O C ( a i + 1 ) LOC(a_{i+1}) LOC(ai+1?)。换句话说,以元素在计算机内物理位置相邻来表示线性表中数据元素之间的逻辑关系。只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。

在顺序结构的线性表中某个位置插入或删除一个数据元素时,其时间主要耗费在移动元素上,而移动元素的个数取决于插入或删除元素的位置。

image.png

线性表的链式存储结构

线性表的顺序存储结构有三个弱点:1. 在做插入操作时需要移动大量的元素;2. 预先分配空间时,必须按最大空间分配;3. 表容量难以扩充;

用一组任意的存储单元存储线性表的数据元素,存储单元可连续可不连续。数据元素的存储映像称为结点(数据域+指针域),n 个结点链成一个链表。

整个链表的存取必须从头指针开始进行,头指针指示链表中第一个结点的存储位置,由于最后一个数据元素没有直接后继,则线性链表中最后一个结点的指针为空。

用线性链表表示线性表时,数据元素之间的逻辑关系由结点中的指针指示,逻辑上相邻的两个数据元素其存储的物理位置不要求相邻。

image.png

循环链表

另一种形式的链式存储结构。其特点是表中最后一个结点的指针域指向头节点,整个链表形成一个环。从表中任一结点出发均可找到表中其它结点。

循环表与线性链表基本一致,差别仅在于循环条件判断为是否等于头指针。

image.png

双向链表

为了克服单链表的单向性缺点,产生了双向链表。在双向链表中,节点有两个指针域,一个指向直接后继,另一个指向直接前驱。

双线链表亦可有双向循环链表。

image.png

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 23:50:43  更:2021-07-15 23:51:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 23:48:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码