堆被视为抽象数据类型吗?

2024-02-05

我正在学习数据结构课程,并对什么被认为是 ADT(抽象数据类型)和什么不是(如果它不是 ADT 那么它一定是实现?)感到有点困惑。

具体来说,我说的是堆。

我在维基百科上读到“堆是一种专门的基于树的数据结构”,这是否意味着它是一个ADT?如果是这样,那么我无法理解以下行,也来自维基百科“堆是称为优先级队列的抽象数据类型的一种最有效的实现”。

我的意思是,堆可以是一个 ADT,也可以是其他一些 ADT 的实现(在本例中是优先级队列的实现)?我理解 ADT 的概念,在二元堆的上下文中,我理解它可以使用数组来实现,其中arr[i]是的父级arr[2i] and arr[2i + 1]我只是很困惑堆是否可以一方面是使用数组实现的 ADT,另一方面是实现其他 ADT 的数据结构。

想得到一些关于此事的澄清。


堆不是 ADT。它是一种数据结构。


维基百科的强制性引用:

在计算机科学中,抽象数据类型(ADT)是一种数学 数据类型模型,其中数据类型由其行为定义 (语义)从数据用户的角度来看,特别是 就可能的值、此类数据的可能操作而言, 以及这些操作的行为。这与数据形成对比 结构体,是数据的具体表示,是 实施者的观点,而不是用户的观点。


奖励内容的灵感来自 Steve McConnell 的《Code Complete - 2》。

与在问题域中工作的 ADT 相比,数据结构是低级实现域项。 ADT 允许您操纵现实世界的实体,而不是低级的实现实体。您可以将单元格添加到电子表格中,将新类型的窗口添加到窗口类型中,或者将另一个乘客添加到火车模拟中,而不是将节点插入到链接列表中或将项目添加到堆中。

  • 你可以清楚地看到堆定义了像 insert()、heapify()、peek()、getTop() 等语义 - 列出here https://en.wikipedia.org/wiki/Heap_(data_structure)#Operations详细。因此它是一种数据结构。

  • 但是,如果您模拟俄罗斯方块游戏,其中添加一个新块将简单地放置在它掉落的地方的顶部,则该俄罗斯方块游戏的 UI 实际上将是一个 ADT。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

