不使用库实现队列的基本操作

来源:互联网 发布:捕鱼游戏源码 编辑:程序博客网 时间:2024/05/14 12:08
template<typenameT>
structNode
{public:
                Node(constT&d)
                                :_data(0)
                                , _next(NULL)
                                , _pre(NULL)
                {  }
                T* _data;
                Node<T>* _next;
                Node<T>* _pre;
};
template<typenameT>
classQueue //先进先出,
{
public:
                Queue()
                                :_tail(NULL)
                                , _head(NULL)
                                , _size(0)
                {  }
                voidPush(constT&n)
                {
                                if(_size == 0)
                                {
                                                _head = _tail = _ByeNode(n);
                                }
                                else
                                {
                                                Node<T> *temp = _ByeNode(n);
                                                _tail->_next = temp;
                                                temp->_pre = _tail;
                                                _tail = _tail->_next;
                                }
                                _size++;
                }
                voidPop()  //移除一个元素,删除队头
                {
                                if(_size == 0)
                                {
                                                return;
                                }
                                elseif(_size = 1)
                                {
                                                delete_head;
                                                _head =NULL;
                                                _tail =NULL;
                                }
                                else
                                {
                                                _head =_head->_next;
                                                delete_head->_pre;
                                }
                                _size--;
                }
                T& Front()  //返回第一个插入的元素,即队头
                {
                                return_head;
                }
                T& Back()  //返回最后被插入的元素,即队尾
                {
                                return_tail;
                }
                boolEmpty() //队列为空时,返回true
                {
                                if(_size == 0)
                                {
                                                returntrue;
                                }
                                else
                                {
                                                returnfalse;
                                }
                }
                size_tSize() //队列中元素个数
                {
                                return_size;
                }
                Node<T> * _ByeNode(constT&n)
                {
                                returnnewNode<T>(n);
                }

protected:
                Node<T>* _tail;
                Node<T>* _head;
                size_t_size;
};
0 0