队列以及两个队列实现一个栈
#pragma once template <class T> struct QueueNode { public : QueueNode( const T& x) :_data(x),_next(NULL) {} T _data; QueueNode* _next; }; template <class T> class queue { public : queue() :_head(NULL),_tail(NULL),_size(0) {} ~queue() { QueueNode<T>* begin = _head; while(begin) { QueueNode<T>* tmp = begin; begin = begin->_next ; delete tmp; } } T& GetTop() { T* tmp = (T *)_head; return *tmp; } int GetSize() { return _size; } bool Emptyqueue() { if(_head) return false ; else return true ; } void PushQueue(const T& x) { //空队列 //非空 if(_head == NULL) { _head = new QueueNode<T>(x); _tail = _head; } else { _tail->_next = new QueueNode<T>(x); _tail = _tail->_next ; } _size++; } void PopQueue() { //空 //一个 //两个及以上 if(_head == NULL) { cout<< "该队列为空"<<endl; } else if (_head == _tail) { delete _head; _head = NULL; _tail = NULL; _size--; } else { QueueNode<T>* tmp = _head; _head = _head->_next ; delete tmp; _size--; } } T& operator->() { return *this ; } private : QueueNode<T>* _head; QueueNode<T>* _tail; int _size; }; //两个队列实现一个栈 template <class T> class stack1 { public : void pushstack1(const T& x) { if(!_emptyqueue.Emptyqueue()) { while(!_emptyqueue.Emptyqueue()) { _noemptyqueue.PushQueue (_emptyqueue.GetTop ()); _emptyqueue.PopQueue (); } } _noemptyqueue.PushQueue (x); } void popstack1() { if(_noemptyqueue.Emptyqueue()) { cout<< "该栈为空"<<endl; } while(1) { T tmp = _noemptyqueue.GetTop (); _noemptyqueue.PopQueue (); if(!_noemptyqueue.Emptyqueue ()) { _emptyqueue.PushQueue (tmp); } else break; } } private : queue<T> _emptyqueue; queue<T> _noemptyqueue; };