天天看點

資料結構與算法-3.1順序隊列(C#)

隊列是一種特殊的線性表,是一種隻允許在表的一端進行插入操作而在另一端進行删除的線性表。

interface IQueue<T>
    {
        int Count { get; }
        int GetLength();
        bool IsEmpty();
        void Clear();
        void Enqueue(T iteam);
        T Dequeue();
        T Peek();  
    }



class SeqQueue<T> : IQueue<T>
    {
        private T[] data;
        private int count;
        private int front;
        private int rear;
        public SeqQueue(int size)
        {
            data = new T[size];
            count = 0;
            front = -1;
            rear = -1;
        }
        public SeqQueue():this(10)
        {
        } 
        public int Count
        {
            get { return count; }
        }
        public void Clear()
        {
            count = 0;
            front = -1;
            rear = -1;
        }
           
public T Dequeue()
    {

        if (count>0)
        {
            T teamp = data[front + 1];
            front++;
            count--;
            return teamp;
        }
        else
        {
            return default(T);
        }
    }
    public void Enqueue(T iteam)
    {
        if (count==data.Length)
        {
            Console.WriteLine("隊列已滿");
        }
        else
        {
            if (rear==data.Length-1)
            {
                data[0] = iteam;
                rear = 0;
                count++;
            }
            else
            {
                data[rear + 1] = iteam;
                rear++;
                count++;
            }
        }
    }

    public int GetLength()
    {
        return count;
    }

    public bool IsEmpty()
    {
        throw new NotImplementedException();
    }

    public T Peek()
    {
        if (count > 0)
        {
            T teamp = data[front + 1];              
            return teamp;
        }
        else
        {
            return default(T);
        }
    }
}