数据结构2——线性表1:基本概念

news2024/10/3 4:41:47

1、线性表的概念

线性表是具有相同特性的数据元素的一个有限序列。就像用细线串珠子,一个接着一个串起来。
请添加图片描述

2、线性表的逻辑特征

① 在非空的线性表中有且只有一个开始结点a1,他没有直接前驱,而仅有一个直接后继a2,相当于a1是开头,后面紧跟着连接a2

② 有且仅有一个终端结点a(n),它没有直接后继,而仅有一个直接前驱a(n-1),相当于a(n)是结尾,前面接着a(n-1)

③ 其余结点有且只有一个直接前驱和一个直接后继

线性表的实际应用

1)比如如下一个多项式,要实现加减法
f ( x ) = 10 x 5 + 4 x 3 + 7 x 2 + 2 x + 6 f(x)=10x^5+4x^3+7x^2+2x+6 f(x)=10x5+4x3+7x2+2x+6
可将其转换为
R = ( p 0 , p 1 , p 2 , ⋅ ⋅ ⋅ , p n ) R=(p_0,p_1,p_2,···,p_n) R=(p0,p1,p2,⋅⋅⋅,pn)
每一个p对应一个系数,x指数可以由p的下标来显示

所以多项式的相加可以转换成
R = ( p 0 + q 0 , p 1 + q 1 , p 2 + q 2 , ⋅ ⋅ ⋅ , p n + q n ) R=(p_0+q_0,p_1+q_1,p_2+q_2,···,p_n+q_n) R=(p0+q0,p1+q1,p2+q2,⋅⋅⋅,pn+qn)
2)若我们进一步要实现稀疏多项式的加减法(就是指数相隔比较分散,如果仍像之前那样则会非常占用内存)

于是我们构造如下的线性表:
R = ( ( p 0 , e 0 ) , ( p 1 , e 1 ) , ( p 2 , e 2 ) , ⋅ ⋅ ⋅ , ( p n , e n ) ) R=((p_0,e_0),(p_1,e_1),(p_2,e_2),···,(p_n,e_n)) R=((p0,e0),(p1,e1),(p2,e2),⋅⋅⋅,(pn,en))
这样同时将线性表的指数和系数都储存了起来

步骤:

  • 创建新数组C

  • 指数相同,对应系数相加,若和不为0,则在C线性表中增加一个新项

  • 指数不相同,则将指数较小的项复制到C中

  • 一个多项式遍历完毕时,将另一个剩余项依次复制到C中即可

此题也可以使用数组,下图是用链表实现示意图

请添加图片描述

顺序存储结构存在的问题:

  1. 存储空间分配不灵活

  2. 运算的空间复杂度高

线性表的类型定义

ADT List{
数据对象:D={a(i)|a(i)属于Elemset,(i=1,2,…,n,n≥0)
数据关系:R={<a(i-1),a(i)>|a(i-1),a(i)属于D,(i=2,3,…,n)} //二元关系
基本操作:
InitList(&L);
DestoryList(&L);
ListInsert(&L,i,e);
ListDelete(&L,i,&e);
······
}ADT List

基本操作:

  • 线性表初始化:InitList(&L)

操作结果:构造一个空的线性表L

  • 线性表销毁:DestoryList(&L)

初始条件:线性表L已经存在

操作结果:销毁线性表L

  • 线性表清除:ClearList(&L)

初始条件:线性表L已经存在

操作结果:将线性表L重置为空表

  • 线性表清空:ListEmpty(L)

初始条件:线性表L已经存在

操作结果:若线性表L为空表,则返回TRUE;否则返回FALSE

  • 线性表长度:ListLength(L)

初始条件:线性表L已经存在

操作结果:返回线性表L中的数据元素个数

  • 线性表查找:GetElem(L,i,&e)

初始条件:线性表L已经存在,1≤i≤ListLength(L)

操作结果:用e返回线性表L中第i个数据元素的值

  • 线性表比较:LocateElem(L,e,compare())

初始条件:线性表L已经存在,compare()是数据元素的判定函数

操作结果:返回L中第1个与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返回他的后继,否则操作失败;则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)

