gpt4 book ai didi

java - 队列作为链表实现

转载 作者:行者123 更新时间:2023-12-01 15:14:37 25 4
gpt4 key购买 nike

这是我在数据结构中的分配程序,用于实现 QueueAsArray。我希望有人指导我解决这个问题,因为我在 Java 编程方面没有很强的背景。

我希望有人指导我如何在我的主程序中编译和使用此代码。

public class QueueAsLinkedList extends AbstractContainer implements Queue
{
protected LinkedList list;

public QueueAsLinkedList ()
{ list = new LinkedList (); }

public void purge ()
{
list.purge ();
count = 0;
}

public Object getHead ()
{
if (count == 0)
throw new ContainerEmptyException ();
return list.getFirst ();
}

public void enqueue (Object object)
{
list.append (object);
++count;
}

public Object dequeue ()
{
if (count == 0)
throw new ContainerEmptyException ();
Object result = list.getFirst ();
list.extract (result);
--count;
return result;
}

public Enumeration getEnumeration()
{
return new Enumeration()
{
protected LinkedList.Element position = list.getHead();

public boolean hasMoreElements()
{
return position != null;
}

public Object nextElement()
{
if (position == null)
throw new NoSuchElementException();
Object result = position.getDatum();
position = position.getNext();
return result;
}
};
}

protected int compareTo (Comparable object)
{
AbstractContainer arg = (AbstractContainer) object;

long diff = (long) getCount() - (long) arg.getCount();
if (diff < 0)
return -1;
else if (diff > 0)
return +1;
else
return 0;
}

public boolean equals(Object object) {
LinkedList list_object = (LinkedList)object;
if(list_object.length != this.length) {
return false;
}
Element ptr = this.head;
Element list_object_ptr = list_object.head;
for(int i = 0; i < this.length; i++) {
if(list_object_ptr.getDatum () != ptr.getDatum ()) {
return false;
}
ptr = ptr.getNext ();
list_object_ptr = list_object_ptr.getNext ();
}
return true;
}
}

最佳答案

我对您的建议是阅读现有的 LinkedList 库源代码,您可以轻松找到这些内容。我建议您还阅读 ArrayList 的源代码,因为您将包装一个数组。最后看一下ArrayBlockingQueue,因为这是一个包装数组的队列。最后一个类最接近您想要的,但也是最复杂的,因为它是并发且线程安全的。

当你开始编写一个类时,我建议你从一些非常简单的东西开始,然后对其进行编译。使用 IDE,它会在您键入代码时显示代码是否可以编译并建议更正。

然后我会编写一个非常简单的单元测试来测试您非常简单的代码。您只需使用一种方法即可做到这一点。 (有些人建议先编写测试用例,但我发现这非常困难,除非您之前编写过此类类,在这种情况下,您并不是真正先编写单元测试,而只是第一次编写该代码库)

然后添加第二个或第三个方法并对其进行测试。

当它执行您不理解的操作时,请使用调试器单步执行代码以查看每一行的作用。

<小时/>

我会使用 Netbeans、Eclipse 或 IntelliJ CE 等 IDE。我更喜欢 IntelliJ,但 Netbeans 可能最适合初学者。

  • 下载 IDE。
  • 开始一个新项目。
  • 创建一个类并将代码复制并粘贴到该类中。
  • 创建另一个使用该类的类。这是你的课。

顺便说一句,这个类是你写的还是因为它有很多不寻常的编码选择而给你的。

<小时/>

代码注释

  • 它是一个队列,它包装了一个实现队列的类,因此委托(delegate)看起来很自然,但它似乎并没有这样做,这表明 LinkedListQueue 不是标准的 LinkedList 和 Queue 令人困惑。
  • 它使用未定义的字段 count 来代替 LinkedList.size()。
  • 出队访问 LinkedList 两次,一次会更有效(就像标准库那样)
  • 当 Iterator 自 Java 1.2 (1998) 起成为标准时,它支持 Enumeration 而不是 Iterator
  • 当 equals 为 false 时,compareTo 为 0,这是一个错误。
  • 它不支持内置泛型。
  • compareTo 仅检查长度,因此具有“A”的队列和具有“Z”的队列compareTo == 0
  • equals 使用的 this.headthis.length 不是字段。

关于java - 队列作为链表实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11807146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com