计算机科学导论笔记(十)
创始人
2025-05-28 14:16:45

目录

十二、抽象数据类型(ADT)

12.1 背景

12.1.1 简单抽象数据类型

12.1.2 复杂抽象数据类型

12.1.3 定义

12.1.4 模型

12.1.5 实现

12.2 栈

12.3 队列

12.4 广义线性表

12.5 树

12.6 图


十二、抽象数据类型(ADT)

数据结构是计算机存储、组织数据的方式。数据结构包含三个要素:数据的逻辑结构、存储结构和操作。抽象数据类型是一种更抽象的概念,它包括了数据的定义和操作的定义,并不关心它们是如何实现的。网络上对于抽象数据类型与数据结构之间的关系有一些不同的说法,但我倾向于认为抽象数据类型是数据结构的抽象概念,本书的作者也认为抽象数据类型是由数据结构来实现的。

12.1 背景

使用计算机去解决一些问题意味着处理数据,那么我们就需要定义数据的类型以及对该类型数据的操作。例如,我们要让计算机进行两个整数的加法运算,首先就必须使计算机能够存储整数类型的数据,然后定义加法这个操作,我们才能用对应的指令去实现两个整数的加法。随着计算机技术的发展,如今我们处理的数据已经不再是简单的数字了,我们可能希望去处理一组有关联的数据,我们可能需要按照一定的逻辑去组织数据,这就有了抽象数据类型的概念。抽象数据类型包括数据的定义以及数据的操作,并且它只描述是怎样的操作,并不给出如何实现这些操作。

12.1.1 简单抽象数据类型

有些语言中已经定义的整型、字符型、浮点型等数据类型和它们的操作就是简单抽象数据类型。对于整型抽象数据类型来说,它指的是小数点固定的只有整数部分的数字,并且这个ADT定义了它的一些操作,例如加、减、乘、除等。对于我们来说,我们不需要关注加减乘除是如何实现的,只需要知道它们可以用于整型即可。

对于其他的字符型等类型与整型类似,它们也是抽象数据类型。

12.1.2 复杂抽象数据类型

简单抽象数据类型在大部分语言中已经被定义,但有时候我们需要处理类似学生的信息这样复杂的数据,所以需要定义复杂抽象数据类型。就像简单抽象数据类型一样,当我们建立好复杂抽象数据类型后,我们就可以使用它来更高效的处理数据,并且可以不用关注它的操作是如何实现的。显然,抽象数据类型提高了解决问题的效率。

ADT包含了一组允许程序员使用的操作的定义,而这些操作的实现是隐藏的。这种不需要详细说明实现过程的泛化操作称为抽象。

12.1.3 定义

抽象数据类型就是:

数据的定义;

操作的定义;

数据和操作的封装。

12.1.4 模型

抽象数据类型的模型如图所示,书中的私有操作可能是C++中的类成员中的private函数(这个函函数不能在类范围外被访问),这里就当作不存在。抽象数据类型包括数据的定义(数组、链表等)和操作的定义(C语言中可以是函数)。具体的应用程序通过调用对应的函数完成对数据的相应操作,而这一系列动作抽象出来的概念就是抽象数据类型。

12.1.5 实现

在介绍完每个抽象数据类型后,我会附上以前写的抽象数据类型的C语言实现文章,里面还有对一些具体应用的实现。

12.2 栈

栈是一种限制线性表,它的插入和删除只能从栈的一端进行。

栈抽象数据类型:

定义:一种只能在一端存取的数据表项,该端称为栈顶。

操作:建立一个空栈、push(入栈,在栈顶插入元素)、pop(出栈,删除栈顶元素)、empty(判断栈是否为空,判空操作许多数据结构都会用到,因为对空栈等数据结构进行的一些操作是不合法的)。

栈的应用:倒转数据、配对数据、数据延迟使用和回溯等。

栈的实现:

数据结构—栈_thdwx的博客-CSDN博客

12.3 队列

队列是一种线性表,它限制插入只能从队尾,删除只能从队头,就像生活中的队列。

队列抽象数据类型:

定义:一种只能在队头删除并且只能在队尾插入的线性表。

操作:建立队列、enqueue(入队,在队尾插入一个元素)、dequeue(出队,删除队头元素)、empty(判断队列是否为空)。

队列的应用:操作系统等需要排队的地方。

队列实现:

队列的循环数组实现_循环数组实现队列_thdwx的博客-CSDN博客

队列的链表实现_thdwx的博客-CSDN博客

12.4 广义线性表

广义线性表是一种没有栈或队列这样对操作有限制的线性表。

广义线性表抽象数据类型:

定义:一个有序的数据项表,所有的数据具有相同的类型。。

操作:建表、insert(插入某个数据)、delete(删除某个数据)、检索某个位置的数据、查找某个数据、empty(判空)。

广义线性表的应用:存储大学生信息等。

广义线性表实现:

表ADT(抽象数据类型)_thdwx的博客-CSDN博客

12.5 树

关于树的一些定义以及操作都在下方链接的文章里。

