【问题标题】:Loss of data structure upon program termination程序终止时数据结构丢失
【发布时间】:2018-11-06 15:29:47
【问题描述】:

数据结构首先用于存储信息。在介绍性 CS 课程中,一个流行的应用程序是人员数据库 - 员工、学生或俱乐部成员。在链表实现中,每个节点都会包含'name'、'id'、'age'等,并且会有一个函数'insert'在程序运行时提示用户一一输入每个人的信息.

这样的数据结构通常是在堆上动态分配的,所以当程序终止时,所有的数据都会丢失。那么员工目录真的是链表数据结构的真实应用吗?如果是这样,我们如何处理程序退出时数据丢失的事实?

【问题讨论】:

  • 程序执行过程中使用的临时结构使用some.method进行序列化。结构序列化的确切方式取决于许多因素,因此很难说给定结构在保存到磁盘时的“外观”。

标签: data-structures


【解决方案1】:

这很简单。在典型的n-tier architecture 中,数据存储在单独的永久存储区域中。数据通常仅在处理数据时作为对象保存在 RAM 中 - 否则将被卸载到数据存储中。通常这是一个关系数据库管理系统 (RDBMS),例如 Oracle 或 SQL Server,但它也可以是电子表格、文本文件或任何可以代表已保存数据的东西。如果数据存储在文本文件中,则可以使用定界语言或系统来提供结构 - 例如逗号分隔值 (CSV) 文件和 XML。在过去,数据以穿孔卡片或穿孔纸带 (PPT) 的形式存储。

将内存中的数据保存为更易于保存的形式的过程有时称为序列化。反序列化是相反的过程 - 将转换后的数据转换回内存中的原始(或原始等效)数据,例如链表、元组、位图图像、堆栈、数组等。

【讨论】:

    【解决方案2】:

    通过链表或任何其他动态分配的数据结构教授员工目录设计的目的是让您了解如何从不同的角度设计现实世界的应用程序。当您使用动态分配的内存时,它确实会在执行完成后丢失数据,但主题的重点不是执行后发生的事情,而是执行期间发生的事情。正如您将在整个学期中了解到的那样,在执行过程中会出现现实世界的挑战,例如与性能相关的问题、错误的数据结构选择缺陷、内存限制等,为了克服这些问题,您需要善于理解不同的 DS 如何与内存一起工作。为什么我们在数组或链接列表上使用哈希图,反之亦然。

    现在回到您的具体问题,不,您不会丢失您的数据,因为真实世界的员工目录是围绕Databases 构建的,因此在您的程序执行完成之前,您的数据将以您的数据库理解的某种形式存储@ 987654322@。从那里您存储的数据将在需要处理时从内存中拉出,其中可能会再次包括链接列表 DS。

    【讨论】:

      【解决方案3】:

      看来你对术语的理解已经不合适了。

      在 CS / IT 中,数据库 是为数据提供持久性 的组件。这就是数据库的全部意义 - 它确保您的数据在某些进程结束或某些计算机关闭时不会丢失。

      问题是:当您开始编程和学习数据类型数据结构时,当然,链表就是其中之一你听到的第一件事。然后你通过构建一个允许用户输入数据的应用程序来应用这些知识;然后用它做一些事情(比如打印、搜索、创建统计数据)。但是出于目的,当您的第一个程序结束时,所有这些都消失了。

      原因很简单:持久性为您在程序中执行的任何事情增加了很多复杂性。因此,出于简单的教育目的,您可以从“仅记忆”应用程序开始。

      然后,当你掌握了它;然后你更进一步,处理诸如“好的,现在有什么方法可以避免在重新启动我的程序时一次又一次地输入数据?”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-24
        • 2021-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多