我想在不使用Collection的情况下构建队列。我只想写一个简单的队列,如下所示:
public class Node{
public Node prev, next;
public object data;
}
public class Queue
{
public Node rear, front;
public bool IsEmpty(){
return rear==null || front==null;
}
public void Enqueue(object ele){
Node n = new Node();
n.data = ele;
if(rear==null){
rear = n;
front = n;
}else{
n.next = rear;
rear = n;
}
}
public Node Dequeue(){
if(front==null)
return null;
Node d = front;
front = front.prev;
return d;
}
}
向队列中添加元素看起来没问题。但是当我从队列中弹出一个元素时。看起来不太对劲。
发布于 2020-10-05 20:48:01
你混淆了前一个引用和下一个引用。有关更多背景信息,请查看链表(双链表和单链表)。
public class Queue
{
public Node rear, front;
public bool IsEmpty(){
return rear==null && front==null;
}
public void Enqueue(object ele){
Node n = new Node();
n.data = ele;
if(rear==null){
rear = n;
front = n;
}else{
rear.next = n;
n.prev = rear;
rear = n;
}
}
public Node Dequeue(){
if(front==null)
return null;
Node d = front;
front = front.next;
if (front == null) {
rear = null;
}
else {
front.prev = null;
}
return d;
}
}
发布于 2020-10-05 20:52:14
您所编写的是一个双向链表,但是对于一个典型的队列,您所需要的就是知道前面是什么,以及如何在后面排队(我想,这就是您对rear
的混淆的原因)。
只需一个指向next
的链接即可完成此操作,如下所示:
public class Node{
public Node next;
public object data;
}
public class Queue
{
public Node front;
public bool IsEmpty(){
return front==null;
}
public void Enqueue(object ele){
Node n = new Node();
n.data = ele;
if(front==null){
front = n;
}else{
var f = front;
while(f.next != null)
f = f.next;
f.next = n;
}
}
public Node Dequeue(){
if(front==null)
return null;
Node d = front;
front = front.next;
return d;
}
}
https://stackoverflow.com/questions/64208651
复制相似问题