我有需要我们用链表堆栈(NodeStack
)和队列(NodeQueue
)的项目。我有此示例代码一起工作:C#链表入队和出队方法的语法
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
方法的语法。当我运行一个简单的入队和出队程序时,我在出队方法的第一行得到一个Null引用异常。真的很感谢帮助。
代码我到目前为止有:
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的问题已经处理,但现在我有一个出列问题。我使用这个程序来测试队列
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继续打印。
这是功课。所以我会稍微推动你一下。如果队列是空的,那么该怎么办?当你尝试去队列时,你认为你的代码会做什么? – wave5459
@sinewaver如果它是空的话,我想它会找到'value'为空,并返回一个空的异常? – Kevin
在你的排队方法,你从来没有设置'tail'(或'head')任何东西。 –