堆被视为抽象数据类型吗? 的相关文章

  • clojure 中的反转哈希映射

    我在 clojure 中有哈希映射 key1 value1 key2 value2 key3 value1 我需要将其转换为哈希映射 value1 key1 key3 value2 key2 有 Clojure 方法可以做到这一点吗 clo
  • 如何实现一套?

    我想用C实现一个Set 创建 SET 时可以使用链表吗 还是应该使用其他方法 您通常如何实现自己的集合 如果需要 笔记 如果我使用链表方法 我的 Set 操作可能会遇到以下复杂性 初始化 O 1 销毁 O n 插入 O n 删除 O n 并
  • 我应该如何存储不同时区事件的数据?

    这是一个概念性问题 因此这里没有代码片段 假设我创建了一个事件数据库 其中一些在纽约 一些在芝加哥 一些在凤凰城 等等 我的服务器的时区设置为纽约 在我看来 为所有这些事件创建 UNIX 时间戳时有两种选择 考虑时区 即 1 月 1 日午夜
  • 布隆过滤器的实现

    使用布隆过滤器 我们将获得空间优化 cassandra 框架也有 Bloom Filter 的实现 但具体来说 这种空间优化是如何实现的呢 您可以使用以下示例了解它如何节省空间 假设我在 Google Chrome 团队工作 我想向浏览器添
  • C++ 或 Java 中保存 20 位整数的数据类型

    Java 或 C 中是否有可以保存 20 位或更多数字的整数值的数据类型 long long 数据类型最多只能容纳 18 位数字 Java具体 您正在寻找BigInteger http docs oracle com javase 7 do
  • 在可移植 C 中模拟打包结构

    我有以下结构 typedef struct Octree uint64 t data uint8 t alignas 8 alloc uint8 t dataalloc uint16 t size datasize node0 Node8
  • 将自行车分配给人员 - 第一优先级(距离最近的人最近的自行车)

    将网格传递给某个位置有自行车和人员的函数 c A a b D d B C Output 像这样的东西 A 1 B 3 C 8 D 1 其中 A 是人 1 是到达自行车所需的步数 标准 距离自行车最近的人 优先获得自行车 单辆自行车不能分配给
  • 使用堆属性按排序顺序打印树 (Cormen)

    我对算法理论 来自 Cormen 感到耳目一新 二进制尝试一章中有一个练习 要求 min heap 属性可以用来打印 n 节点的键吗 树在 O n 时间内排序 展示如何做 或解释为什么不做 我想是的 这是可能的 在最小堆中 节点中的元素小于
  • 何时使用 Box> 或 Vec>?

    什么时候设计一个嵌套的数据结构才有意义 Box and a Vec 或相反亦然 似乎在大多数情况下 您想在堆上存储多个固定大小的东西 Box是多余的 因为它唯一的 作用是堆分配一个 单个值 以及一个正常的Vec已经在堆上分配其存储空间 背景
  • 如何在javascript中实现deque数据结构?

    我正在用 javascript 学习数据结构 我现在的重点是如何实现双端队列 编辑 从下面的评论中我得到了有关如何实施的有用指示deque based array 有没有一个具体实施的方向deque based object使用类 我明白了
  • PHP 中的 MPTT(修改的先序树遍历)问题

    我的第一篇文章在这里 看来这是一个变得明智的地方 我目前正在进行一些测试 第一次尝试使用 MPTT 修改的预序树遍历 方法在 PHP 的帮助下将数据存储在 Mysql 数据库中 但是 我试图找到最注重性能的方法来获取特定级别上的所有列表元素
  • 同步不经常更新的哈希图的最佳方式

    我有一个在应用程序中使用的 HashMap 数据是在应用程序初始加载期间从数据库填充的 然后它始终只是读取并且从不更新 会有多个线程不断地读取数据 由于数据永远不会更新 因此我们目前不使用任何同步 仅使用 HashMap 我们现在定义的方式
  • 为什么 .Net 词典中的条目是按加法顺序排列的?

    我刚刚看到这种行为 我对此感到有点惊讶 如果我向字典中添加 3 或 4 个元素 然后执行 For Each 来获取所有键 它们将以我添加的顺序出现 这让我感到惊讶的原因是字典内部应该是一个哈希表 所以我希望事情能以任何顺序出现 按键的哈希排
  • 比较 C# 中 DateTime 的二进制表示形式

    我有一个DateTime表示为长 8 个字节 来自DateTime ToBinary 我们称之为dateTimeBin 是否有一种最佳方法可以删除时间信息 我只关心日期 以便我可以将其与一天的开始进行比较 假设我们将此样本值作为一天的开始
  • 从 python 中的缩进文本文件创建树/深度嵌套字典

    基本上 我想迭代一个文件并将每行的内容放入一个深层嵌套的字典中 其结构由每行开头的空格数量定义 本质上 目标是采取这样的事情 a b c d e 并将其变成这样的东西 a b c d e Or this apple colours red
  • 节点*链表中的下一个

    我是数据结构和算法的新手 我遇到了以下代码 typedef struct node int data node next 谁能告诉我为什么我们要声明节点 next next 不能声明为 int next 吗 因为你希望能够做到n gt ne
  • Delphi 5 的哈希表实现 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您知道 Delphi 5 的良好且免费的哈希表实现吗 我需要在哈希表中组织大量数据 并且我有点担心在网
  • 子序列和

    给定一个整数数组 例如 1 2 3 1 查找是否存在总和为0并返回它 例如 1 2 3 or 2 3 1 检查每个子序列是O n 2 这效率太低了 有改进的想法吗 创建一个新数组 其中每个元素等于前一个元素加上该元素的总和 Input 1
  • 生成二叉树的所有从根到叶的分支

    抱歉 如果这是一个常见问题 但我还没有找到适合我的特定问题的答案 我正在尝试实施一个walk方法将二叉树从根节点遍历到每个叶节点 每当到达叶节点时都会生成根到叶路径 例如 遍历表示为的二叉树 a b d c 会产生 a b c a d 我的
  • 如何在文件系统中存储图像

    目前 我已将图像 最大 6MB 作为 BLOB 存储在 InnoDB 表中 随着数据大小的增长 夜间备份变得越来越慢 阻碍了正常性能 因此 二进制数据需要进入文件系统 指向文件的指针将保存在数据库中 数据具有树状关系 main site u

