这是一个令人困惑的问题所以我道歉,因为我不太确定如何用它来表达。基本上我正在做的是使用排序二进制搜索树。在整个程序中,用户向树添加记录,该树是包含(int studentNumber, String firstName, String lastName, String major, double gpa)
的节点。在程序结束时,节点被转换为带有我自定义Node
类的LinkedList,然后该列表被序列化为文件。
现在,在启动时,我想基本上将该文件读回另一个列表,显示列表,然后将其添加回BST,以便以各种方式对其进行排序。我的问题在于读取文件中的每一行(节点)并将字段(int studentNumber, String firstName, String lastName, String major, double gpa)
从每个节点"拉回到树中。这是我在阅读部分到目前为止所做的:
public void loadRecord(LinkedList list) {
File file = new File("records.txt");
try
{
LinkedList<Node> list2;
ObjectInputStream input = new ObjectInputStream(new FileInputStream(file));
list2 = (LinkedList<Node>)input.readObject();
if (list2.size() > 0){
list.addAll(list2);
}//end if
else {
System.out.println("No elements");
}
}
//Catch Exceptions
//display list
}//end loadRecord
再次......如果这根本没有意义,我道歉。我很有可能走向完全错误的方向,所以我很感激任何反馈。请让我知道你的想法!
答案 0 :(得分:0)
首先,a 链表和二叉搜索树是两个不同的数据结构。你不能与他人合作。 假设您有一个要存储的数字列表。数据以相同的顺序添加到两个结构中。链表如下所示:
|5|-->|3|-->|7|-->|2|-->|6|-->|4|-->|8|-->|1|
二叉搜索树:
5
/ \
/ \
3 7
/ \ / \
2 4 6 8
/
1
因此,无论输入什么数据,在一个值可以大于或小于另一个值的意义上,它必须是“可比较的”。因此,如果您存储的数据是学生,那么一个学生的价值必须高于另一个学生(更高的gpa,更大的学生数,最后按字母顺序排列等等)。
与链表不同,标准API不提供二进制搜索树类。所以你已经实现了自己的。您需要熟悉递归以实现BST。确保您决定如何比较学生并相应地实施树。这是一个可以提供帮助的链接:Binary Search Tree and Tree Traversal 。
接下来,您需要从记录文件中提取学生信息并将其存储在树中。如果您说明了如何在record.txt
文件中订购学生信息,这将有所帮助。现在,我将假设它被订购,以便每个学生的数据写在一行。我将在自定义节点(应该称为student)类中实现一个方法,该类接受一行,解析它,并将数据存储在学生的字段中。
然后我会创建一个创建新学生的while循环,将当前行添加到student对象的相应方法中,并且只要输入流中有下一行,就将student对象添加到树中。
正如我所说,我需要更多关于记录文件的信息才能进一步解释。如果您需要进一步澄清,请告诉我。