来源:互联网 发布:设置淘宝域名有什么用 编辑:程序博客网 时间:2024/06/06 08:56
#include <iostream>using namespace std;/*  问题是由于都是值传递,因此当塞入对象的时候内部其实复制了一份对象  因此在原对象上修改的不会在Stack中同样修改 */template<class T>class ArrayStack{private:        T* t;        int size;        int capacity;        enum{DEFAULT_SIZE = 5};public:       ArrayStack(){t = new T[DEFAULT_SIZE];size = 0;capacity = 5;}       virtual ~ArrayStack(){delete[] t;}       bool isEmpty(){return size==0?true:false;}       void push(T& a);       T pop();       void print();private:        ArrayStack(const ArrayStack& a){};        ArrayStack& operator=(const ArrayStack& a){}  };template<class T>void ArrayStack<T>::push(T& a){  if(size==capacity)  {    T* temp = new T[2*capacity];    capacity = 2*capacity;    for(int i=0;i<size;i++)    {      temp[i] = t[i];            }    delete[] t;    t = temp;                    }  t[size++] = a;     }template<class T>T ArrayStack<T>::pop(){   if(isEmpty())     throw "Empty Stack";   return t[--size];                     }template<class T>void ArrayStack<T>::print(){  for(int i=0;i<size;i++)  {    cout<<t[i]<<" ";          }     }int main(){   ArrayStack<int> s;   int i=0;   while(i++<10)     s.push(i);  s.print();  cout<<endl;  i=0;   while(i++<10)    cout<<s.pop();  cout<<endl;   cout<<s.isEmpty();   cin.get();}


#include <iostream>using namespace std;/*   这个版本和ArrayStack不同,   实际保存的是指向对象的指针,   因此Stack和原始对象只有一份副本 */template<class T>class LinkedStack{private:        struct Node //这里应该不要泛型标识         {          T* t;          Node* next;               };private:        int size;        Node* head;public:        LinkedStack(){size=0;head=0;}        void push(T& a);        T& pop();        void print();        bool isEmpty();        ~LinkedStack();private:        LinkedStack(const LinkedStack& s){}        LinkedStack& operator=(const LinkedStack&s){}      };template<class T>void LinkedStack<T>::push(T& a){   if(!head)   {     head = new Node;     head->t = &a;     head->next = 0;          }else   {     Node* p = new Node;     p->t = &a;     p->next = head;     head = p;        }   size++;      }template<class T>T& LinkedStack<T>::pop(){  if(size==0)    throw "Empty Stack";  T* p = head->t;  Node* temp = head;  head = head->next;  delete temp;  size--;  return *p;                        }template<class T>void LinkedStack<T>::print(){  Node *p = head;  while(p)  {    cout<<*(p->t)<<" ";    p = p->next;          }     }template<class T>bool LinkedStack<T>::isEmpty(){   return size==0?true:false;    }template<class T>LinkedStack<T>::~LinkedStack(){  while(head)  {     Node* p = head;     head = head->next;     delete p;            }              }int main(){   LinkedStack<int> s;   int i=0;   while(i++<10)     s.push(i);   s.print();   cout<<endl;   i=0;   while(i++<10)     cout<<s.pop();   cout<<endl;   cout<<s.isEmpty();    cin.get(); }


原创粉丝点击