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

文章目录

  • 一.什么是线性表?
  • 二.线性表如何存储?
  • 三.线性表的类型

我们知道从应用中抽象出共性的逻辑结构和基本操作就是抽象数据类型,然后实现其存储结构和基本操作。下面我们依然按这个思路来认识线性表

一.什么是线性表?

  1. 定义

    线性表(Linear List)是由n(n>=0)个具有相同特性的数据元素(结点)a1,a2,…an组成的有限序列。如下图所示:

  • 线性起点也称首元
  • 如果这个线性表没有元素,即n=0时为空表
  • 统一线性表中的元素必定具有相同的特性,数据元素间的关系是线性关系。

线性表的例子

【例1】分析26个英文字母组成的英文标:(A,B,C,D,……,Z)

数据元素都是字母;元素间关系是线性。

【例2】分析学生情况登记表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
数据元素都是记录;元素间关系是线性

【例3】十二星座(白羊座,金牛座,双子座,……,双鱼座)

数据元素都是字符串;元素间关系是线性

  1. 特点
    • 在非空的线性表,有且仅有一个开始结点a1,它没有直接前趋,而仅有一个直接后继a2
    • 有且仅有一个终端结点an,它没有直接后继,而仅有一个直接前趋a(n-1)
    • 其余的内部结点ai(2<=i<=n-1)都有且仅有一个直接前趋a(i-1)和一个直接后继a(i+1).
    • 线性表是一种典型的线性结构。

二.线性表如何存储?

即线性表在计算机里如何实现这个运算?

我们从一个案例来引出线性表的两种存储方式:

【案例2.1】一元多项式的运算(实现两个多项式加减乘运算)

我们可以把每个系数拿出来存成一个线性表,用数组来实现,变量用系数的下标隐含的表示:

这样我们可以顺利的进行两个一元多项式的加运算:

【案例2.2】多项式非零项的数组表示

很多项缺失,就不能用下标来隐含的表示指数了:

继续用顺序存储法来进行多项式的加法运算:

  1. 创建一个新数组C(这就意味着需要一个新的空间)
  2. 分别从头遍历比较a和b的每一项
    • 指数相同,对应系数相加,若其和不为零,则在c中增加一个新项
    • 指数不同,则将指数较小的项复制到c中
  3. 一个多项式已遍历完毕时,将另一个剩余项依次复制到c中即可。

结果如下:

01717
711225

稀疏多项式有很多项缺失,这样存储的话会造成存储空间很大的浪费,怎么办?

我们发现顺序存储结构存在的问题:

  • 存储空间分配不灵活
  • 运算的空间复杂度高

下面用**链式存储法(指针)**进行上面案例的实现:

分别把系数不为0的项的系数和指数存储起来,这个线性表中的每个元素都有两个数据项,再存储下一个元素的位置,如下图所示:

我们再引入一个实际案例来理解链式结构存储:

【案例2.3】图书管理系统

在该图书管理系统中我们需要的功能有:查找,插入,删除,修改,排序和计数。

  1. 首先,将图书表抽象为线性表,表中每本图书抽象为线性表中数据元素

  2. 选择合适的存储结构

    • 图书顺序表

    • 图书链表

  3. 实现此存储结构上的基本操作

  4. 利用基本操作完成功能

三.线性表的类型

1.前面已经给出了抽象数据类型的定义,抽象数据类型线性表的定义如下:

ADT List{数据对象:D={ai|ai属于Elemset,(i=1,2,...n,n>=0)}数据关系:R={<ai-1,ai>|ai-1,ai属于D,(i=2,3,...n)}基本操作:
}ADT List

