区分数据类型和数据结构

2023-12-30

好吧,不知何故,即使在阅读了很多教科书(真的很多)和在互联网上阅读了很长一段时间后,我仍然无法完全理解所提到的两个事物之间的区别是什么。

为了简化问题,根据维基百科,数据类型是:

识别各种类型数据之一的分类,例如实数、整数或布尔值,确定该类型的可能值;可以对该类型的值执行的操作;数据的含义;以及该类型的值的存储方式。

它主要是一些抽象数据类型的实现比如实数或整数。

一切都好,接下来是数据结构:

是在计算机中组织数据以便有效使用数据的一种特殊方式。[1][2]数据结构可以实现一种或多种特定的抽象数据类型,这是指定操作契约及其复杂性的手段。相比下,数据结构是ADT提供的合约的具体实现.

因此,数据结构是 ADT 的实现,例如堆栈或队列。

但这不也使它成为一种数据类型吗?

我真正能看到的是,数据类型的范围可以从没有任何结构组织的非常简单的事物到复杂的数据结构,真正重要的是它们是 ADT 的实现,反映了 ADT 的重要方面,并且可以设想它们作为单个实体(如列表或树),但数据结构必须至少包含某种逻辑或数学组织才能分类为数据结构,但遗憾的是,这种差异将使许多实体同时成为数据结构和数据类型。

那么简单普通(数据类型)和(数据结构)之间的本质区别是什么?

我很乐意接受一个答案,指定一本关于这个主题的具体书籍,该书足够深入地解释所有这些问题,如果有人可以推荐我一些关于 C 数据结构的好书。


In C, a 数据类型是一个语言级别的构造。预定义类型的数量有限(int, char, double等),并且数量几乎无限派生类型(数组类型、结构类型、联合类型、函数类型、指针类型、原子类型(后者是 C11 中的新增内容))。

任何类型都可以通过一个简单的名称typedef宣言。对于函数类型或不完整类型以外的任何类型,您可以objects属于那种类型;每个对象占用一个连续的内存区域。

C中可以存在的类型在C标准的6.2.5节中有完整的描述;例如,参见N1570草案 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf.

A 数据结构另一方面,是由您自己的代码定义的构造。该语言没有定义 a 的概念链表, or a 二叉树, or a 哈希表,但是您可以实现这样的数据结构,通常是通过在派生数据类型之上构建它。通常没有这样的东西object这是一个链接列表。链表数据结构的实例由相关对象的集合组成,只有代码的逻辑才能将该集合转换为连贯的实体。但是您的程序通常会使用某种数据类型的对象refer链表数据结构,可能是一个结构体或指向结构体的指针。

您通常会拥有一组对数据结构实例进行操作的函数。这些函数是否是数据结构的一部分是一个困难的问题,我不会在这里尝试回答。

例如,数组既可以被视为一种数据类型,也可以被视为一种数据结构;更准确地说,您可以将其视为使用现有数组类型实现的数据结构。

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

区分数据类型和数据结构 的相关文章

  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include
  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • 处理右值时的 insert 与 emplace

    std string myString std unordered set
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • 在 C 中使用枚举而不是 #defines 作为编译时常量是否合理?

    在 C 工作了一段时间后 我将回到 C 开发领域 我已经意识到 在不必要的时候应该避免使用宏 以便让编译器在编译时为您做更多的工作 因此 对于常量值 在 C 中我将使用静态 const 变量或 C 11 枚举类来实现良好的作用域 在 C 中
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh

随机推荐