程序终止后数据结构丢失

时间:2016-10-12 00:31:41

标签: data-structures

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

现在回到您的具体问题,不,您不会丢失数据,因为真实世界的员工目录是围绕Databases构建的,所以在程序执行完成之前,您的数据将以某种形式存储,您的数据库可以理解为persistent storage。从那里,您的存储数据将在内存中被拉入内存,并在需要处理时再次包含linkList DS。

答案 2 :(得分:1)

似乎您对条款的理解已不合适。

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

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

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

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