数据结构:线性表的类型定义

news2024/11/19 18:21:37

线性表的类型定义

线性表是最简单、也是最基本的一种线性数据结构。它有两种存储表示方法:顺序表和链表,它的主要基本操作是插入、删除和查找。

线性表是n(n>=0)个数据元素的有限序列,表中各个数据元素具有相同特性,即属同一数据对象,表中相邻的数据元素之间存在“序偶”关系。通常将线性表记做

(a1,a2, …,ai-1,ai,ai+1,…,an-1,an)

则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i=1,2,…,n-1时,ai有且仅有一个直接后继,当i=2,3,…,n时,ai有且仅有一个直接前驱.

线性表中的个数n(n>=0)定义为线性表的长度,n=0时称为空表。在非空表中每个数据元素都有一个确定的位置,如用ai表示数据元素,则i称为数据元素ai在线性表中的位序

特征:
1.集合中必存在唯一的一个“第一元素”。
2.集合中必存在唯一的一个 “最后元素” 。
3.除最后一个元素之外,均有唯一的后继(后件)。
4.除第一个元素之外,均有唯一的前驱(前件)。

线性表的基本操作

在应用程序中经常会用到线性表,每一个具体的应用所涉及的线性表的操作不尽相同。综合各种情况,对线性表经常进行的基本操作有:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基本操作实例

现在我们举三个栗子来练习一下这些基本操作:

1、假设利用两个线性表 La 和 Lb 分别表示两个集合 A 和 B(线性表中的数据元素即为集合中的成员),求一个新的集合 A=AUB。

具体的操作步骤为:
(1)从线性表 Lb 中取得一个数据元素;
(2)依该数据元素的值在线性表 La 中进行查访;
(3)若线性表 La 中不存在和其值相同的数据元素,则将从 Lb 中删除的这个数据元素插人到线性表 La 中;重复以上操作直至 Lb 为空表止。

void union (List &La, List &Lb)
{
   // 将线性表 Lb 中所有在 La 中不存在的数据元素插人到 La 中
   // 算法执行结束后,线性表 Lb 不再存在
   La_len= Listlength (La) ;// 求线性表 La 的长度
   while (!ListEmpty (Lb)) // Lb 表的元素尚未处理完
   {
      ListDelete(Lb,1, e) ;// 从 Lb 中删除第一个数据元素赋给 e
      if (!LocateElem(La, e)) 
      ListInsert (La,++La_len,e) ;
      // 若 La 中不存在值和 e 相等的数据元素
      // 则将它插入在 La 中最后一个数据元素之后
   }// while
   DestroyList (Lb) ;// 销毁线性表 Lb
)// union

2、已知一个非纯集合 B(即集合 B 中可能有相同元素),试构造一个纯集合 A,使A 中只包含 B 中所有值各不相同的成员。

具体操作步骤为:
(1)构造一个空的线性表 La;
(2)从线性表 Lb 中取得一个数据元素;
(3)依该数据元素的值在线性表 La 中进行查访;
(4)若线性表 La 中不存在和其值相同的数据元素,则将从 Lb 中删除的这个数据元素插入到线性表 La 中:重复(2)至(4)的操作直至Lb 为空表止。

void purge(List &La,List &Lb)
{
    // 构造线性表 La,使其只包含 Lb 中所有值不相同的数据元素,
    //操作完成后,线性表 Lb 不再存在
    InitList(La); 创建一个空的线性表La
    La_len=0; 
    while(!ListEmpty(Lb))//Lb表的元素尚未处理完
    {
          ListDelete(Lb,1,e)//从Lb中删除第一个数据元素赋给e
          if (!LocateElem(La, e)) 
          ListInsert (La,++La_len,e) ;// 若 La 中不存在值和 e 相等的数据元素,则插入进去
     }//while
     DestroyList (Lb) ;// 销毁线性表 Lb
}//purge

3、判别两个集合 A 和 B 是否相等

两个集合相等,指的是这两个集合中包含的成员相同。当以线性表表示集合时,则要求分别表示这两个集合的线性表 La 和 Lb 不仅长度相等,所含数据元素也必须一一对应。值得注意的是,两个“相同”的数据元素在各自的线性表中的“位序”不一定相同。

具体操作步骤为:先构造一个和线性表 La 相同的线性表 Lc,然后对 Lb 中每个数据元素,在 Lc 中进行查询,若存在则从 Lc 中删除之,显然,当 Lb 中所有元素检查完毕时,“Lc 为空”是两个集合相等的标志。上述算法中构造的线性表 Lc 是一个辅助结构,它的引入是为了在程序执行过程中不破坏原始数据 La,因此在算法的最后应销毁 Lc 这个辅助结构。

