1

私は少し混乱しているこの学校の課題を持っています。

それが言っていることは次のとおりです。

「ハッシュに「チェーン」の手法を使用するプログラムを作成します。プログラムは、生成される各リンクリストへの参照を含む配列の長さを読み取ります。さらに、保存されるすべての値は、プログラムには、インデックスが存在する場所をハッシュするための別の関数が必要です。プログラムがリンクされたリストを生成したら、理論上の「負荷係数」を計算して出力する必要があります。配列全体を簡単に出力する必要があります。

私が混乱しているのは、生成される各リンクリストへの参照を含む配列の長さをプログラムが読み取る部分です。複数のリンクされたリストを生成することは可能ですか? その場合、どのようにしますか?

これは私が使用するように言われたクラスです:

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; 
    }

}
4

1 に答える 1

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();
 }
于 2012-04-18T17:04:39.503 に答える