循环队列

来源:互联网 发布:软件研发公司 编辑:程序博客网 时间:2024/06/07 13:20

实现循环队列类,剩余一地址空间区分队列的空与满


  •  暂时支持基本数据类型:int,char,float,double等。可以支持类么?,操作符new可以用来构建类数组么?
  •  模板参数实现方式:   template <typename T, unsigned N>

    template  <typename T>    class CirQueue    {    private:        T* a;        int N;        int F;//队列头        int R;//队列尾    public:        CirQueue(int len);        bool IsEmpty();        bool IsFull();        bool InQueue(T val);        bool OutQueue(T& val);    }


    CirQueue::CirQueue(int len):        a(NULL),        N(len),        F(0),        R(0){        a = new T[len];//???    }


队列空 :头尾指向相同

    bool CirQueue::IsEmpty()    {        if (F == R)        {            return true;        }else        {            return false;        }    }


队列满:头指向落后尾一个单位

    bool CirQueue::IsFull()    {        if ( (F+1)%N == R)        {            return true;        }else        {            return false;         }    }


入队

    bool CirQueue::InQueue(T val)    {        if( (F + 1)%N == R)        {            return false;        }else        {            a[F] = val;            F = (F + 1)%N;            return true;        }    }


出队

    bool CirQueue::OutQueue(T & val)    {        if (F == R)        {            return false;        }else        {            val = a[R];            R = (R + 1)%N;            return true;        }    }


0 0