自己写的C++ queue类

来源:互联网 发布:索尼 游戏机 知乎 编辑:程序博客网 时间:2024/06/07 22:00
template<class T>classIQueue{public:virtualvoidClear()=0;virtualBOOLIsEmpty()=0;virtualintGetCount()=0;virtualintEnQueue(const T&)=0;virtualintDeQueue(T&)=0;};template<class T>classCQueueArray:public IQueue<T>{public:CQueueArray(int iMax){m_pData = new T[iMax];memset(m_pData,0,sizeof(T)*iMax);m_iMax = iMax ;rear = front = 0 ;}~CQueueArray(){if ( m_pData != NULL ){delete[] m_pData ;m_pData = NULL ;}}public:voidClear(){rear = front = 0 ;}BOOLIsFull(){return (rear+1) % m_iMax == front ;}virtualBOOLIsEmpty(){return rear == front ;}virtualintGetCount(){return ( rear - front +m_iMax ) % m_iMax ;}virtualintEnQueue(const T& t){if ( IsFull() ){return FALSE ;}else{m_pData[rear] = t ;rear = ( rear + 1 ) % m_iMax ;return TRUE ;}}virtualintDeQueue(T& t){if ( IsEmpty() ){return FALSE ;}else{t = m_pData[front];front = ( front + 1 ) % m_iMax ;return TRUE ;}}private:T*m_pData;intm_iMax;intfront;intrear;};template<class T>structNode{Node(){next = NULL ;prev = NULL ;}Tdata;Node*next;Node*prev;};template<class T>classCQueueLink:public IQueue<T>{public:CQueueLink(){front = rear = NULL ;m_iCount = 0 ;}~CQueueLink(){}public:voidClear(){Node<T>* node;while (front){node = front->next ;delete front;front = node ;}}BOOLIsFull(){return FALSE;}virtualBOOLIsEmpty(){returnm_iCount == 0  ;}virtualintGetCount(){return m_iCount ;}virtualintEnQueue(const T& t){if ( IsFull() ){return FALSE ;}else{Node<T>*node = new Node<T>();node->data = t ;node->next = NULL;node->prev = rear ;if ( front == NULL ){front = node ;//front->next = front->prev;}if ( rear != NULL ){rear->next = node ;}rear = node ;m_iCount ++ ;return TRUE ;}}virtualintDeQueue(T& t){if ( IsEmpty() ){return FALSE ;}else{Node<T>*node = NULL ;t = front->data ;node = front->next;delete front;front = node;node->prev = NULL ;m_iCount -- ;return TRUE ;}}private:Node<T>*front;Node<T>*rear;intm_iCount;};

原创粉丝点击