2.基本操作

  • InitList(&L)(Initialization List)
    • 操作结果:构造一个空的线性表L.(线性表的初始化)
  • DestroyList(&L)
    • 初始条件:线性表L已经存在
    • 操作结果:销毁线性表L
  • ClearList(&L)
    • 作用:线性表内容的清除
    • 初始条件:线性表L已经存在
    • 操作结果:将线性表L重置为空表
  • ListEmpty(L)
    • 作用:判断线性表里是否有元素
    • 初始条件:线性表L已经存在。
    • 操作结果:若线性表L为空表,则返回TURE;否则返回FALSE
  • ListLength(L)
    • 初始条件:线性表L已经存在
    • 操作结果:返回线性表L中的数据元素个数
  • **GetElem(L,i,&e)**替换
    • 初始条件:线性表L已经存在,1<=i<=ListLength(L)
    • 操作结果:用e返回线性表L中第i个数据元素的值
  • **LocateElem(L,e,compare())**定位查找
    • 初始条件:线性表L已经存在,compare()是数据元素判定函数
    • 操作结果:返回L中第一个与e满足compare()的数据元素的位序。若这样的数据元素不存在则返回值为0.
  • **PriorElem(L,cur_e,&pre_e)**求前驱
    • 初始条件:线性表L已经存在
    • 操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败;pre_e无意义。
  • **NextElem(L,cur_e,&next_e)**求后驱
    • 初始条件:线性表L已经存在
    • 操作结果:若cur_e是L的数据元素,且不是第最后个,则用next_e返回
  • **ListInsert(&L,i,e)**插入
    • 初始条件:线性表L已经存在,1<=i<=ListLength(L)+1
    • 操作结果:在L的第i个位置之前插入新的数据元素e,L的长度加一
  • **ListDelete(&L,i,&e)**删除
    • 初始条件:线性表L已经存在,1<=i<=ListLength(L)+1
    • 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减一。
  • ListTraverse(&L,visited())
    • 初始条件:线性表L已经存在
    • 操作结果:依次对线性表中每个元素调用visited()

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

TryHackMe 第7天 | Web Fundamentals (二)

继续介绍一些 Web hacking 相关的漏洞。 IDOR IDOR (Insecure direct object reference)&#xff0c;不安全的对象直接引用&#xff0c;这是一种访问控制漏洞。 当 Web 服务器接收到用户提供的输入来检索对象时 (包括文件、数据、文档)&#xff0c;如果对用户输入数据过于信…

【springboot】使用代码生成器快速开发

接上一项目&#xff0c;使用mybatis-plus-generator实现简易代码文件生成 在fast-demo-web模块中的pom.xml中添加mybatis-plus-generator、freemarker和Lombok依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator&…

Python | 由高程计算坡度和坡向

写在前面 之前参加一个比赛&#xff0c;提供了中国的高程数据&#xff0c;可以基于该数据进一步计算坡度和坡向进行相关分析。 对于坡度和坡向&#xff0c;这里分享一个找到的库&#xff0c;可以方便快捷的计算。这个库为&#xff1a;RichDEM&#xff0c;官网地址如下 https…

SAP学习笔记 - 豆知识11 - 如何查询某个字段/DataElement/Domain在哪个表里使用?

大家知道SAP的表有10几万个&#xff08;也有说30多万个的&#xff0c;总之很多就是了&#xff09;&#xff0c;而且不断增多&#xff0c;那么当想知道一个字段在哪个表里使用的时候该怎么办呢&#xff1f; 思路就是SAP的表其实也是存在表里的&#xff1a;&#xff09;&#xf…

【Git】TortoiseGitPlink提示输入密码解决方法

问题 克隆仓库&#xff0c;TortoiseGitPlink提示输入密码 解法 1、打开TortoiseGit 下的puttygen工具 位置&#xff1a;C:\Program Files\TortoiseGit\bin\ 2、点击【Load】按钮&#xff0c;载入 C:\Users\Administrator\.ssh\ 文件夹下的id_rsa文件。 3、点击save private …

qt_c++_xml存这种复杂类型

demo&#xff0c;迅雷链接。或者我主页上传的资源 链接&#xff1a;https://pan.xunlei.com/s/VO8bIvYFfhmcrwF-7wmcPW1SA1?pwdnrp4# 复制这段内容后打开手机迅雷App&#xff0c;查看更方便 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>#include…

请散户股民看过来,密切关注两件大事

明天股市要开市&#xff0c;不仅散户股民期盼节后股市大涨&#xff0c;上面也同样想在节后来上一个“开门红”。 为此&#xff0c;上面没休假&#xff0c;关起门来办了两件大事&#xff0c;这两天发布消息已提前预热了。 两件大事如下&#xff1a; 一是&#xff0c;上交所10…

什么是 JavaScript 的数组空槽

JavaScript 中的数组空槽一直是一个非常有趣且颇具争议的话题。我们可能对它的实际意义、历史以及现今的新版本中对它的处理方式有所疑问。数组空槽的存在最早可以追溯到 JavaScript 的诞生之初&#xff0c;当时的设计决定让它成为了现代 JavaScript 开发中的一种特别的现象。 …

