我正在尝试使用内部列表在Java中构建一个数据结构,该列表由包含整数的单个链接列表组成。我的数据结构体系结构遇到了问题。它需要一个内部类,其函数可以合并,拆分,并给出内部列表的大小。
假设内部列表的大小将发生变化,并且将删除大小和数据以合并和优化数据结构。
我有一个与数据结构接口的驱动程序类。然后我有一个Data结构类,它将具有内部类。
我在哪里添加/删除顶级列表的方法,因为单链表崩溃并扩展我的数据?
我应该有多少课?一个驱动程序,数据结构(内部类)...更多?
我只需要一个强大程序员的指导,我在自上而下的设计中多次尝试,我已经阅读并搜索过。我只需要一些方向。我附上了数据结构的外观和图像。
请注意:
内部列表必须实现为带有伪标头和尾部指针的单链表,并且我不得将Java Collections API中的任何数据结构用于内部列表。对于顶级列表,我必须使用Java Collections API中的通用LinkedList类。
答案 0 :(得分:4)
注意:这看起来像是一个家庭作业,否则就没有必要重新发明轮子了。知道这一点,我不会提供特定的代码,只是伪代码(除了class
,int
等类似的一些关键字),没有有用的方法,如getter或setter,没有其他字段等。它将成为您的工作,生成所有必要的Java代码,使其发挥作用。
我不知道从哪里开始,我是链接列表的新手
首先定义将进入列表内的元素的结构。这该怎么做?审查要求(强调我的):
在Java中构建数据结构,内部列表由单个链接列表组成,包含整数
您需要一种数据结构,该数据结构最初可以包含整数值,并且表现为单链表。从the definition of singly linked list开始,结构包含两个元素:
这可以这样解决:
class DataStructure {
int data;
DataStructure next;
}
既然您拥有支持单链表的结构,那么您需要一个新结构 单链表并定义它的行为。这可以按照您的要求说明:
内部列表必须实现为带有虚拟标题和尾部指针的单链表
将其转换为伪代码:
class SinglyLinkedList {
DataStructure head;
DataStructure tail;
}
就是这样。现在您已拥有SinglyLinkedList
,您只需要定义行为即可。再次,审查要求:
它需要有一个带有fstrongu̶n̶c̶t̶i̶o̶n̶s̶方法的内部类,可以合并,拆分,给出内部列表的大小。< / p>
从这里开始,我们可以为SinglyLinkedList
数据结构定义至少三种方法:merge
,split
和size
。改编最新的课程:
class SinglyLinkedList {
DataStructure head;
DataStructure tail;
//added this method just to know you need to add data to your singly linked list
public void add(int data) {
}
//you merge a list with another list
public void merge(SinglyLinkedList singlyLinkedList) {
}
//you split the list into two or more lists
public SinglyLinkedList[] split() {
}
//the size of the list is a numeric positive value
public int size() {
}
}
编辑(根据您的编辑和查看图片)
需要定义另一个包含单链表列表的数据结构。按要求:
对于顶级列表,我必须使用Java Collections API中的通用LinkedList类。
然后,您只需要一个使用LinkedList
的新结构,其中包含您的单链表:
class SinglyLinkedListHolder {
LinkedList<SinglyLinkedList> holder;
public SinglyLinkedListHolder () {
holder <- new LinkedList<SinglyLinkedList>();
}
//this holder should at least add new singlyLinkedList in the bigger list
public void add(SinglyLinkedList singlyLinkedList) {
}
}
注意:我注意到您尝试使用泛型定义结构:
private static class Node<T> {
}
我高度建议您不要这样做,直到您真正掌握有关单链表如何工作的主要概念。这可能需要一些时间,但最好一步一步走。在使这个结构起作用之后,您可以轻松(实际上,取决于您的实现)将结构替换为:
class DataStructure<T> {
T data;
DataStructure next;
}