【数据结构】线性表的抽象数据类型

news2025/1/26 15:37:05

🦄个人主页:修修修也

🎏所属专栏:数据结构

⚙️操作环境:Visual Studio 2022


线性表抽象数据类型(LinearListAbstractDataType,简称 ADT)是一种非常重要的抽象数据类型,它是一种使用抽象的方式表示和实现一组数据元素的集合以及与之相关的一组操作的一种抽象数据类型

它是由三个部分组成的:

  1. 一组数据元素的集合(链表,队列,栈等)
  2. 这组数据元素之间的关系(集合关系,线性关系,树形关系,网状关系)
  3. 与这组数据元素相关的操作(插入,删除,查找)

我们在上篇中拿这张图给大家类比过线性结构:

这张图就是一个数据集合,而数据元素就是一个一个小朋友,很明显他们之间的关系是线性的.

那么这些数据元素之间又会有什么操作呢?

你看上面这张图,一看就是没经验的老师排的队,有的小朋友高,有的矮,队伍一点也不好看.所以我们让小朋友解散重新排——这是一个线性表重置为空表的操作.

排好了队,我们想知道某个小朋友在不在队里,在队里的哪个位置?那就要用到查找某个元素位置的操作.

有时候还会有家长问老师,现在班里有几个同学啊?这就要用到求线性表的长度的操作.

当然还会有小朋友转入和转出的操作,这就要用到数据元素的插入和删除操作.

综上,线性表的抽象数据类型定义如下:

ADT 线性表(List)
Data
	线性表的数据对象集合为 {a1, a2, ..., an},每个元素的类型均为DataType.
	其中, 除第一个元素a1外, 每一个元素有且只有一个直接前驱元素.
	除了最后一个元素an外, 每一个元素有且只有一个直接后继元素.
	数据元素之间的关系是一对一的关系.
Operation
	InitList(*L);			初始化操作, 建立一个空的线性表L.
	ListEmpty(L);			若线性表为空,返回true,否则返回false.
	ClearList(*L);			将线性表清空.
	GetElem(L, i, *e);		将线性表L中的第i个位置元素值返回给e.
	LocateElem(L, e);       在线性表L中查找与给定值e相等的元素.
                            如果查找成功, 返回该元素在表中序号表示成功;
                            否则,返回0表示失败.
	ListInsert(*L, i, e);	在线性表L中的第i个位置插入新元素e.
	ListDelete(*L, i, e);	删除线性表L中第i个位置元素,并用e返回其值.
	ListLength(L);			返回线性表L的元素个数.
endADT

当然,对于不同的应用,线性表的基本操作是不同的,上面这些只是最基本的,对于实际问题中涉及的关于线性表的更复杂操作,完全可以用这些基本操作的组合来实现.

比如,要实现两个线性表集合A和B的并集操作.即要使得集合A=AUB.其实就是把存在于集合B中但并不存在于A中的数据元素插入到A中即可.

再带入到上面的基本操作中,其实就是先循环B中的每个元素,判断是否属于A,如果不存在,则插入到A中即可.

可见,对于复杂的个性化操作,其实就是把基本操作组合起来实现的.


结语

当我们搞清楚线性表的抽象数据类型后,在数据结构线性表篇我们还将一起学习线性表的顺序存储结构(顺序表的实现),线性表的链式存储结构(链表的实现)等相关知识.希望这些内容能对大家有所帮助,一起学习,一起进步!

相关文章推荐

【数据结构】什么是数据结构?

【数据结构】什么是算法?

【数据结构】线性表的抽象数据类型

【数据结构】线性表的顺序存储结构(顺序表详解)

【数据结构】线性表的链式存储结构(链表的实现)

【数据结构】抽象数据类型

......



数据结构线性表篇思维导图:

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

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

相关文章

宝塔面板服务器内存使用率高的三招解决方法

卸载多余PHP版本。假若安装了多个PHP版本,甚至把 php 5.3、5.4、7.0、7.3 全都安装上了,就会严重增加系统负载和内存使用率。 安装memcached 缓存组件,建议在宝塔面板后台直接安装。 卸载不常用软件。如:宝塔运维、宝塔一键安装…

php如何查找地图距离

要在PHP中使用高德地图、百度地图或腾讯地图获取位置信息,您可以使用它们的相应API服务。以下是获取位置信息的一般步骤: 思路: 获取API密钥:首先,您需要注册并获取相应地图服务提供商的API密钥。这将允许您访问他们的API以获取位…

CSS的美化(文字、背景) Day02

一、文字控制属性 分为:字体样式属性 、文本样式属性 1.1 CSS字体样式属性 1.color定义元素内文字颜色2.font-size 字号大小3 font-family 字体4 font-weight 字体粗细5.font-style 字体风格6.font 字体综合属性 1.1.1 > 文字颜色 color 属性名: color color …

Yakit工具篇:简介和安装使用

简介(来自官方文档) 基于安全融合的理念,Yaklang.io 团队研发出了安全领域垂直语言Yaklang,对于一些无法原生集成在Yak平台中的产品/工具,利用Yaklang可以重新编写 他们的“高质量替代”。对于一些生态完整且认可度较高的产品,Y…

C# CodeFormer 图像修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {p…

高校教务系统登录页面JS分析——南京邮电大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍南京邮电大学教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习,勿用于非法用途。 一…

C++标准模板(STL)- 类型支持 (数值极限,min_exponent10,max_exponent,max_exponent10)