随机推荐

  • 向 iPhone 应用程序添加加密对批准有何影响? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如果我向 iPhone 应用程序添加加密 主要是在发送到服务器时加密用户名 密码 我需要对 iTunes connect 中关于是否向应用
  • 为什么要创建自己的 Haar 分类器级联?

    I found this http note sonots com SciSoftware haartraining html t1a1f262有关创建您自己的 haar 分类器级联的教程 这向我提出了一个问题 运行 HaarTrainin
  • .htaccess 使用 php $_GET 缩短 URL

    我需要能够缩短我的页面 mydomain com mixtape php mixid WHATEVER NUMBER To mydomain com m WHATEVER NUMBER 现在通常这对我来说不是什么大问题 但由于我的 htac
  • 如何将 NSString 哈希为 SHA512

    我有一个简单的问题 我正在构建一个社交媒体网站应用程序 我需要对密码 NSString 进行哈希处理 我将如何实现这个目标 我的应用程序上有密码字段 并且想要对字符串进行哈希处理并将其编码为 SHA512 以用于 POST 请求 提前致谢
  • Jquery 时间线插件 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找水平轴上有年份的 jquery 时间线插件 我过去见过一个 我找不到它 是否搜索了 jquery 时间轴插件 这是我保存在书签中
  • 从 Web 服务返回 XElement

    是否可以从 Web 服务 在 C asp net 中 返回 XElement 尝试一个返回 XElement 的简单 Web 服务 WebMethod public XElement DoItXElement XElement xe new
  • C# 元组列表多重排序

    我有一个三维元组数组 var CountList new List
  • Swing:JDialogs 如何与 JFrame 对话

    我正在构建我的第一个 Swing 应用程序 并试图弄清楚我的 JDialogs 当用户选择 JMenuItem 时专门调用 如何更新 JFrame 的主客户端区域中的组件 JFrame 是整个应用程序的父 窗口 这是我想出的设计 但不知道它
  • 为什么整数除以零会导致浮点异常?

    C 程序中除以零会导致异常终止并显示错误消息Floating point exception core dumped 这对于浮点除法来说并不奇怪 但是当整数除以零时为什么会这样说呢 整数除法实际上在幕后使用了 FPU 吗 顺便说一句 这都是
  • QT 未定义对“_Unwind_Resume”的引用

    当尝试在 qt 中切换到 gcc 4 6 2 在工具链中设置 时 出现以下错误 c ndk buildrepos qt desktop src winmain qtmain win cpp 93 error undefined refere
  • pythonplotly:如何使用滑块制作等值线图(访问网格数据问题)

    我想绘制一个等值区域世界地图 其中包含年份值的滑块 它将是 Choropleth Map 和 Adding Sliders to Animations 的组合 https plot ly python https plot ly pytho
  • 如何在 Android Studio 4.2.1 中获取 SHA1 和 SHA256

    一般来说我们可以从SHA证书指纹 Gradle 在 Android Studio 的右侧 gt 任务 gt Android gt 签名报告 但在 Android Studio 最新更新 4 2 1 中 任务未显示获取 SHA 指纹的选项 那
  • 当我使用“传统”C 风格函数声明时,JavaScript 中会发生什么情况?

    我知道在 JavaScript 中定义函数有多种方法 最常见的两个是 1 function add a b return a b 2 var add function a b return a b 我对函数作为对象的想法感到满意 它可以像任
  • QueryDSL - 从时间戳列中选择带有日期的行

    使用 QueryDSL 除了使用 Between 之外 还有其他方法可以从时间戳中按日期选择行吗 像这样的查询 其中转换 日期 mytimestamp 2013 02 28 如果您使用 Querydsl SQL 则可以使用 Between
  • Xcode 不允许我创建新项目

    我正在尝试创建一个新项目 但在命名项目并选择语言后 它不会让我进入下一个窗口 我已附上屏幕截图 https i stack imgur com ZZMuj jpg https i stack imgur com ZZMuj jpg 正如您在
  • 在 azure devops 主机上安装 mongodb 进行测试运行

    我正在尝试切换到 azure devops 并且需要运行一个 mongodb 实例来进行一些集成测试 由 azure devops 提供的主机不包含 mongodb 的安装 我不知道在哪里可以使用 VS 和 mongodb 提供新的 doc
  • 使用 Jquery Ui 自动完成时如何防止 Bootstrap Tokenfield 重复

    我正在尝试实施Bootstrap Tokenfield 与 Jquery Ui 自动完成 http sliptree github io bootstrap tokenfield examples到目前为止 我能够做到这一点 除了我无法防止
  • 循环内出现意外的“await”。 (循环中无等待)

    我该如何等待bot sendMessage 循环内部 也许我需要await Promise all但我不知道我应该如何添加bot sendMessage Code const promise query exec promise then
  • 如果选中复选框,则运行“something”

    我有一个简单的 Visual Basic 2008 Express Edition 表单 如下所示 链接简单表格截图 1 我需要一些有关框架脚本的帮助 该脚本检查每个复选框是否已选中 我有一组 Word 模板 其中都包含宏 我想运行每个模板
  • 堆被视为抽象数据类型吗?

    我正在学习数据结构课程 并对什么被认为是 ADT 抽象数据类型 和什么不是 如果它不是 ADT 那么它一定是实现 感到有点困惑 具体来说 我说的是堆 我在维基百科上读到 堆是一种专门的基于树的数据结构 这是否意味着它是一个ADT 如果是这样