数据结构-线性表

文章目录

  • 数据结构—线性表
    • 1.线性表的定义和基本操作
      • 线性表的定义
      • 线性表的特点
      • 线性表的基本操作
    • 2.线性表的顺序存储和链式存储表示
      • 顺序存储
      • 链式存储
        • 单链表
        • 循环链表
        • 双向链表

数据结构—线性表

1.线性表的定义和基本操作

线性表的定义

定义:线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列。(n=0时称为空表)

线性表的特点

  • 表中元素的个数有限。
  • 表中元素具有逻辑上的顺序性,表中元素有其先后次序。
  • 表中元素都是数据元素,每个元素都是单个元素。
  • 表中元素的数据类型都相同,这意味着每个元素占用相同大小的存储空间。
  • 表中元素具有抽象性,即讨论元素间的逻辑关系,而不考虑元素元素的内容。

注意:线性表是一种逻辑结构,表示元素之间一对一的相邻关系。顺序表和链表是指存储结构,两者属于不同层面的概念,因此不要将其混淆。

线性表的基本操作

  • InitList(&L) 初始化表。操作结果:构造一个空的线性表L。
  • GetElem(L,i,&e) 线性表的取值。初始条件:线性表L已存在,且1≤i≤ListLength(L)。操作结果:用e返回L中第i个数据元素的值。
  • LocateElem(L,e) 线性表的查找。初始条件:线性表L已存在。操作结果:返回L中第1个值与e相同的元素在L中的位置。若这样的数据元素不存在,则返回值为0。
  • ListInsert(&L,i,e) 线性表的插入。初始条件:线性表L已存在,且1≤i≤ListLength(L)+1。操作结果:在L的第i个位置之前插入新的数据元素e,L的长度加1。
  • ListDelete(&L,i) 线性表的删除。初始条件:线性表L已存在且非空,且1≤i≤ListLength(L)。操作结果:删除L的第i个数据元素,L的长度加1。

注意:符号“&”表示C++语言中的引用调用。

2.线性表的顺序存储和链式存储表示

顺序存储

  • 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,这种表示也称为线性表的顺序存储结构或顺序映像。通常,称这种存储结构的线性表为顺序表(Sequential List)。
  • 特点逻辑上相邻的数据元素,其物理次序也是相邻的。顺序存储结构是一种随机存取的存储结构。
  • 假设线性表L存储的起始位置为LOC(A),sizeof(ElemType)是每个数据元素所占用存储空间的大小。
数组下标内存状态内存地址位序
0a1LOC(A)1
1a2LOC(A)+sizeof(ElemType)2
i-1aiLOC(A)+(i-1)sizeof(ElemType)i
n-1anLOC(A)+(n-1)sizeof(ElemType)n
  • 注意:要区分清楚位序下标;线性表中元素的位序是从1开始的,而数组中元素的下标是从0开始的。

链式存储

单链表
  • 线性表的链式存储又称单链表,它是指通过一组任意的的存储单元来存储线性表中的数据元素。为了建立数据元素之间的线性关系,对每个链表结点,除存放元素自身的信息外,还需要存放一个指向其后继结点的指针; 其中存储数据元素信息的域称为数据域(data);存放直接后继存储位置的域称为指针域(next)
  • 首元结点是指链表中存储第一个元素a1的结点。
  • 头结点是在首元结点之前附设一个结点,其指针域指向首元结点。头结点的数据域可以不存储任何信息,也可以存储与数据元素类型相同的其他附加信息。
  • 链表增加头结点的作用:
    1. 便于首元结点的处理:增加了头结点后,首元结点的地址保存在头结点的指针域中,则对链表的第一个数据元素的操作与其他数据元素相同,无需进行特殊处理。
    2. 便于空表与非空表的统一处理:当不设头结点时,假设L为单链表的头指针,它应该指向首元结点,则当链表长度为0时,L指针为空(判定空表的条件记为:L==NULL);增加头结点后,无论链表是否为空,头指针都是指向头结点的非空指针。若为空表,则头结点的指针域为空(判定空表的条件可记为:L->next==NULL)。
  • 特点:逻辑上相邻的数据元素,其物理次序不一定相邻;单链表为顺序存取结构。
循环链表
  • 循环链表(Circular Linked List):是一种头尾相接的链表(即表中最后一个结点的指针域指向头结点,整个链表形成一个环)。

  • 优点:从表中任意一结点出发均可找到表中其他结点。

  • 注意:由于循环链表中没有NULL指针,故涉及遍历操作时,其终止条件就不再像非循环链表那样判断PP->next是否为空,而是判断它们是否等于头指针