数值极限 std::numeric_limits 定义于头文件 <limits> 定义于头文件 <limits> template< class T > class numeric_limits; numeric_limits 类模板提供查询各种算术类型属性的标准化方式&#xff08;例如 int 类型的最大可能值是 std::numeric_limits&l…

多个Python包懒得import,那就一包搞定!

使用Python时&#xff0c;有的代码需要依赖多个框架或库者来完成&#xff0c;代码开头需要import多次&#xff0c;比如&#xff0c; import pandas as pd from pyspark import SparkContext from openpyxl import load_workbook import matplotlib.pyplot as plt import seabo…

Java Day2(Java基础语法)

Java基础 Java基础语法1. 注释、关键字、标识符1.1 Java中的注释1.2 关键字1.3 标识符 2. 数据类型&#xff08;1&#xff09;基本类型&#xff08;primitive type&#xff09;a.字节b.进制c. 浮点数拓展d. 字符拓展 &#xff08;2&#xff09; 引用类型(Reference type ) 3. 类…

【软件测试】总结

文章目录 一. 测试用例1. 常见设计测试用例(1)非软件题型(2)软件题型(3)代码型题(4)关于个人项目设计测试用例 2. 万能公式和具体的方法如何理解(1)万能公式(2)Fiddler实现弱网模式(3)针对公交卡设计测试用例 3. 进阶设计测试用例 二. 自动化1. 什么是自动化以及为什么要做自动…

杀死僵尸进程ZooKeeperMain

关闭Hadoop后jps发现还有个进程ZooKeeperMain没有关闭&#xff0c;使用kill -9 <>也没有用&#xff0c;这种就是僵尸进程&#xff0c;需要用父进程ID来杀死 解决方法 话不多说&#xff0c;直接上解决方案&#xff0c; 1. 第一步 清楚需要关闭的进程ID&#xff0c;我…

CentOS-7下安装及配置vsftpd详细步骤(可匿名访问)

第一步安装vsftpd&#xff1a; yum -y install vsftpd 第二步修改ftp主目录所属用户为用户ftp&#xff1a; chown ftp /var/ftp/pub 第三步备份及配置ftp&#xff1a; cp /etc/vsftpd/vsftpd.conf ~/vsftpd.conf.bakvim /etc/vsftpd/vsftpd.conf 配置如下图&#xff1a;…

《AWD特训营》CTF/AWD竞赛的速胜指南!全面提升安全技术

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《粉丝福利》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、AWD竞赛的由来《AWD特训营&#xff1a;技术解析、赛题实战与竞赛技巧》1.1介绍&#xff1a; 《AWD特训营》…

Qt拖拽文件到窗口、快捷方式打开

大部分客户端都支持拖拽文件的功能&#xff0c;本篇博客介绍Qt如何实现文件拖拽到窗口、快捷方式打开&#xff0c;以我的开源视频播放器项目为例&#xff0c;介绍拖拽视频到播放器窗口打开。   需要注意的是&#xff0c;Qt拖拽文件的功能&#xff0c;不支持以管理员权限启动的…

《PyTorch深度学习实践》第三讲 反向传播

《PyTorch深度学习实践》第三讲 反向传播 问题描述问题分析编程实现代码实现效果 参考文献 问题描述 问题分析 编程实现 代码 import torch # 数据集 x_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0] # w权重 w torch.tensor([1.0]) w.requires_grad True # 需要计算梯度…

Kubernetes实战(二)-使用Kor过滤Kubernetes未使用资源

1 概述 Kor 是一个找到未使用 Kubernetes 资源的工具。目前&#xff0c;Kor 能够识别并列出以下未使用的资源&#xff1a; ConfigMap Secret Service ServiceAccount Deployment StatefulSet Role HPA PVC Ingresse PDB 2 安装部署 安装方法 从发布页面下载对应你…

OFDM原理及MATLAB仿真

文章目录 前言一、OFDM 总体概述1、OFDM 概述2、OFDM 优点 二、OFDM 基本原理1、基本思想2、OFDM 调制和解调3、OFDM 系统的发射机和接收机框图 三、OFDM 系统数学模型1、sinc 函数2、OFDM 时域表达式3、OFDM 频域表达式 四、OFDM 时域及频域仿真1、绘制时域及频域波形①、MATL…

SpringCloud-Sleuth

一、介绍 &#xff08;1&#xff09;用于追踪服务链路 &#xff08;2&#xff09;搭配zipkin实现 二、项目搭建 &#xff08;1&#xff09;下载zipkin.jar https://repo1.maven.org/maven2/io/zipkin/java/zipkin-server/2.12.9/&#xff08;2&#xff09;运行 java -jar …

Android---Android 是如何通过 Activity 进行交互的

相信对于 Android 工程师来说&#xff0c;startActivity 就像初恋一般。要求低&#xff0c;见效快&#xff0c;是每一个菜鸟 Android 工程师迈向高级 Android 工程师的必经阶段。经过这么多年的发展&#xff0c;startActivity 在 google 的调教下已经变得愈发成熟&#xff0c;对…

Python文件读写实战:处理日常任务的终极工具!

更多资料获取 &#x1f4da; 个人网站&#xff1a;涛哥聊Python Python文件的读写操作时&#xff0c;有很多需要考虑的细节&#xff0c;这包括文件打开方式、读取和写入数据的方法、异常处理等。 在本文中&#xff0c;将深入探讨Python中的文件操作&#xff0c;旨在提供全面的…