我有这个学校作业,我有点困惑。
它是这样说的:
"编写一个使用'链接'技术进行哈希处理的程序。 程序将读取一个数组的长度,该数组将包含对每个数组的引用 将生成的链表。此外,将读取要存储的所有值。 该程序应具有单独的功能,用于在索引存在的地方进行哈希处理。当程序生成链表时,将计算并打印出理论上的"负载系数"。整个阵列应该很容易打印出来。
我感到困惑的是,关于程序的部分将以数组的长度读取,该数组将包含对将生成的每个链表的引用。是否可以生成多个链表?在这种情况下,你怎么做?
这是我被告知使用的类:
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;
}
}
您的数据结构将如下所示(其中"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();
}