大数据新视界 --大数据大厂之数据血缘追踪与治理:确保数据可追溯性

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

计算机毕业设计hadoop+spark天气预测 天气可视化 天气大数据 空气质量检测 空气质量分析 气象大数据 气象分析 大数据毕业设计 大数据毕设

Hadoop天气预测系统开题报告 一、研究背景与意义 在信息化和大数据时代&#xff0c;天气数据已成为社会生活和经济发展中不可或缺的重要资源。天气预测系统作为现代气象学的重要组成部分&#xff0c;对于农业生产、交通管理、环境保护以及防灾减灾等方面都具有重要意义。然而…

集智书童 | 用于时态动作检测的预测反馈 DETR !

本文来源公众号“集智书童”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;用于时态动作检测的预测反馈 DETR ! 视频中的时间动作检测&#xff08;TAD&#xff09;是现实世界中的一个基本且具有挑战性的任务。得益于 Transformer …

Chrome浏览器调用ActiveX控件--allWebOffice控件

背景 allWebOffice控件能够实现在浏览器窗口中在线操作文档的应用&#xff08;阅读、编辑、保存等&#xff09;&#xff0c;支持编辑文档时保留修改痕迹&#xff0c;支持书签位置内容动态填充&#xff0c;支持公文套红&#xff0c;支持文档保护控制等诸多办公功能&#xff0c;本…

国庆期间的问题,如何在老家访问杭州办公室的网络呢

背景&#xff1a;国庆期间的问题&#xff0c;如何在老家访问杭州办公室的网络呢 实现方案&#xff1a;异地组网 实现语言&#xff1a;Java 环境&#xff1a;三个网络&#xff0c;一台拥有公网IP的服务器、一台杭州本地机房内服务器、你老家所在网络中的一台电脑&#xff08;…

Linux中的网络指令:ping、netstat、watch、pidof、xargs

目录 Ping指令 netstat指令 watch指令 pidof指令 xargs指令 Ping指令 功能&#xff1a;检测两台主机间的网络连通性 语法&#xff1a;ping [选项] 目标主机的IP地址 &#xff08;192.168.1.1&#xff09;或域名&#xff08;google.com&#xff09; 常见选项&#xff1a…

鸿蒙next开启地图服务

一般手机软件有的都会有开启地图功能&#xff0c;这里说一下怎么开启地图服务 1、 首先你需要配置一些东西&#xff0c;在华为的agc平台上&#xff0c;下边链接就是详细的教程 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/map-config-agc-V5 我说一下你…

分治算法(5)_归并排序_排序数组

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 分治算法(5)_归并排序_排序数组 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 …

如何在各大地图平台上标注店铺定位?

随着互联网的高度普及&#xff0c;地图导航已成为人们日常出行和寻找服务的重要工具。对于商家而言&#xff0c;将自己的店铺定位标注在各大地图平台上&#xff0c;不仅能方便顾客一键导航抵达店铺进行消费&#xff0c;还能提高店铺的线上曝光率&#xff0c;从而吸引更多的潜在…

Chrome浏览器调用ActiveX控件--allWebOffice控件功能介绍

allWebOffice控件概述 allWebOffice控件能够实现在浏览器窗口中在线操作文档的应用&#xff08;阅读、编辑、保存等&#xff09;&#xff0c;支持编辑文档时保留修改痕迹&#xff0c;支持书签位置内容动态填充&#xff0c;支持公文套红&#xff0c;支持文档保护控制等诸多办公功…

鸿蒙开发之ArkUI 界面篇 十九 Flex组件的特点

其语法格式是: Flex(参数对象){ 字组件1, 字组件2, 字组件3, 字组件4 } 这里你会发现&#xff0c;其实和Row容器&#xff0c;Colum容器的语法格式差不多&#xff0c;核心的关键是Colum、Row是不支持换行&#xff0c;实现FlexInterface接口&#xff0c;对外提供的属性是F…

Cesium的一些神奇概念及技术流程(1)

近期要深度研究Cesium。关于Cesium的用法、渲染流程等方面我看很多人都写过。我就写写其中一些可能平时用不到但是比较有趣的内容。因为边研究边写&#xff0c;所以会陆续出几集&#xff0c;然后合并在一起&#xff0c;欢迎大家跟踪。 我的这些文章不打算把一些基本概念展开解…