【问题标题】:Maintaining a Linked List in File在文件中维护链接列表
【发布时间】:2012-04-06 00:22:50
【问题描述】:

作为编程作业的一部分,我必须在文本文件中维护一个链表。我对链表数据结构非常方便,但对于 C++ 中的文件却不是很方便。有人可以给我一个想法或概述如何处理它。我应该能够添加或删除链表,也能够添加或删除链表中的节点,或者应该重用在一个链表上删除的空间。每个列表都有一个数字(整数),所有节点的大小相同,包含整数。

我的想法是,

1) 维护一个带有数字的文件(包含链表数字)

0 - NULL
1 - head_offset for_linked_list_num 1
0 - NULL 
1 - head_offset_for_linked_list_num 3
1 - head_offset_for_linked_list_num 3
1 - head_offset_for_linked_list_num 3

等 其中 -1 是终止符指示,位置中的 1 表示第 i 个位置有与之关联的位置

2)打开另一个文件并像这样维护链表

data next_offset
data next_offset
data NULL

通过这样做,我可以跟踪链表并有效地添加/删除/显示数组。

在 C++ 中,我需要了解和学习哪些功能。我的时间非常少,我可以将其视为基本功能级别的代码。请指教。提前致谢

【问题讨论】:

  • 您需要维护一个链接列表还是多个列表?
  • 多个列表,但我猜节点可以在它们之间互换。顺便说一句,如果满分 10 分,你会给这个作业打多少分。尽管我用 C++ 编程了 2 年多,但我觉得这有点困难。
  • 也许是一个非常愚蠢的问题,但为什么不每行只存储一个元素呢?删除一个元素,删除行。插入一个元素,插入一行。
  • 我猜这会导致碎片化。另外,我需要再次重用该列表。我需要一种存储偏移量的方法,无论如何,偏移量都不应改变,因为如果我扰乱了偏移量,那么我的整个文件都会改变。
  • 不用担心维护偏移量——当底层列表发生变化时重写整个文件非常好,特别是对于第一次实现。

标签: c++ file serialization linked-list


【解决方案1】:

1 解决方案可能是让每个列表都有自己的文件。该数字将是磁盘上的文件名。在文件内部,第一行始终是头节点。每行将是两个数据。节点数据后跟文件中下一个节点的行。这将允许您重新使用已删除的空白空间。 (下一个节点行的 -1 将是列表的末尾。例如:

1.txt:

(data) (next node lines number)
18     2
32     4
4      -1
5      3

所以这个链接列表将是 18 -> 32 -> 5 -> 4

【讨论】:

  • 我想这就是我现在要采用的设计。会让你知道。谢谢。顺便说一句,你能给我一个如何遍历特定行的例子吗???
  • 我猜这需要很多次迭代。
  • 如果你想减少迭代而不是一次性将整个文件读入内存,你可能应该考虑以二进制格式读/写文件,这样你就可以在文件。那么最后一个值将是下一个元素的查找位置而不是行号。另外,由于数据都是统一大小(整数),你知道每个需要多少字节,这只是尖叫二进制文件格式。海事组织
  • 听起来是个很酷的主意。所以我要做的是以二进制模式写入文件,所以偏移量不会改变,然后在二进制模式下,我仍然可以删除一个节点,然后再次使用空间。如果我是正确的,请告诉我。
  • 看看这篇文章(我知道我也讨厌它被分成多个页面的事实)关于在 c++ 中使用二进制文件进行随机访问:cplus.about.com/od/learning1/ss/random_4.htm 它会给你更多的知识这可能会帮助您更好地设计结构。
【解决方案2】:

关于使用什么函数的问题,您可以咨询: http://www.gnu.org/software/libc/manual/html_node/I_002fO-on-Streams.html#I_002fO-on-Streams 通读本节可能需要 15 分钟,涵盖了基础知识。

【讨论】:

    猜你喜欢
    • 2015-04-18
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多