0

我正在尝试创建的程序有一些问题。我需要读取一个文本文件,其中包含一个人的名字,下一行是他们的年龄,不管有多少人..例如:

Tyler
24
Greg
16
Laura
25
etc... 

然后,我需要为数据构建一个列表,该列表根据名称和年龄使用双向链表按升序进行维护。列表需要按顺序进行排序(而不是在末尾)。到目前为止,我已经完成了一个排序的双向链表的构建,并且我正在读取文件,但是当我打印出文件时,它会按升序给出所有年龄,然后按字母顺序排列所有名称。我需要年龄来坚持它属于谁。例如,上面的姓名/年龄正在打印出来:

16
24
25
Greg
Laura 
Tyler

当我需要它打印出来时:

(by age)
Greg 16
Tyler 24
Laura 25

或者

(by name)
Greg 16
Laura 25
Tyler 24

如果需要,我可以发布代码,但我并不是真的在寻找编码帮助(至少到目前为止),更多的是为了让它们保持在一起的技术。目前我正在读取文件,并将其作为字符串传递给插入函数(我很确定这是我弄错的地方,但不知道该怎么做)。

在此先感谢,永远感谢这里的帮助!

4

2 回答 2

0

我看到几个不同的解决方案可以在这里工作。如果你像这样定义一个类:

class Person {
 private:
  int name;
  int age;

  ...
};

使用一些不同的比较函数 ( isGreaterAge(), isAlphabeticalName()),可能会起作用。
如果这不必一个链接列表(这是功课吗?),您可以使用地图或(更适合您的目的)多地图,它们是专门为做这种事情而设计的:
http://www.cplusplus .com/reference/map/multimap/?kw=multimap

于 2013-10-29T04:10:43.610 回答
0

这主要取决于您设计数据结构的方式以及排序算法如何在其上执行。

数据结构:

您需要将给定节点的数据指针中的信息名称/年龄与双向链表指针分开。因此插入将有两个参数,一个是名称,另一个是列表头指针之外的年龄(如果函数是可重入的)

排序:

有不同的排序方式,我更喜欢什么?最初,当列表创建节点以基于名称的排序方式插入时(考虑到与名称排序相关的优先级而不是年龄)

因此,每当用户要求命名排序时,我们都可以直接列出所有元素。

现在,当用户要求按年龄排序时,您需要执行实际排序,但不要更改链接,只需打印它们并将它们标记为已访问或已处理任何您调用的内容并继续。

希望这对您有所帮助。沙皇

于 2013-10-29T04:12:36.347 回答