数据结构—树_thdwx的博客-CSDN博客

数据结构—二叉树_数据结构二叉树深度_thdwx的博客-CSDN博客

平衡二叉树 (AVL树)-CSDN博客

12.6 图

关于图的定义与操作都在下方链接的文章里。

图的若干定义及表示-CSDN博客

以下都是关于图的一些算法,有一点点难度。

图—拓扑排序_拓扑排序是唯一的吗_thdwx的博客-CSDN博客

单源无权最短路径_无权图的单源最短路径算法_thdwx的博客-CSDN博客

单源赋权最短路径_赋权图单源最短路径_thdwx的博客-CSDN博客

最小生成树—Prim算法_最小生成树prim算法_thdwx的博客-CSDN博客

图—双连通性_图的双连通性_thdwx的博客-CSDN博客

深度优先搜索-CSDN博客

欧拉路径(欧拉环游、欧拉回路)-CSDN博客

相关内容

热门资讯

Opentss代码测试 这是个多方门限签名库,使用rust实现。 代码包含两个功能,秘密共享密钥...
【id:14】【20分】C. ... 题目描述 编写一个函数比较两个字符串,参数是两个字符指针(要求显式定义...
无需公网IP,远程连接SQL ... 文章目录1.前言2.本地安装和设置SQL Server2.1 SQL Server下载2.2 SQL...
WuThreat身份安全云-T... 漏洞名称:CairoSVG 文件服务器端请求伪造 漏洞级别:严重 漏洞编号:CVE-2023-275...
Postgresql源码(10... 1 子事务控制语句分析 1.1 执行savepoint 执行函数: 【立即执行】→De...
python@日期和时间@da... 文章目录python datetimerelativedeltademo`timedelta...
数据库--进阶版-11--SQ... 1.插入数据 ·insert优化: 例如要插入下面这些 insert into tb_...
C语言—文件操作 为什么使用文件使用文件可以直接将数据存放到电脑硬盘上,做到数据的持久化什么是文件硬盘上...
【Zabbix_6.x 第三章... 文章目录👹 关于作者Zabbix 系列文章目录第三章 监控任意主机一、解决第二章登录...
python爬虫可以爬什么 Python爬虫可以爬取的东西有很多,Python爬虫怎么学?简单的分析...
组态王与200SMART之间无... 在实际的工业场合应用中,人机界面跟PLC配套使用是比较常见的现场“CP组合”ÿ...
KaiwuDB 荣获第三届 I... 3月17日,由中国某部电子化标准研究院、苏州金融科技协会、中国计算机用户协会指导&#x...
上海人工智能企业CIMCAI智... 上海人工智能企业CIMCAI智能港口自动化港口数字化码头智慧港航,成熟终端智慧港航人工...
红米note10 pro机型解... 前言。操作解除锁类案例只限于自己的机型, 因手机号长期不用或者忘记密码导致账号锁出现的...
9、Cascaded Diff... 简介 主页:https://cascaded-diffusion.github.io/...
异核通信框架(1)——SMP和... 0.前言         我是菜鸡,很久没有发表文章了。老样子,今天推荐...
Leetcode.2048 下... 题目链接 Leetcode.2048 下一个更大的数值平衡数 Rating : 17...
GBASE南大通用第二届校园大... 第二届校园大使在本周正式集结完毕啦! 全国一共有27所高校近50余名学生报名参加。 各...
Blender Apps?20... 2023 年对 Blender 来说将会是很有趣的一年,除了努力保持核心功能稳定和不断...
Python数据结构与算法(p... 学习材料清华大学博士讲解Python数据结构与算法 B站:https://www.bi...
Docker安装使用Nacos Docker安装使用Nacos1 参考2 Nacos版本2.1 访问地址3 Docker部署Naco...
Spring Boot 接口统... 需求 需求如题,想给一个 spring boot 项目的所有请求路径添加统一前缀&#x...
Boeing MQ-28 Gh... Boeing MQ-28 Ghost Bat作为五代机忠诚僚机的开山之作,今天我们来一...
线性动态规划问题 文章目录1. 三角形中最小路径之和2. 最长递增子序列3. 最长公共子序列 1. 三角形中最小路径之...
携手共赢!菊风荣获三基同创“2... 近年来智能手表市场发展势头迅猛,为满足用户多样化的应用场景,对于音视频能...
CentOS8提高篇3:Cen... 1. 准备工作(需要配置epel, rpmfusion源); 配置e...
计算机组成原理(7)--哈工大 程序中断方式中断的概念I/O中断的产生CPU和打印机部分并行工作程序中断方式的接口电路配置中断请求触...
Amazon S3 客户端:T... TntDrive 是适用于 Windows 的新 Amazon S3 客户端。使用 TntDrive...
java8 jdk1.8在wi... 一、软件下载 1、从网盘获取 java8安装包 2、或者从官网获取(需要提前注册ora...
【 Deep-Shallow ... A Deep-Shallow Fusion Network with Multi-Detail Ex...