2017-05-14 122 views
-2

我有需要我们用链表堆栈(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; 
    } 
} 

从这个代码,我应该能够得出NodeStackNodeQueue,但我无法理解的EnqueueDequeue方法的语法。当我运行一个简单的入队和出队程序时,我在出队方法的第一行得到一个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继续打印。

+0

这是功课。所以我会稍微推动你一下。如果队列是空的,那么该怎么办?当你尝试去队列时,你认为你的代码会做什么? – wave5459

+0

@sinewaver如果它是空的话,我想它会找到'value'为空,并返回一个空的异常? – Kevin

+0

在你的排队方法,你从来没有设置'tail'(或'head')任何东西。 –

回答

1

Enqueue方法不为什么你越来越例外“Dequeue`

另外在Dequeue你应该减少一个数量正确的多数民众赞成。

在你Enqueuehead未设置。

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; 
     } 
     else 
     { 
      Node newTail = new Node(); 
      newTail.setValue(o); 
      tail.setNext(newTail); 
      tail = newTail; 
     } 
     count++; 
    } 

    public object Dequeue() 
    { 
     if (null != head) 
     { 
      object value = head.getValue(); 
      head = head.getNext(); 
      count--; 
      return value; 
     } 
     return null; 
    } 

    public void Clear() 
    { 
     head = null; 
     tail = null; 
     count = 0; 
    } 

    public int Count() 
    { 
     return count; 
    } 
} 
+0

感谢您的这一点。但我有一个新问题。当我运行该程序将只出队,我反复排队的第一个 – Kevin

+0

是...这将出列第一个..因为队列是FIFO。是的,有一个更新的出队方法。我会更新我的答案。 –

+0

请检查... 你能否在这里解释一下你的问题“当我运行程序时,它只会退出第一个重复排队的队列” –