双向链表
  • 双向链表(Double Linked List):在单链表的每个节点里增加一个指向其直接前驱的指针域prior,这样链表中就形成了有两个方向不同的链,故称为双向链表。

  • 在单链表中,查找直接后继结点的执行时间为O(1),而查找直接前驱的执行时间为O(n)。为了克服单链表这种单向性的缺点,可利用双向链表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/434995.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringSecurity(16)——OAuth2客户端授权模式

工作流程 基本使用 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId><version>2.3.12.RELEASE</version> </dependency> <dependency><groupId>…

Android发展历程及安装

目录 发展历程 下载网址 安装过程 发展历程 安卓基于Linux内核&#xff0c;Linux内核相当于房屋的地基 开源不等于免费&#xff0c;不能商用 安卓一般每半年小更新&#xff0c;一年大更新 对应API相当于别名 现在安卓安全性越来越高&#xff0c;性能越来越快&#xff0c…

LeNet跟LeNet5详解

1 LeNet结构 主要是为了手写数字识别 具体结构讲解&#xff1a;从图中例子可得 1 先传入一个灰度图像尺寸为1x28x28&#xff0c;通道数为1&#xff0c;尺寸为28x28的灰度图像 2 第一层5x5卷积&#xff0c;经过公式 输入图像尺寸-卷积核尺寸2padding/步长1&#xff0c;&#…

JasperReports渲染报表文件时候,读取图片报错:Byte data not found at:xxx.png.\r\n\tat

目录【知识星球】 1.1、错误描述 1.2、解决方案 1.1、错误描述 最近在工作中&#xff0c;使用JasperReports报表比较多一些&#xff0c;有次线上环境里面运行报错&#xff0c;查看报错日志&#xff0c;如下所示&#xff1a; net.sf.jasperreports.engine.JRException: Byte…

Android源码设计模式解析与实战第2版笔记(五)

第七章 时势造英雄 – 策略模式 策略模式的定义 策略模式定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 策略模式的使用场景 针对同一类型问题的多种处理方式&#xff0c;仅仅…

掌握assert的使用:断言在错误检查和调试中不可或缺

断言在错误检查和调试中不可或缺 一、简介二、断言的基本语法和用法三、错误检查与断言四、 调试与断言五、避免滥用断言六、总结 一、简介 断言是一种在程序中用于检查特定条件是否满足的工具。一般用于验证开发者的假设&#xff0c;如果条件不成立&#xff0c;就会导致程序报…

51-17 视频理解串讲— MViT 论文精读

继TimeSformer模型之后&#xff0c;咱们再介绍两篇来自Facebook AI的论文&#xff0c;即Multiscale Vision Transformers以及改进版MViTv2: Improved Multiscale Vision Transformers for Classification and Detection。 由于本司大模型组最近组织阅读的论文较多&#xff0c;…

ubuntu20.04 安装ROS2 记录

主要参考B站古月居的ROS2入门21讲 和 以下链接&#xff08;基本和视频上一致&#xff09; ubuntu20.04安装ROS2 详细教程_ubuntu20.04 ros2-CSDN博客 但是中间有些需要注意的地方&#xff0c; 1&#xff0c;添加源 步骤中提到 sudo curl -sSL https://raw.githubuserconten…

深入解析HTTPS:安全机制全方位剖析

随着互联网的深入发展&#xff0c;网络传输中的数据安全性受到了前所未有的关注。HTTPS&#xff0c;作为HTTP的安全版本&#xff0c;为数据在客户端和服务器之间的传输提供了加密和身份验证&#xff0c;从而确保了数据的机密性、完整性和身份真实性。本文将详细探讨HTTPS背后的…

分类预测 | Matlab实现DT决策树多特征分类预测

分类预测 | Matlab实现DT决策树多特征分类预测 目录 分类预测 | Matlab实现DT决策树多特征分类预测分类效果基本描述程序设计参考资料分类效果

QT发生弹出警告窗口

QTC开发程序弹出警告窗口&#xff0c;如上图 实施代码&#xff1a; #include <QMessageBox> int main() {// 在发生错误的地方QMessageBox::critical(nullptr, "错误", "发生了一个错误&#xff0c;请检查您的操作。");}上面的文字可以更改&#x…

openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板

文章目录 openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板概述笔记工程中需要的openssl的库实现END openssl3.2 - 测试程序的学习 - 准备openssl测试专用工程的模板 概述 openssl3.2 - 测试程序的学习 整了几个test.c, 每开一个新的测试工程, 总要改这改那的. …