数据结构-线性表

文章目录

  • 数据结构—线性表
    • 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)。为了克服单链表这种单向性的缺点,可利用双向链表。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GPT-SoVITS 测试

开箱直用版(使用 AutoDL) step1 打开地址 https://www.codewithgpu.com/i/RVC-Boss/GPT-SoVITS/GPT-SoVITS-Official 选择 AutoDL创建实例,选择 3080ti 机器 step2 创建好实例之后,进入命令行,输入命令 echo {}>…

LC weekly-game 382

ExScorecomplete extentmean12char op20717/719(解答错误,迭代条件写错)按长度枚举30523/537(超时,弱智题已AC)枚举40 有用的是Ex2和Ex4 Experience each problem can be submitted infinitely with negligible punishment timesome cases of the problem is hidden.each ke…

Vue3探索编辑部——关于Pinia(1)

目录 什么是Pinia? Vue3中的Pinia 创建项目 数据准备和引入Pinia 使用Pinia 采用action修改数据 总结 什么是Pinia? Pinia是Vue3的专属的状态管理工具,什么是状态呢?其实我们可以把状态理解为数据,或者一个业务…

INFINI Labs 产品更新 | 统一版本号 1.22.0

INFINI Labs 产品又更新啦~,包括 Console,Gateway,Loadgen,Agent 1.22.0。为了避免版本不同带来的困扰,以后发布均统一版本号,此次版本重点修复历史遗留 Bug 、优化内存占用等。以下是本次更新的详细说明。…

Python中Numba库装饰器

一、运行速度是Python天生的短板 1.1 编译型语言:C 对于编译型语言,开发完成以后需要将所有的源代码都转换成可执行程序,比如 Windows 下的.exe文件,可执行程序里面包含的就是机器码。只要我们拥有可执行程序,就可以随…

通讯录小项目(上)

Start And Stick 通讯录的实现有很多种方式,今天我们将用结构体实现简单的通讯录项目功能。包括通讯录的增、删、查、改等功能。 思路: 此次代码文件分别为: 文件名用途sqlist.h用于函数和结构体的声明sqlist.c用于函数的实现test.c用于通讯…

【JaveWeb教程】(38)SpringBootWeb案例之《智能学习辅助系统》的详细实现步骤与代码示例(11)过滤器Filter讲解

目录 SpringBootWeb案例10 过滤器Filter2.4 过滤器Filter2.4.1 快速入门2.4.2 Filter详解2.4.2.1 执行流程2.4.2.2 拦截路径2.4.2.3 过滤器链 2.4.3 登录校验-Filter2.4.3.1 分析2.4.3.2 具体流程2.4.3.3 代码实现 SpringBootWeb案例10 过滤器Filter 2.4 过滤器Filter 刚才通…

VBA技术资料MF111:将表对象转换为正常范围

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

大数据期望最大化(EM)算法:从理论到实战全解析

文章目录 大数据期望最大化(EM)算法:从理论到实战全解析一、引言概率模型与隐变量极大似然估计(MLE)Jensen不等式 二、基础数学原理条件概率与联合概率似然函数Kullback-Leibler散度贝叶斯推断 三、EM算法的核心思想期…

【JAVA】提交任务时,线程池队列已满,这时会发生什么

🍎个人博客:个人主页 🏆个人专栏:JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 抛出异常: 阻塞等待: 丢弃任务: 调整线程池参数: 使用拒绝策略: 结…

数字图像处理(实践篇)二十七 Python-OpenCV 滑动条的使用

目录 1 涉及的函数 2 实践 1 涉及的函数 ⒈ setWindowProperty()用于设置GUI应用程序的属性 cv2.setWindowProperty(windowsName, prop_id, prop_value) 参数: ①

张维迎《博弈与社会》笔记(4)导论:社会最优与帕累托标准

本节我们将从社会的角度来评判人类行为:一个社会应该采取什么样的标准来判断个人行为?具体地讲,我们需要知道,从社会的角度来评判,什么样的行为是正当的,什么样的行为是不正当的;什么样的行为应…

小电影网站上线之nginx配置不带www域名301重定向到www域名+接入腾讯云安全防护edgeone

背景 写了个电影网站(纯粹搞着玩的),准备买个域名然后上线,但是看日志经常被一些恶意IP进行攻击,这里准备接入腾讯云的安全以及加速产品edgeone,记录下当时的步骤。 一、nginx配置重定向以及日志格式 ng…

C++ 隐式转换构造函数和explicit 关键字学习

据说在内核代码中,多个地方使用了explicit 关键字;下面看一下; 在 C++ 中,隐式转换构造函数指的是当我们将一种类型的值赋给该类对象时,编译器会自动调用相应的构造函数进行类型转换。这样可以使得不同类型之间能够互相赋值或者传参。 具体来说,当一个类有多个构造函数…

【归并排序】【图论】【动态规划】【 深度游戏搜索】1569将子数组重新排序得到同一个二叉搜索树的方案数

本文涉及知识点 动态规划汇总 图论 深度游戏搜索 归并排序 组合 LeetCoce1569将子数组重新排序得到同一个二叉搜索树的方案数 给你一个数组 nums 表示 1 到 n 的一个排列。我们按照元素在 nums 中的顺序依次插入一个初始为空的二叉搜索树(BST)。请你统…

瑞萨RL78G12系列单片机使用IAR软件进行仿真设置及与E2接线

目录 一、单片机与仿真器连接 二、IAR软件在线仿真使用手册 一、单片机与仿真器连接 E1引脚接线图 RL78系列单片机的GND接仿真器的pin2、pin12、pin14 RL78系列单片机的VDD接仿真器的pin8 RL78系列单片机的Tool0接仿真器的pin5 RL78系列单片机的Reset接仿真器的pin10、pin…

【计算机网络】深入掌握计算机网络的核心要点

写在前面 前言四层模型网络地址管理Linux下设置ipARP请求包总结 前言 计算机网络是指将分散的计算机设备通过通信线路连接起来,形成一个统一的网络。为了使得各个计算机之间能够相互通信,需要遵循一定的协议和规范。OSI参考模型和TCP/IP参考模型是计算机…

免费SSL数字证书申请,免费数字证书使用教程

为什么要使用SSL数字证书? 1. 数据加密(SSL数字证书通过使用加密算法对传输的数据进行加密,保证数据在传输过程中不被篡改。) 2. 使用了SSL数字证书,浏览器中不会显示不安全,小程序开通,给你的…

Java基础知识-异常

资料来自黑马程序员 异常 异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指的是程序在执行过程中,出现的非正常的情况,…

Pandas.DataFrame.mode() 众数 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本: 本文基于 pandas2.2.0 编写。 关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。 传送门: Pandas API参考目录 传送门: Pandas 版本更新及新特性 传送门&…