【发布时间】:2017-05-14 14:08:03
【问题描述】:
我有一个项目要求我们使用链表堆栈(NodeStack)和队列(NodeQueue)。我有这个示例代码可以使用:
class Node
{
object value;
Node next;
public void setValue(object o)
{
value = o;
}
public object getValue()
{
return value;
}
public void setNext(Node o)
{
next = o;
}
public Node getNext()
{
return next;
}
}
class NodeStack
{
Node top;
int count;
public void Push(object o)
{
Node newTop = new Node();
newTop.setValue(o);
newTop.setNext(top);
top = newTop;
count = count + 1;
}
public object Pop()
{
object value = top.getValue();
top = top.getNext();
return value;
}
public object Peek()
{
return top.getValue();
}
public void Clear()
{
top = null;
count = 0;
}
public int Count()
{
return count;
}
}
从这段代码中,我应该能够将NodeStack 派生为NodeQueue,但我无法理解Enqueue 和Dequeue 方法的语法。当我运行一个简单的入队和出队程序时,我在出队方法的第一行得到一个空引用异常。非常感谢您的帮助。
到目前为止我的代码:
class NodeQueue
{
Node tail;
Node head;
int count;
public void Enqueue(object o)
{
if (head == null)
{
Node newHead = new Node();
newHead.setValue(o);
head = tail = newHead;
newHead.setNext(tail);
}
else
{
Node newTail = new Node();
newTail.setValue(o);
newTail.setNext(tail);
tail = newTail;
}
count++;
}
public object Dequeue()
{
object value = head.getValue();
head = head.getNext();
return value;
}
public void Clear()
{
head = null;
tail = null;
count = 0;
}
public int Count()
{
return count;
}
}
编辑:
已经处理了 NullException 的问题,但现在我遇到了 dequeue 的问题。我正在使用这个程序来测试队列
NodeQueue nq = new NodeQueue();
nq.Enqueue(1);
nq.Enqueue(2);
nq.Enqueue(3);
nq.Enqueue(4);
nq.Enqueue(5);
Console.WriteLine(nq.Dequeue());
Console.WriteLine(nq.Dequeue());
Console.WriteLine(nq.Dequeue());
Console.WriteLine(nq.Dequeue());
Console.WriteLine(nq.Dequeue());
Console.ReadLine();
预期输出为 1..5。但发生的输出是 1 不断被打印出来。
【问题讨论】:
-
这是作业。所以我只是轻轻推你一下。如果队列一开始是空的怎么办?当您尝试出队时,您认为您的代码会做什么?
-
@sinewaver 如果它是空的,那么我想它会发现
value为空并返回空异常? -
在您的 enqueue 方法中,您永远不会将
tail(或head)设置为任何值。 -
另外,
Dequeue不应该减少count吗? -
@RufusL 哦,我明白了,谢谢。我明白了 sinwavever 现在想说的话。虽然有新问题
标签: c# linked-list nodes