数据结构 - 基于链表的队列实现

线性队列

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

namespace DataStruct_Pro.Page_4
{
    class QueueNode
    {
        public int data;
        public QueueNode next;
        public QueueNode(int data)
        {
            this.data = data;
            this.next = null;
        }
    }
    class Linked_Queue
    {
        public QueueNode first;
        public QueueNode last;
        public Linked_Queue()
        {
            this.first = null;
            this.last = null;
        }
        public bool Enqueue(int value) //入队
        {
            var node = new QueueNode(value);
            if(this.last == null)
            {
                first = node;
            }
            else
            {
                last.next = node;
            }
            last = node;
            return true;
        }
        public int PopFirst()
        {
            int value = -1;
            if(first != null)
            {
                if (first == last) last = null;
                value = first.data;
                first = first.next;
                return value;
            }
            else
            {
                return -1;
            }
        }
        public void show()
        {
            var node = first;
            while(node != null)
            {
                Console.WriteLine("[{0}]", node.data);
                node = node.next;
            }
            Console.WriteLine();
        }

    }
    class Class7
    {
        public static void Main(string[] args)
        {
            Linked_Queue queue = new Linked_Queue();
            int temp;
            int value;
            Console.WriteLine("=========================================");
            Console.WriteLine("使用链表来实现队列");
            while (true)
            {
                Console.WriteLine("请选择操作:[1]在队尾加入新的元素 [2]出列一个元素 [3结束输入]");
                temp = int.Parse(Console.ReadLine());
                switch (temp)
                {
                    case 1:
                        Console.Write("请输入需要添加的元素: ");
                        value = int.Parse(Console.ReadLine());
                        queue.Enqueue(value);
                        break;
                    case 2:
                        Console.WriteLine("出列的元素是:{0}", queue.PopFirst());
                        break;
                    case 3:
                        Console.WriteLine("现在队列中存在的元素是: ");
                        queue.show();
                        break;
                }
                
            }
            
        }
    }
}

环形队列

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

namespace DataStruct_Pro.Page_4
{
    class Class8
    {
        //环形队列
        public static int front = -1, rear = -1;
        public static int val;
        public static int[] queue = new int[5];

        public static void Main(string[] args)
        {
            String strM;
            while (rear < 5 && val != -1)
            {
                Console.Write("请输入一个值存入队列,取出输入0,结束输入-1 : ");
                strM = Console.ReadLine();
                val = Convert.ToInt32(strM);
                if (val == 0)
                {
                    if(front == rear)
                    {
                        Console.Write("队列已经空了\n");
                        break;
                    }
                    front++;
                    if(front == 5)
                    {
                        front = 0;
                    }
                    Console.WriteLine("取出的队列值是[{0}]", queue[front]);
                    queue[front] = 0;
                }
                else if (val != -1 && rear < 5)
                {
                    if(rear + 1 == front || rear == 4 && front <= 0)
                    {
                        Console.Write("队列已经满了\n");
                        break;
                    }
                    rear++;
                    if(rear == 5)
                    {
                        rear = 0;
                    }
                    queue[rear] = val;
                }
            }
            Console.WriteLine("\n队列剩余数据:\n");
            if (front == rear)
            {
                Console.WriteLine("队列已经空了.");
            }
            else
            {
                while(front != rear)
                {
                    front++;
                    if(front == 5)
                    {
                        front = 0;
                    }
                    Console.Write("[{0}]", queue[front]);
                    queue[front] = 0;
                }
            }
            Console.WriteLine();
            Console.ReadLine();


        }
    }
}

猜你喜欢

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