bool isequal (List La, List Lb)
{
     // 若线性表 La 和 Lb 不仅长度相等,且所含数据元素也相同,则返回 TRUE
     // 否则返回 FALSE
     La_len= ListLength (La) ; 
     Lb_len= ListLength (Lb) ; //求表长 
     if (La_len != Lb_len) 
      return FALSE;
     else
     {
        InitList (Lc) ;// 构造空线性表 Lc
        for (k= 1; k< = La_len; k++) // 生成线性表La的“复制品”Lc
        (
              GetElem(La,k,e) ;
              ListInsert (Lc,k,e) ;
        )//for
        found=TRUE;
        for(k=1;k<=Lb_len;k++)
        {
             GetElem(Lb,k,e);//取Lb中第k个元素
             i=LocateElem(Lc,e);//在Lc中进行查询
             if(i==0)
             found=FALSE; La中不存在和该数据元素相同的元素
             else
             ListDelete(Lc,i,e); 从 Lc中删除该数据元素
        }//for
        if(found&&ListEmpty(Lc))
        return TRUE;
        else
        return FALSE;
     }//else
}//isequal

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

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

相关文章

LeetCode 114. 二叉树展开为链表

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 114. 二叉树展开为链表&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称 Leet…

2021年大数据挑战赛A题智能运维中的异常检测与趋势预测

2021年大数据挑战赛 A题 智能运维中的异常检测与趋势预测 原题再现&#xff1a; 异常检测&#xff08;异常诊断/发现&#xff09;、异常预测、趋势预测&#xff0c;是智能运维中首当其冲需要解决的问题。这类问题是通过业务、系统、产品直接关联的 KPI 业务指标进行分析诊断&…

MD语法 官方参考

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

Python小技巧:if __name__ == “__main__“ 的作用

前言 这里是Python小技巧的系列文章。这是第一篇&#xff0c;if __name__ "__main__" 的作用。 在编写Python程序时候&#xff0c;总是习惯性的在文件的末尾添加这么一段代码。 if __name__ "__main__":...至于它的作用是什么&#xff0c;先不管&#x…

内网渗透-src挖掘-外网打点到内网渗透-3层内网渗透测试记录(2)-2023年1月

1、确定目标之后&#xff0c;先进行信息搜集 对目标的先进行ip端口扫描&#xff0c;发现开放了22和80端口 2、访问80端口,为Laravel框架 3、发现该版本为Laravel v8.78.1 (PHP v7.4.3) 漏洞库中搜索&#xff0c;发现该版本的Laravel存在&#xff0c;CVE-2021-3129-Laravel De…

免费格式转换器有哪些?这几款一定要试试

相信在现在的工作中&#xff0c;大家都或多或少需要处理一些文件&#xff0c;有时候我们需要把PDF文件转为word文件&#xff0c;还可能需要将PDF文件转为PPT文件等等&#xff0c;这个时候我们就需要选择一款好用的格式转换器&#xff0c;如果转换文件量比较大的小伙伴们还需要重…

odoo16 修改odoo加载过程

在odoo加载过程中&#xff0c;title处会显示odoo以及odoo标签图片&#xff0c; 所以我们可以进行修改&#xff0c;将其公司化 1. 修改无公司名称时显示字样 <title t-esc"title or Odoo"/> <!--路径&#xff1a;addons/web/views/webclient_templates.xml…

2022.12 青少年软件编程(Python) 等级考试试卷(一级)

2022年12月 青少年软件编程&#xff08;Python&#xff09; 等级考试试卷&#xff08;一级&#xff09; 分数&#xff1a; 100 题数&#xff1a; 37 一、 单选题(共 25 题&#xff0c; 共 50 分) 1. 关于Python语言的注释&#xff0c;以下选项中描述错误的是&#xff1f;&#…

ThinkpadCPU锁频0.4G问题

1.问题描述 Thinkpad型号&#xff1a;E15 CPU&#xff1a;i5-10210U1.6GHz 系统&#xff1a;Win10家庭版 ThinkpadCPU锁频0.4G&#xff0c;具体是过程是今天我需要去楼下打印东西&#xff0c;要带着笔记本电脑&#xff0c;拔掉电源我就去楼下。 刚开始还是好好的&#xff0c;…

PyQt5 serial模块-串口小工具

