(一)模板实现栈

#pragmaoncetypedefunsignedintsize_t;template<classT>classStack{public:Stack():_array(NULL),_top(-1),_capacity(0){}~Stack(){if(_array){delete[]_array;}}public:voidPush(constT&num){_CheckCapacity();_array[++_top]=num;}voidPop(){if(Empty()){printf("Empty!");}else{_top--;}}T&GetTop(){return_array[_top];}voidPrintStack(){cout<<array[_top];}size_tSize(){return_top+1;}boolEmpty(){return_top==-1;}private:void_CheckCapacity(){if(_array==NULL){_capacity=3;_array=newT[_capacity];return;}if(_capacity=_top+1){_capacity*=2;T*tmp=newT[_capacity];for(size_ti=0;i<=(int)_top;i++){tmp[i]=_array[i];}_array=tmp;}}private:T*_array;int_top;//下标size_t_capacity;};

2.模板实现队列

#pragmaoncetemplate<classT>structNode{T_data;Node<T>*_next;Node(constT&d):_data(d),_next(NULL);{}};template<classT>classQueue{public:Queue():_head(NULL),_tail(NULL),_size(0){}~Queue{if(_head)delete_head;if(_tail)delete_tail;}public:voidPush(constT&d){if(_head==NULL){_head=_tail=newNode<T>(d);}else{_tail->_next=newNode<T>(d);_tail=_tail->_next;}_size++;}voidPop(){if(_head==NULL){cout<<"Empty!"<<endl;return;}elseif(_head==_tail){delete_head;_head=_tail=NULL;}else{Node<T>*tmp=_head;_head=_head->_next;deletetmp;}_size--;}boolEmpty(){return_head==NULL;}size_tSize(){return_size;}T&Front(){assert(_head);return_head->_data;}T&Back(){assert(_tail);return_tail->_data;}private:Node<T>*_head;Node<T>*_tail;size_t_size;};