首页 > 代码库 > 顺序栈

顺序栈

 1 #include <iostream> 2 #include <assert.h> 3  4 using namespace std; 5  6 template<class T> 7 class STACK 8 { 9 public:10     STACK(int sz = 100):top(-1), maxLen(sz)11     {12         date = new T[sz];13         assert(date != NULL);14     }15     ~STACK(){delete []date;}16     void Push(const T& a);17     bool Pop(T& x);18     bool Top(T& x);19     bool Empty() const{return top == -1;}20     bool Full(){return top == maxLen-1;}21     int Size(){return top+1;}22     void Clear(){top = -1;}23     friend ostream& operator << (ostream& os, const STACK<T>& s)24     {25         for(int i = 0; i <= s.top; i++)26             os<<s.date[i]<<" ";27         return os;28     }29 private:30     T *date;31     int top;32     int maxLen;33     void overflow();34 };35 36 template<class T>37 bool STACK<T>::Top(T& x)38 {39     if(Empty())return false;40     x = date[top];41     return true;42 }43 44 template<class T>45 void STACK<T>::overflow()46 {47     T* newdate = new T[maxLen<<1];48     if(newdate == NULL)return;49     for(int i = 0; i <= top; i++)50         newdate[i] = date[i];51     maxLen <<= 1;52     delete []date;53     date = newdate;54 }55 56 template<class T>57 void STACK<T>::Push(const T& a)58 {59     if(Full())overflow();60     date[++top] = a;61 }62 63 template<class T>64 bool STACK<T>::Pop(T& x)65 {66     if(Empty())return false;67     x = date[top--];68     return true;69 }70 71 int main()72 {73     int tmp;74     STACK<int> s;75     for(int i = 0; i < 10; i++)76         s.Push(i);77     cout << s << endl;78     s.Pop(tmp);79     cout << s << endl;80     s.Top(tmp);81     cout << tmp << endl;82     return 0;83 }

 

顺序栈