11.循环顺序队列类

namespace DSList
{
    public class CSeqQueue<T> : IQueue<T>
    {
        //Fields
        private int maxsize;
        private T[] data;
        private int front;
        private int rear;
        private int count;
        //Properties
        public T this[int index]
        {
            get 
            {
                return data[index];
            }
            set
            {
                data[index] = value;
            }
        }
        public int Maxsize
        {
            get
            {
                return maxsize;
            }
            set
            {
                maxsize = value;
            }
        }
        public int Front
        {
            get
            {
                return front;
            }
            set
            {
                front = value;
            }
        }
        public int Rear
        {
            get
            {
                return rear;
            }
            set
            {
                rear = value;
            }
        }
        public int Count
        {
            get
            {
                return count;
            }
        }
        //Constructors
        public CSeqQueue()
            : this(100)
        { }
        public CSeqQueue(int size)
        {
            maxsize = size;
            data = new T[size];
            front = 0;
            rear = 0;
            count = 0;
        }
        //Base methods
        public int GetLength()
        {
            return count;
        }
        public void Clear()
        {
            front = 0;
            rear = 0;
            count = 0;
        }
        public bool IsEmpty()
        {
            return count == 0;
        }
        public bool IsFull()
        {
            return count == maxsize;
        }
        public void In(T item)
        {
            if (IsFull())
            {
                Console.WriteLine("CSeqQueue is full!");
                return;
            }
            
            data[rear] = item;
            count++;
            rear = (rear + 1) % maxsize;
        }
        public T Out()
        {
            T tmp = default(T);
            if (IsEmpty())
            {
                Console.WriteLine("CSeqQueue is empty!");
                return tmp;
            }
            tmp = data[front];
            data[front] = default(T);
            count--;
            front = (front + 1) % maxsize;
            return tmp;
        }
        public T GetFront()
        {
            if (IsEmpty())
            {
                Console.WriteLine("CSeqQueue is empty!");
                return default(T);
            }
            return data[front];
        }
        public void Output()
        {
            for (int i = 0; i < maxsize; i++)
            {
                Console.Write(data[i]+" ");
            }
            Console.WriteLine();
        }
    }
}
posted @ 2011-03-27 01:01  山之松  阅读(225)  评论(0编辑  收藏  举报