2012-04-06 57 views
1

作为编程指派的一部分,我必须在文本文件中维护链接列表。我非常方便的使用链接列表数据结构,但与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表示termiator指示,1的位置指示第i个位置都有),它

2相关的位置打开另一个文件,并保持链表这样

data next_offset 
data next_offset 
data NULL 

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

在C++中做什么我需要知道和学习的功能是什么。我的时间非常少,我可以将代码视为基本的功能级别。请指教。在此先感谢

+0

你需要维护一个链表还是多个链表? – Wizetux 2012-04-06 00:36:40

+0

多个链表,但我猜节点之间可以互换。顺便说一句,你对多于10个的链接评分。尽管在C++中编程超过2几年来,我觉得它有点困难 – howtechstuffworks 2012-04-06 00:39:31

+0

也许是一个非常愚蠢的问题,但为什么你不只是每行存储一个元素?删除一个元素,删除该行插入一个元素,插入一行。 – bitmask 2012-04-06 00:39:38

回答

0

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

的1.txt:

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

所以这个链接清单将是18 - > 32 - > 5 - > 4

+0

我想这是我现在要去的设计。会让你知道。谢谢。顺便说一句,你能给我一个如何遍历一个特定的行的例子? – howtechstuffworks 2012-04-06 01:09:55

+0

我想这会需要很多迭代。 – howtechstuffworks 2012-04-06 01:11:49

+1

如果您想要减少迭代次数,而不是一次读取整个文件到内存中,则应该考虑以二进制格式读取/写入文件,以便您可以将文件看成文件中的每个位置。那么最后一个值就是下一个元素的搜索位置,而不是行号。另外,由于数据是统一大小(整数),你知道每个字节需要多少个字节,它们只是尖叫二进制文件格式。 IMO – Wizetux 2012-04-06 01:23:19