链表列表

时间:2012-04-18 16:58:48

标签: java list hash linked-list

我有这个学校作业,我有点困惑。

这就是它的意思:

  

“编写一个使用'链接'技术进行散列的程序。   程序将读取一个数组的长度,该数组将包含对每个数组的引用   将生成的链接列表。此外,读取要存储的所有值。   程序应具有单独的函数,用于存在索引的散列。当程序生成链接列表时,将计算并打印出理论“加载因子”。整个阵列应该很容易打印出来。“

我很困惑的是,关于程序的部分将读取数组的长度,该数组将包含将生成的每个链接列表的引用。是否可以生成多个链表?在那种情况下,你是怎么做到的?

这是我被告知使用的课程:

public class EnkelLenke { 

    private Node head = null; 
    private int numOfElements = 0; 


    public int getNum() 
    { 
        return numOfElements; 
    } 

    public Node getHead() 
    { 
        return head; 
    } 

    public void insertInFront(double value) 
    { 
        head = new Node (value, head); 

        ++numOfElements; 
    } 

    public void insertInBack(double value) 
    { 
        if (head != null) 
        { 
            Node this = head; 

            while (this.next != null) 
                this = this.next; 
                this.next = new Node(value, null); 
        } 

        else 
            head = new Node(value, null); 
            ++numOfElements; 
    } 

    public Node remove(Node n) 
    { 
        Node last = null; 
        Node this = head; 

        while (this != null && this != n) 
        { 
            last = this; 
            this = this.next; 
        } 

        if (this != null) 
        { 
            if (last != null) 
                last.next = this.next; 
            else 
                head = this.next; 
                this.next = null; 
                --numOfElements; 
                return this; 
        } 

        else 
            return null; 
    } 

    public Node findNr(int nr) 
    { 
        Node this = head; 

        if (nr < numOfElements) 
        { 
            for (int i = 0; i < nr; i++) 
                this = this.next; 

            return this; 

        } 

        else 
            return null; 
    } 

    public void deleteAll() 
    { 
        head = null; 
        numOfElements = 0; 
    } 

    public String printAllElements() {
        String streng = new String();

        Node this = head;
        int i = 1;

        while(this != null)
        {
            streng = streng + this.element + " ";
            this = this.findNext(); 

            i++;
            if(i > 5)
            {
                i = 1;
                streng = streng + "\n";


            }

        }

        return streng;
    } 

    public double getValueWithGivenNode (Node n) 
    {

        Node this = head; 

        while (this != null && this != n) 
        { 
            this = this.next; 
        } 

        if (this == n) 
            return this.element;
        else 
            return (Double) null; 

    } 
}

public class Node { 

    double element; 
    Node next; 

    public Node(double e, Node n) 
    { 
        element = e; 
        next = n; 

    } 

    public double findElement() 
    { 
        return element; 
    } 

    public Node findNext() 
    { 
        return next; 
    }

}

1 个答案:

答案 0 :(得分:4)

您的数据结构将如下所示(其中“LL”是链接列表):

i    |  a[i]
-------------------------------
0    |  LL[obj1 -> obj5 -> obj3]
1    |  LL[obj2]
2    |  LL[]
...  |  ...
N-1  |  LL[obj4 -> obj6]

在每个数组索引处,您都有一个链接的对象列表,这些对象会散列到该索引。

  

是否可以生成多个链表?在那种情况下,你是怎么做到的?

是。创建数组,并将每个元素初始化为新的链表。

 EnkelLenke[] a = new EnkelLenke[N];
 for ( int i = 0; i < N; i++ ) {
     a[i] = new EnkelLenke();
 }