当前位置: 首页 > news >正文

数据结构-线性表

文章目录

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

相关文章:

数据结构-线性表

文章目录 数据结构—线性表1.线性表的定义和基本操作线性表的定义线性表的特点线性表的基本操作 2.线性表的顺序存储和链式存储表示顺序存储链式存储单链表循环链表双向链表 数据结构—线性表 1.线性表的定义和基本操作 线性表的定义 定义:线性表是具有相同数据类…...

java金额数字转中文

java金额数字转中文 运行结果: 会进行金额的四舍五入。 工具类源代码: /*** 金额数字转为中文*/ public class NumberToCN {/*** 汉语中数字大写*/private static final String[] CN_UPPER_NUMBER {"零", "壹", "贰",…...

Ubuntu findfont: Font family ‘SimHei‘ not found.

matplotlib中文乱码显示 当我们遇到这样奇怪的问题时, 结果往往很搞笑 尝试1不行 Stopping Jupyter Installing font-manager: sudo apt install font-manager Cleaning the matplotlib cache directory: rm ~/.cache/matplotlib -fr Restarting Jupyter. 尝试2 This work fo…...

mysql小知识

什么是sql语句的子查询 SQL语句的子查询是指在一个SQL语句中嵌套另一个SQL语句。子查询可以嵌套在主查询的FROM子句、WHERE子句、HAVING子句、SELECT子句或INSERT语句中。 子查询可以返回一个结果集,这个结果集可以被主查询使用。子查询通常用于获取需要在主查询中使…...

Unity中URP下逐顶点光照

文章目录 前言一、之前额外灯逐像素光照的数据准备好后,还有最后的处理二、额外灯的逐顶点光照1、逐顶点额外灯的光照颜色2、inputData.vertexLighting3、surfaceData.albedo 前言 在上篇文章中,我们分析了Unity中URP下额外灯,逐像素光照中聚…...

Spring Boot3整合Druid(监控功能)

目录 1.前置条件 2.导依赖 错误依赖: 正确依赖: 3.配置 1.前置条件 已经初始化好一个spring boot项目且版本为3X,项目可正常启动。 作者版本为3.2.2 初始化教程: 新版idea创建spring boot项目-CSDN博客https://blog.csdn…...

使用Gin框架,快速开发高效的Go Web应用程序

推荐 海鲸AI-GPT4.0国内站点:https://www.atalk-ai.com 前言 在当今的软件开发领域,Go语言以其简洁的语法和出色的性能逐渐成为开发者们的新宠。而Gin框架,则是Go语言中最受欢迎的Web框架之一,它以高性能和易用性著称。本文将带你…...

【Unity】【游戏开发】Pico打包后项目出现运行时错误如何Debug

【背景】 开发过程中的报错可以通过控制台查看,但是PICO项目这类依赖特定设备环境的应用往往存在打包后在设备端发生运行时错误。这时如何能查看到Debug信息呢? 【分析】 Pico也是安卓系统,所以这个问题就可以泛化为Unity有哪些在安卓端运…...

一种解决常用存储设备无法被电脑识别的方法

一、通用串行总线控制器描述 通用串行总线(Universal Serial Bus,简称USB),是连接电脑与设备的一种序列总线标准,也是一种输入输出(I/O)连接端口的技术规范,广泛应用于个人电脑和移动…...

Spark运行架构以及容错机制

Spark运行架构以及容错机制 1. Spark的角色区分1.1 Driver1.2 Excuter 2. Spark-Cluster模式的任务提交流程2.1 Spark On Yarn的任务提交流程2.1.1 yarn相关概念2.1.2 任务提交流程 2.2 Spark On K8S的任务提交流程2.2.1 k8s相关概念2.2.2 任务提交流程 3. Spark-Cluster模式的…...

短剧APP小程序源码 全开源短视频系统源码/h5/app/小视频系统

主要功能介绍: 小剧场短剧影视小程序源码 全开源 带支付收益等模式 付费短剧小程序源码 多平台小程序支持 项目功能介绍 支持无限滑动 高性能滑动 预加载 视频预览 支持剧情介绍,集合壁纸另外仿抖音滑动效果 支持会员模式,支持用户单独购买等等多功能 本系统&…...

深度学习中图像分类、目标检测、语义分割、实例分割哪个难度大,哪个检测精度容易实现,哪个速度低。请按照难度、精度容易实现程度、速度排名。

问题描述:深度学习中图像分类、目标检测、语义分割、实例分割哪个难度大,哪个检测精度容易实现,哪个速度低。请按照难度、精度容易实现程度、速度排名。 问题解答: 以下是一般情况下深度学习中图像分类、目标检测、语义分割、实…...

【AI视野·今日NLP 自然语言处理论文速览 第七十五期】Thu, 11 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 11 Jan 2024 Totally 36 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Leveraging Print Debugging to Improve Code Generation in Large Language Models Authors Xueyu Hu, Kun K…...

数据结构:搜索二叉树 | 红黑树 | 验证是否为红黑树

文章目录 1.红黑树的概述2.红黑树的性质3.红黑树的代码实现3.1.红黑树的节点定义3.2.红黑树的插入操作3.3.红黑树是否平衡 黑红树是一颗特殊的搜索二叉树,本文在前文的基础上,图解红黑树插入:前文 链接,完整对部分关键代码展示&a…...

数据结构顺序表

思维导图 练习 头文件 1 #ifndef __HEAD_H__2 #define __HEAD_H__3 4 5 #include <stdio.h>6 #include <string.h>7 #include <stdlib.h>8 9 10 #define MAXSIZE 711 typedef int datatype;12 enum13 {14 FLASE-1,15 SUCCESS16 };17 //定义顺序表&a…...

手把手教你优雅的安装虚拟机 Ubuntu —— 图文并茂

目录 Ubuntu 获取Vmware 安装新建虚拟机Ubuntu 安装虚拟机工具安装更多内容 本文教你如何优雅的在虚拟机中安装 Ubuntu&#xff0c;图文并茂、包教包会&#xff01; Ubuntu 获取 Ubuntu 官网镜像下载速度较慢&#xff0c;建议从国内镜像网站下载&#xff0c;如网易、中科大、…...

源 “MySQL 5.7 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。

源 “MySQL 5.7 Community Server” 的 GPG 密钥已安装&#xff0c;但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。 失败的软件包是&#xff1a;mysql-community-server-5.7.44-1.el7.x86_64 GPG 密钥配置为&#xff1a;file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql…...

springboot核心有几层架构

Spring Boot核心有四层架构&#xff1a; 应用层&#xff1a;包含应用程序的入口点和控制器层。这层负责接收请求、处理业务逻辑&#xff0c;并返回响应结果。 服务层&#xff1a;包含业务逻辑的实现。这层负责处理各种业务逻辑&#xff0c;例如数据处理、事务管理等。 数据访…...

css3表格练习

1.效果图 2.html <div class"line"></div><h3>获奖名单</h3><!-- 表格 cellspacing内边距 cellpadding外边距--><table cellspacing"0" cellpadding"0" ><!-- thead表头 --><thead><tr>…...

项目实战——Qt实现FFmpeg音视频转码器

文章目录 前言一、移植 FFmpeg 相关文件二、绘制 ui 界面三、实现简单的转码四、功能优化1、控件布局及美化2、缩放界面3、实现拖拽4、解析文件5、开启独立线程6、开启定时器7、最终运行效果 五、附录六、资源自取 前言 本文记录使用 Qt 实现 FFmepg 音视频转码器项目的开发过…...

测试自动化维护成本:如何实现50%降本增效

一、自动化测试维护成本的核心痛点 1.1 成本构成分析 脚本维护成本&#xff08;占总成本60%-70%&#xff09; 页面改版导致的元素定位失效&#xff08;平均每次影响30%脚本&#xff09; 业务逻辑变更引发的用例重构&#xff08;单次维护耗时2-8小时&#xff09; 环境维护成…...

GLM-OCR与Transformer架构解析:从原理到高效部署

GLM-OCR与Transformer架构解析&#xff1a;从原理到高效部署 你是不是也好奇&#xff0c;那些能“看懂”图片里文字的AI&#xff0c;比如GLM-OCR&#xff0c;到底是怎么工作的&#xff1f;它凭什么能在一张复杂的海报里&#xff0c;准确无误地把文字抠出来&#xff0c;还能理解…...

别再纠结选哪个了!CAN、串口、蓝牙、TCP,手把手教你根据项目场景选通信协议(附Android实战代码)

通信协议选型实战指南&#xff1a;从车载系统到智能家居的黄金法则 当你在凌晨三点的办公室里盯着四块显示器&#xff0c;面前摆着CAN分析仪、蓝牙嗅探器和串口调试终端时&#xff0c;突然意识到项目deadline就在明天——这种场景对嵌入式开发者来说再熟悉不过了。选择错误的通…...

Excel报表自动化:用JXLS实现动态数据填充的5个高级技巧

Excel报表自动化&#xff1a;用JXLS实现动态数据填充的5个高级技巧 每次看到同事手动复制粘贴数据到Excel模板时&#xff0c;我都忍不住想分享JXLS这个神器。作为Java开发者&#xff0c;我们完全可以用代码实现专业级报表自动化&#xff0c;告别重复劳动。本文将带你深入JXLS的…...

xLearn性能优化秘籍:SSE指令加速与内存管理技巧

xLearn性能优化秘籍&#xff1a;SSE指令加速与内存管理技巧 【免费下载链接】xlearn High performance, easy-to-use, and scalable machine learning (ML) package, including linear model (LR), factorization machines (FM), and field-aware factorization machines (FFM)…...

SSDTTime实战指南:从入门到精通的ACPI补丁工具应用

SSDTTime实战指南&#xff1a;从入门到精通的ACPI补丁工具应用 【免费下载链接】SSDTTime SSDT/DSDT hotpatch attempts. 项目地址: https://gitcode.com/gh_mirrors/ss/SSDTTime ACPI补丁工具SSDTTime是一款跨平台的开源解决方案&#xff0c;专为简化硬件兼容性补丁创建…...

永磁同步电机参数辨识:EKF算法的奇妙之旅

卡尔曼滤波EKF算法&#xff0c;针对于永磁同步电机的电阻、电感等参数的辨识&#xff0c;辨识速度快&#xff0c;效果好&#xff0c;适合入门童鞋参考学习&#xff1a;本商品 包含以下内容&#xff1a; &#xff08;1&#xff09;采用SVPWM矢量控制&#xff1b; &#xff08;2&…...

源码编译实战:定制rpath与interpreter实现高版本glibc程序向下兼容部署

1. 为什么需要高版本glibc程序向下兼容 最近在给客户部署AI推理服务时遇到一个典型问题&#xff1a;开发环境用的是Ubuntu 20.04&#xff08;glibc 2.31&#xff09;&#xff0c;而生产环境是CentOS 7&#xff08;glibc 2.17&#xff09;。直接拷贝编译好的程序运行时&#xff…...

互联网大厂Java面试实战:严肃面试官与搞笑程序员谢飞机的三轮问答

互联网大厂Java面试实战&#xff1a;严肃面试官与搞笑程序员谢飞机的三轮问答 在互联网大厂Java岗位面试中&#xff0c;面试官不仅考察应聘者的技术深度&#xff0c;更关注其理解业务场景的能力和解决问题的方法。本文通过一场幽默而真实的模拟面试&#xff0c;呈现核心Java与周…...

别再只盯着PID了!用STM32 HAL库的PWM差速,让你的5路红外寻迹小车先跑起来

别再只盯着PID了&#xff01;用STM32 HAL库的PWM差速&#xff0c;让你的5路红外寻迹小车先跑起来 第一次做红外寻迹小车时&#xff0c;我也被各种PID教程绕得晕头转向。直到有天深夜调试时&#xff0c;我突然意识到——为什么非要一开始就用复杂的PID算法&#xff1f;对于简单…...