数据结构之队列

接口

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

namespace 队列
{
    interface IQueue<T>
    {
        int Count { get; }

        int GetLength();

        bool IsEmpty();

        void Clear();

        void EnQueue(T item);

        T DeQueue();

        T Peek();
    }
}

顺序队列

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

namespace 队列
{
    class SeqQueue<T> : IQueue<T>
    {
        private T[] date;
        private int count;//队列中元素个数

        private int rear;//等于队列中头元素索引-1
        private int front;//等于队列中尾元素索引


        public SeqQueue(int size)
        {
            this.date = new T[size];
            count = 0;
            rear = -1;
            front = -1;
            
        }

        public SeqQueue():this(10)
        {

        }

        


        public int Count
        {
            get { return count; }
        }

        public void Clear()
        {
            count = 0;
            front = rear = -1;
        }

        public T DeQueue()
        {
            if(count<=0)
            {
                Console.WriteLine("队列为空");
                return default(T);
            }

            else
            {
                T temp;
                temp = date[front + 1];
                front++;

                return temp;

            }


        }

        public void EnQueue(T item)
        {
           if(count==date.Length)
            {
                Console.WriteLine("队列已满");
            }
           else
            {
                if(rear==date.Length-1)
                {
                    date[0] = item;
                    rear = 0;
                    count++;

                }
                else
                {
                    date[rear + 1] = item;
                    rear++;
                    count++;
                }

            }


        }

        public int GetLength()
        {
            return count;
        }

        public bool IsEmpty()
        {
            return count==0;
        }

        public T Peek()
        {
            T temp;
            temp = date[front + 1];
            return temp;
        }
    }
}

链式队列

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

namespace 队列
{
    class LinkQueue<T> : IQueue<T>
    {
        private Node<T> rear;
        private Node<T> front;

        private int count;


        public LinkQueue()
        {
            rear = null;
            front = null;
            count = 0;

        }

        public int Count
        {
            get
            {
                return count;
            }
        }

        public void Clear()
        {
            rear = null;
            front = null;
            count = 0;

        }

        public T DeQueue()
        {
            if(count==0)
            {
                Console.WriteLine("队列为空");
                return default(T);
            }

            else if(count==1)
            {
                T temp = front.Date;

                count--;
                rear = null;
                front = null;
                return temp;
            }

            else
            {
                T temp = front.Date;
                front = front.Next;

                count--;

                return temp;

            }



        }

        public void EnQueue(T item)
        {
            Node<T> newNode = new Node<T>(item);

            if(count == 0)
            {
                front = newNode;
                rear = newNode;
                count++;
            }
            else if(count ==1)
            {
                front.Next = newNode;
                rear = newNode;
                count++;

            }

            else
            {
                rear.Next = newNode;
                rear = newNode;
                count++;
            }

        }

        public int GetLength()
        {
            return count;
        }

        public bool IsEmpty()
        {
            return count == 0;
        }

        public T Peek()
        {
            if(count==0)
            {
                Console.WriteLine("队列为空");
                return default(T);

            }

            else
            {
                return front.Date;

            }

            
        }
    }
}

节点

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

namespace 队列
{
    class Node<T>
    {
        private T date;
        private Node<T> next;

        public Node(T item)
        {
            this.date = item;
        }

        public T Date
        {
            get { return date; }
            set { date = value; }
        }

        public Node<T> Next
        {
            get { return next; }
            set
            {
                next = value;

            }
        }





    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值