首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不使用集合的情况下构建队列

在不使用集合的情况下构建队列
EN

Stack Overflow用户
提问于 2020-10-05 20:30:29
回答 2查看 74关注 0票数 0

我想在不使用Collection的情况下构建队列。我只想写一个简单的队列,如下所示:

代码语言:javascript
运行
复制
    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;
        }
    }

向队列中添加元素看起来没问题。但是当我从队列中弹出一个元素时。看起来不太对劲。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-05 20:48:01

你混淆了前一个引用和下一个引用。有关更多背景信息,请查看链表(双链表和单链表)。

代码语言:javascript
运行
复制
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;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2020-10-05 20:52:14

您所编写的是一个双向链表,但是对于一个典型的队列,您所需要的就是知道前面是什么,以及如何在后面排队(我想,这就是您对rear的混淆的原因)。

只需一个指向next的链接即可完成此操作,如下所示:

代码语言:javascript
运行
复制
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://dotnetfiddle.net/fhKTug

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64208651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档