数据结构 - 链表实现双向队列

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataStruct_Pro.Tree
{
    public class QueueNode
    {
        public int data;
        public QueueNode next;
        public QueueNode(int data)
        {
            this.data = data;
            this.next = null;
        }
    }
    public class Linked_Queue
    {
        public QueueNode front;
        public QueueNode rear;
        public Linked_Queue()
        {
            front = null;
            rear = null;
        }
        public bool Enqueue(int value)
        {
            QueueNode node = new QueueNode(value);

            if (rear == null) front = node;
            else rear.next = node;
            rear = node;
            return true;
        }
        public int Dequeue(int action)
        {
            int value;
            QueueNode tempNode, startNode;
            if (!(front == null) && action == 1) //当队头不为空的时候
            {
                if (front == rear) rear = null; //如果队列只剩一个了的话
                value = front.data;
                front = front.next;
                return value;
            }
            else if (!(rear == null) && action == 2)//当队尾不为空,并且给予一个Action
            { 
                value = rear.data;  //先将需要返回的值保存到value里面去
                tempNode = front;
                while(tempNode.next != rear && tempNode.next != null)
                {
                    tempNode = tempNode.next;  //目的是将tempNode节点更新到rear节点的前一个,从而可以将rear赋值给tempNode节点
                }
                rear = tempNode;  //将尾节点更新
                if ((front.next == null) || (rear.next == null))//当只剩一个节点怎么办
                {
                    front = null;
                    rear = null;
                }
                return value;
            }
            else
                return -1;
        }

    }
    class Class4
    {
        public static void Main(string[] args)
        {
            Linked_Queue queue = new Linked_Queue();
            int temp;
            Console.WriteLine("使用链表来实现双向队列");
            Console.WriteLine("====================");
            queue.Enqueue(1);
            queue.Enqueue(2);
            queue.Enqueue(3);
            queue.Enqueue(4);
            queue.Enqueue(5);
            queue.Enqueue(6);
            temp = queue.Dequeue(1);
            Console.WriteLine("从前端取出数据: " + temp);
            temp = queue.Dequeue(2);
            Console.WriteLine("从后面取出数据: " + temp);
            temp = queue.Dequeue(1);
            Console.WriteLine("从前端取出数据: " + temp);
            temp = queue.Dequeue(2);
            Console.WriteLine("从后面取出数据: " + temp);
            Console.ReadLine();

        }
    }
}

测试效果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43635647/article/details/104176643