操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减一

  • 线性表遍历:ListTraverse(&L,visited())

初始条件:线性表L已经存在

操作结果:依次对线性表中每个元素调用visited()

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

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

相关文章

关于JS中this对象指向问题总结

一、前言 关于JS中this对象指向问题&#xff0c;相信做过项目的小伙伴多多少少都会遇到过&#xff0c;明明感觉代码写的没问题&#xff0c;可是运行的时候&#xff0c;就会报错&#xff0c;比如报错 xxx is not a function。 我最近也遇到了&#xff0c;百度学习了不少前辈对于…

Codeforces Round 703 (Div. 2)(A~D)

A. Shifting Stacks给出一个数组&#xff0c;每次可以将一个位置-1&#xff0c;右侧相邻位置1&#xff0c;判断是否可以经过若干次操作后使得数列严格递增。思路&#xff1a;对于每个位置&#xff0c;前缀和必须都大于该位置应该有的最少数字&#xff0c;即第一个位置最少是0&a…

Vue 2 组件发布到 npm

本教程使用官网教程中指示的 Rollup 作为打包工具&#xff0c;并尽量遵循官网教程的指引进行实践&#xff1b;组件项目的初始化创建方式亦是使用官网提倡的 Vue CLI 工具简便生成。另外组件打包发布到 npm 还可以使用 webpack 作为打包工具&#xff0c;但不在本文讨论范围。 前…

YOLOv5s网络模型讲解(一看就会)

文章目录前言1、YOLOv5s-6.0组成2、YOLOv5s网络介绍2.1、参数解析2.2、YOLOv5s.yaml2.3、YOLOv5s网络结构图3、附件3.1、yolov5s.yaml 解析表3.2、 yolov5l.yaml 解析表总结前言 最近在重构YOLOv5代码&#xff0c;本章主要介绍YOLOv5s的网络结构 1、YOLOv5s-6.0组成 我们熟知YO…

openFoam中cellZone的使用及编程

简介 通常在流体计算中需要对某个特定区域进行处理&#xff08;比如添加源项,可参考这篇文章OpenFOAM编程&#xff1a;VOF法与多孔介质模型相结合)&#xff0c;这是就需要用到cellZone. 通常有两种产生cellZone的方式&#xff1a; &#xff08;1&#xff09;从其他划分网格的…

一文带你看透通用文字识别 OCR

什么是 OCR&#xff1f; OCR技术指的是 Optical Character Recognition 或光学文字识别技术&#xff0c;即从图像中识别文字&#xff0c;并将其转换为电子文本或机器可读格式。它可以被广泛应用于图像处理&#xff0c;文字处理&#xff0c;自然语言处理&#xff0c;计算机视觉…

Kubernetes学习(五)持久化存储

Volume 卷 容器中的文件在磁盘上是临时存放的&#xff0c;这给容器中运行的特殊应用带来了一些问题。首先&#xff0c;当容器崩溃时&#xff0c;kubectl将重新启动容器&#xff0c;容器中的文件将会丢失--应为容器会以干净的状态重建。其次&#xff0c;当在一个Pod中运行多个容…

【算法题目】【Python】彻底刷遍DFS/BFS的算法题目

文章目录参考资料树的前序、中序、后序遍历树的层次遍历回溯与剪枝组合组合总和 III电话号码的字母组合组合总和组合总和 II参考资料 参考这里面的一些讲解&#xff1a; https://github.com/youngyangyang04/leetcode-master。 树的前序、中序、后序遍历 看完 树的种类 之后…

网络 | UDP与TCP协议讲解 | TCP可靠性是怎样实现的?

文章目录前置知识查看网络状态的工具查看进程idUDP协议协议格式UDP只有接收缓冲区基于UDP的应用层协议TCP协议流的理解协议格式确认应答机制缓冲区序号的作用流量控制超时重传机制6位标志位紧急数据的处理三次握手listen的第二个参数全连接和半连接队列都维护了什么信息&#x…

史上最全若依管理系统修改页面标题和logo

