(一)模板实现栈

#pragma oncetypedef unsigned int size_t;template 
class Stack{public: Stack()  :_array(NULL)  ,_top(-1)  ,_capacity(0) {} ~Stack() {  if(_array)  {   delete[] _array;  } }public: void Push(const T& num) {  _CheckCapacity();  _array[++_top] = num; } void Pop() {  if(Empty())  {   printf("Empty!");  }  else  {   _top--;  } } T& GetTop() {  return _array[_top]; } void PrintStack() {  cout<
<=(int)_top; i++)   {    tmp[i] = _array[i];   }   _array = tmp;  } }private: T* _array; int _top;                 //下标 size_t _capacity;};

2.模板实现队列

#pragma oncetemplate 
struct Node{ T _data; Node
* _next; Node(const T& d)  :_data(d)  ,_next(NULL); {}};template 
class Queue{public: Queue()  :_head(NULL)  ,_tail(NULL)  ,_size(0) {} ~Queue {  if(_head)   delete _head;  if(_tail)   delete _tail; }public: void Push(const T& d) {  if(_head == NULL)  {   _head = _tail = new Node
(d);  }  else  {   _tail->_next = new Node
(d);   _tail = _tail->_next;  }  _size++; } void Pop() {  if(_head == NULL)  {   cout<<"Empty!"<
* tmp = _head;   _head = _head->_next;   delete tmp;  }  _size--; } bool Empty() {  return _head == NULL; } size_t Size() {  return _size; } T& Front() {  assert(_head);  return _head->_data; } T& Back() {  assert(_tail);  return _tail->_data; }private: Node
* _head; Node
* _tail; size_t _size;};