PyQt5 serial模块-串口小工具串口简述serial模块参数方法使用模板串口工具示例串口简述 异步串行是指UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;&#xff0c;通用异步接收/发送。UART是一个并行输入成为串行输出的芯片&#xff0c;通常集成在主…

java 基础练习 圆的面积

问题描述给定圆的半径r&#xff0c;求圆的面积。输入格式输入包含一个整数r&#xff0c;表示圆的半径。输出格式输出一行&#xff0c;包含一个实数&#xff0c;四舍五入保留小数点后7位&#xff0c;表示圆的面积。说明&#xff1a;在本题中&#xff0c;输入是一个整数&#xff…

Oracle通过数据库链连接KingbaseES

测试环境&#xff1a; ip数据库版本192.168.254.135oracle 11g192.168.254.137V008R006C005B0023 通过oracle官网得知&#xff0c;Oracle使用DG4ODBC作为连接到其他非Oracle数据库的数据网关。其原理图如下&#xff1a; 所以我们需要在Oracle服务器安装unixODBC和KingbaseES的O…

4 位硬科技创始人对谈 DevOps 硬件实战

随着 DevOps 技术更为广泛地在各行各业应用&#xff0c;从公司层面来看&#xff0c;考察的不仅仅是 DevOps 平台的技术&#xff0c;更多的是 DevOps 平台与企业产品的兼容性与企业文化能否为 DevOps 提供落地的土壤&#xff0c;这背后是商业模式、思维方式、管理理念的一系列变…

【项目实战】一文讲解车企是如何做HTTPS双向认证的

一、背景 很多主机厂都说需要做HTTPS的双向认证&#xff0c;那到底什么是双向认证呢&#xff1f; 二、什么是Https的双向认证&#xff1f; 英文是Mutual TLS HTTPS双向认证是一种安全通信方式&#xff0c;它需要在客户端和服务端之间进行双向身份验证。在这种方式中&#x…

2.浅谈计算机系统(硬件+软件)。

一、现代计算机系统是由哪两部分组成的&#xff1f;1.什么是物联网&#xff1f;2.有些计算机是非常复杂的。二、计算机系统简介。计算机系统的构成&#xff08;硬件、软件&#xff09;。三、软件。1.系统软件。2.应用软件。思维导图是清菡本人所画。一、现代计算机系统是由哪两…

C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(一)

C#上位机基础学习_基于SOCKET实现与PLC服务器的TCP通信(一) 测试软件: TIA PORTAL V15.1 S7-PLCSIM ADVANCED V3.0 Visual Studio 2019 如下图所示,打开S7-PLCSIM ADVANCED V3.0仿真软件,新键一个实例,设置仿真PLC的IP地址等参数,然后点击Start激活PLC, 如下图所示,…

蓝牙耳机怎么连接电脑?无线耳机连接电脑的教程

想要减少噪音&#xff0c;更好地聆听音乐&#xff0c;或者是看电视&#xff0c;很多人都会选择戴耳机。其中蓝牙耳机成为越来越多人的选择&#xff0c;它方便携带&#xff0c;没有有线的缠绕。 可能有人会问&#xff1a;无线蓝牙耳机可以连接电脑吗&#xff1f;当然可以。可是…

【3 - 数据预处理】菜菜sklearn机器学习

课程地址&#xff1a;《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili 第一期&#xff1a;sklearn入门 & 决策树在sklearn中的实现第二期&#xff1a;随机森林在sklearn中的实现第三期&#xff1a;sklearn中的数据预处理和特征工程第四期&#xff1a;sklearn中的降维算法…

前端使用xlsx-js-style导出Excel文件并修饰单元格样式

xlsx-js-style安装引入需要导出的数据源将数据源转成需要的二维数组定义 Excel 表头将定义好的表头添加到 body 中将二维数组转成 sheet!merges 设置单元格合并!cols 设置列宽!rows 设置行高创建虚拟的 workbook向 workbook 中添加 sheet导出 workbook完整示例效果图总结安装 …

elasticsearch实现简单的脚本排序(script sort)

文章目录1、背景2、分析3、构建数据3.1 mapping3.2 插入数据4、实现4.1 根据省升序排序4.1.1 dsl4.1.2 运行结果4.2 湖北省排第一4.2.1 dsl4.2.2 运行结果4.3 湖北省排第一&#xff0c;其余省升序排序&#xff0c;按照年龄倒序4.3.1 dsl4.3.2 java代码4.3.3 运行结果5、完整代码…