整理若依框架去除 若依标题、logo及其他内容。一&#xff1a;网页上的logo进入ruoyi-ui --> public --> favicon.ico&#xff0c;把这个图片换成你自己的logo二&#xff1a;页面中的logo进入ruoyi-ui --> src --> assets --> logo --> logo.png&#xff0c;把…

Git版本控制工具(详解)

Git版本控制工具 Git常见命令速查表 集中式版本控制 cvs和svn都是属于集中式版本控制系统 他们的主要特点是单一的集中管理服务器 保存所有文件的修订版本协同开发人员通过客户端连接到这台服务器 取出最新的文件或者提交更新 优点每个人都可以在一定程度上看到项目中的其他…

动态规划——子序列、编辑距离、回文子串

目录 子序列问题 300.最长递增子序列 674.最长连续递增序列 718.最长重复子数组 1143.最长公共子序列 1035.不相交的线 53.最大子序和 编辑距离 392.判断子序列 115.不同的子序列 583.两个字符串的删除操作 72.编辑距离 回文子串 647.回文子串 516.最长回文子序列…

使用sapply函数改写for循环并绘制迟滞温度与污染物效应图

For循环应该是我们在R语言使用得最普遍的循环了&#xff0c;优势就是简单、易上手&#xff0c;缺点就是慢&#xff0c;特别对于跑数据量比较大的数据。Apply家族函数使用C来编写&#xff0c;运行得非常快&#xff0c;非常适合代替for循环。今天介绍一下sapply函数改写for循环并…

abp.net 5.0 部署IIS10

今天遇到了abp.net 5.0部署iis10被卡住的问题&#xff0c;网上找了一些资料&#xff0c;都不是我要的&#xff0c;最后我总结一下我用的是 5.0的版本&#xff0c;所以我需要给服务器安装 iis5.0的相关运行环境 1&#xff1a;https://dotnet.microsoft.com/zh-cn/download/dotne…

html--学习

javascrapt交互&#xff0c;网页控制JavaScript&#xff1a;改变 HTML 图像本例会动态地改变 HTML <image> 的来源&#xff08;src&#xff09;&#xff1a;点亮灯泡<script>function changeImage() {elementdocument.getElementById(myimage) #内存变量&#xff0…

Linux---基本指令

专栏&#xff1a;Linux 个人主页&#xff1a;HaiFan. 基本指令ls 指令pwd命令cd 指令touch指令mkdir指令&#xff08;重要&#xff09;rmdir指令 && rm 指令&#xff08;重要&#xff09;man指令&#xff08;重要&#xff09;cp指令&#xff08;重要&#xff09;mv指令…

win10 C++调用conda的python

普通 比如说是conda的DL环境&#xff0c;路径是D:\Miniconda3\envs\DL VC目录->包含目录里加入D:\Miniconda3\envs\DL\include VC目录->库目录里加入D:\Miniconda3\envs\DL\libs 链接器->输入->附加依赖项里加入D:\Miniconda3\envs\DL\libs\python37.lib 在l…

“ 寻友之旅 “ 的三种解决办法

题目来源于&#xff1a;稀土掘金 " 寻友之旅 " 的三种解决办法&#xff01; 本文将分别讲解如何使用BFS、双向BFS以及 Dijsktra堆优化的方法来解决此题~ 一起来看看吧&#xff01; 附Java题解代码&#xff01; 文章目录" 寻友之旅 " 的三种解决办法&#…

如何将两个或多个PDF文件合并成一个?这3个方法可以看看

在工作中&#xff0c;有时候我们需要把两个或多个PDF文件合并成一个&#xff0c;这样一来&#xff0c;可以方便阅读、修改&#xff0c;还能快速打印文件。 下面分享3个工具&#xff0c;看看如何将两个或多个PDF文件合并成一个文件。 方法一&#xff1a;使用美图工具 如果PDF文…

【Spring AOP】如何统一“拦截器校验、数据格式返回、异常返回”处理?

目录 一、Spring 拦截器 1.1、背景 1.2、实现步骤 1.3、拦截原理 二、 统一url前缀路径 2.1、方法一&#xff1a;在系统的配置文件中设置 2.2、方法二&#xff1a;在 application.properies 中配置 三、统一异常处理 四、统一返回数据返回格式处理 4.1、背景 4.2、…