动态数据结构的重要性是什么(如链表)

时间:2013-06-07 15:28:19

标签: c++ c memory-management dynamic linked-list

一旦创建链接列表的程序关闭而不删除动态内存并且我知道需要删除动态内存,那么如何在重新打开程序后重新启动它并且如果我无法恢复链表然后链表的用途是什么

3 个答案:

答案 0 :(得分:2)

退出程序所有内容时,它已经消失了。包括链接和未链接列表,数组,独奏对象和所有。

如果你想要坚持下去,你必须保存它,然后加载它。就像在文本编辑器中一样,您可以使用加载和保存。

有完整的库可以帮助您解决问题,您可以从boost::serialization开始。

答案 1 :(得分:1)

链接列表本身与数据持久性无关。

链接列表与其他数据结构相比具有特定的性能特征。不知道找到一个特定元素可能需要多长时间,可能需要遍历整个列表(线性时间),但插入和删除总是需要相同的固定时间(恒定时间)。

您可能希望了解STL容器,因为它们内部具有类似的数据结构:In which scenario do I use a particular STL container?

如果您希望数据持续超出应用程序的运行时间,您可以研究读/写文件,数据库,网络通信或任何持久性机制可能满足您的特定需求。

答案 2 :(得分:1)

链表的重点在于它是一个灵活的数据结构供您的代码使用 - 它没有像数组一样的固定长度,因此您可以根据需要添加和删除项目。

人们谈论动态内存分配的原因是因为它的内存分配取决于程序的运行时行为,它可能会根据它读取的数据而改变。这与静态内存分配相反,静态内存分配对于每次运行的给定代码路径大致相同,并且对于某些问题更难处理。但是,在某些嵌入式系统上,它是您唯一的选择,在某些情况下,在静态内存分配中工作也会更快(动态分配往往会产生速度损失)。

实际上整个主题非常复杂,经常让我头疼。

动态分配的内存在程序运行之间不会持续存在 - 操作系统会在程序关闭时将其全部清除 - 因此动态内存分配与数据持久性之间没有关系。你必须使用其他机制,通常存储在光盘的某个地方。在流程消失后,您无法获得内存,这是多任务处理的现代“受保护内存”模型的本质,您无法访问甚至看到属于其他进程的内存。 “其他进程”包括后续运行相同的可执行文件。