隊列提供瞭如下操做:
ios
q.empty() //若是隊列爲空返回true,不然返回false q.size() //返回隊列中元素的個數 q.pop() //刪除隊列首元素的值,但不返回其值 q.front() //返回隊列首元素的值,但不刪除其值 q.push() //在隊尾壓入新元素 q.back() //返回隊尾元素的值,但不刪除其值
模擬實現:ide
/*Queue.cpp*/ #include <iostream> using namespace std; template<class T> struct Node { Node(const T& d) :_data(d) ,_next(NULL) {} T _data; struct Node* _next; }; template<class T> class LinkList { public: LinkList() :_head(NULL) ,_tail(NULL) {} ~LinkList() { if(_head == NULL) { cout<<"List is empty!!"<<endl; return; } Node<T>* cur = _head; while(cur != NULL) { Node<T>* del = cur; cur = cur->_next; delete del; del = NULL; } delete cur; _head = NULL; _tail = NULL; } public: void Display() { Node<T>* cur = _head; while(cur) { cout<<cur->_data<<"-->"; cur = cur->_next; } cout<<"Nvl."<<endl; } void PushBack(const T& d) { Node<T>* NewNode = new Node<T>(d); if(_head == NULL) { _head = NewNode; _tail = _head; } else { _tail->_next = NewNode; _tail = NewNode; } } void PopFront() { if(_head == NULL) { cout<<"Queue is empty!!"<<endl; return; } Node<T>* del =_head; _head = _head->_next; delete del; del = NULL; } int GetListLength() { Node<T>* cur = _head; int count = 0; while(cur) { count++; cur = cur->_next; } return count; } T& GetHeadValue() { if(_head == NULL) { cout<<"Queue is empty!!"<<endl; exit(1); } return _head->_data; } T& GetTailValue() { if(_head == NULL) { cout<<"Queue is empty!!"<<endl; exit(1); } return _tail->_data; } bool JudgeIsEmpty() { if(_head == NULL) { return true; } return false; } private: Node<T>* _head; Node<T>* _tail; }; template<class T, class Container> class Queue { public: void Show() { _con.Display(); } void Push(const T& q) { _con.PushBack(q); } void Pop() { _con.PopFront(); } int Size() { return _con.GetListLength(); } const T& Front() { return _con.GetHeadValue(); } const T& Back() { return _con.GetTailValue(); } bool Empty() { return _con.JudgeIsEmpty(); } private: Container _con; }; int main() { Queue<int,LinkList<int> > q1; q1.Push(1); q1.Push(2); q1.Push(3); q1.Push(4); q1.Push(5); q1.Show(); q1.Pop(); q1.Show(); int size = q1.Size(); cout<<"size = "<<size<<endl; int retTail = q1.Back(); cout<<"retTail = "<<retTail<<endl; int retHead = q1.Front(); cout<<"retHead = "<<retHead<<endl; bool result = q1.Empty(); cout<<"result = "<<result<<endl; system("pause"); return 0; }
結果:spa