首页 > 代码库 > 顺序栈
顺序栈
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 }
顺序栈
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。