2013-09-24 34 views
1

我正在尝试在Java中构建一个内部列表的数据结构,该列表由包含整数的单个链接列表组成。我遇到了数据结构的架构问题。它需要有一个可以合并,拆分和赋予内部列表大小的函数的内部类。构建单链表

假设内部列表的大小将会改变,大小和数据将被移除以合并和优化数据结构。

我有一个驱动程序类来与数据结构接口。然后我有一个数据结构类,它将具有内部类。

我在哪里添加/删除顶级列表的方法,因为单链表崩溃并扩展了我的数据?

我应该上几堂课?一个驱动程序,数据结构(内部类)...更多?

我只是需要一个强大的编码人员的一个小方向,我在顶层设计多次尝试,并且我已经阅读和搜索。我只需要一些方向。我附上了数据结构外观的图像。

请注意:

内列出了必须实现为伪报头和尾指针一个单链表,和我不能使用来自Java集合API的数据结构的内部列表。对于顶级列表,我必须使用Java Collections API中的通用LinkedList类。

+0

任何代码这么远? –

+0

不是因为我不知道从哪里开始,我是链接列表的新手。 –

回答

4

注意:这看起来像一个家庭作业,否则将不需要重新发明轮子。知道这一点,我不会提供具体的代码,只是伪代码(除了像class,int等类似的关键字),没有有用的方法,如getters或setter,没有额外的字段等。这将是你的工作,以生成所有必要的Java代码,使其工作。


我不知道从哪里开始,我是新来的链表

开始通过定义会在列表里面的元素的结构。这个怎么做?检查的要求(emphasys矿):

构建数据结构在Java中与内部列表是由的单链接列表包含整数

你需要一个数据起初可以容纳一个整数值并表现为单链表的结构。从the definition of singly linked list,该结构包含两个元素:

  1. 整数数据保持
  2. 指针到下一个类似的数据结构。

这可以这样解决:

class DataStructure { 
    int data; 
    DataStructure next; 
} 

现在,你有一个支持单向链表的结构,你需要一个新的结构,这将的单向链表和定义它的行为。这可以作为你的要求说来解决:

内部列表必须被实现为单链表与虚拟指针

移动到这个伪代码:

class SinglyLinkedList { 
    DataStructure head; 
    DataStructure tail; 
} 

就是这样。现在你有了你的SinglyLinkedList,你只需要定义行为。同样,审查要求:

它需要有功能的方法内部类可以合并分裂,并给大小内列出的

从这里,我们可以定义为SinglyLinkedList数据结构中至少有三种方法:mergesplitsize。从它适应最新的类:

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() { 
    } 
} 

EDIT(根据您的修改,并通过看图片)

有需要界定持有单链表的列表中的其他数据结构。通过要求:

对于顶级名单,我必须使用通用LinkedList类从Java集合API。

然后,你只需要使用一个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; 
} 
+0

我无法理解单链表类中的代码逻辑,以及“DataStructure head/tail;”做。此外,整数变量数据何时以及如何发挥作用? –

+0

@binary_Kramer我刚刚在作业中遵循了要求,仅此而已。当然,只看到这些方法时,很自然地问*列表的用法是什么,然后*。请注意,基本用法是迭代列表中的所有元素并打印数据(这将意味着使用'DataStructure#data')。现在,'head'用于知道列表的起始位置,而'tail'用于知道列表结束的位置。 –

+0

请再次看看这个问题我能够附上一张照片,也许这将帮助你看到我在说什么?我很抱歉,但是我仍然对设计的清晰度有困难,并且我想使用泛型,所以结构很容易在以后更新 –