堆栈模板
2014-03-13 14:12
141 查看
#include<iostream> #include<string> #include<cassert> using namespace std; template <class T> class Stack{ public: enum {DefaultStack=50,EmptyStack=-1}; Stack(); //构造函数 Stack ( int ); //重载构造函数 ~Stack(); //析构函数 void push( const T &); T pop(); T topNoPop() const; bool empty() const; bool full() const; private: T* elements; int top; int size; void allocate(){ elements =new T[size]; top=EmptyStack; } void msg(const char* m) const{ cout<<" *** "<<m<<" *** "<<endl; } friend ostream& operator<<(ostream&,const Stack<T>&);//友元函数 }; template<class T> Stack<T>::Stack(){ size=DefaultStack; allocate(); } template<class T> Stack<T>::Stack(int s){ if(s<0)s*=-1; else if(0==s) s=DefaultStack; size=s; allocate(); } template <class T> Stack<T>::~Stack(){ delete [] elements; } template <class T> void Stack<T>::push(const T &e){ assert(!full()); if(!full()) elements[++top]=e; else msg("Stack full!"); } template <class T> T Stack<T>::pop(){ assert(!empty()); if(!empty()) return elements[top--]; else{ msg("Stack empty!"); T dummy_value; return dummy_value; //return arbitrary value } } template <class T> T Stack<T>::topNoPop() const{ assert(top>EmptyStack); if(!empty()) return elements[top]; else{ msg("Stack empty!"); T dummy_value; return dummy_value; } } template <class T> bool Stack<T>::empty() const{ return top<=EmptyStack; } template <class T> bool Stack<T>::full() const{ return top+1>=size; } template <class T> ostream& operator<<(ostream& os,const Stack<T>& s)// 友元函数 重载运算符"<<" { s.msg("Stack contents:"); int t=s.top; while(t>s.EmptyStack) cout<<s.elements[t--]<<endl; return os; } int main() { Stack<int> i_stack(4); int a; int i=0; while(i++<4) { cin>>a; i_stack.push(a); } cout<<i_stack.pop(); //弹出栈顶元素 cout<<i_stack.topNoPop(); return 0; }
相关文章推荐
- scrollTop(转)
- 自动备份并保存最近几天的SQL数据库作业脚本
- 求奇数的乘积(2006)
- 第几天?(2005)
- 求绝对值(2003)
- 计算球体积(2002)
- 计算两点间的距离(2001)
- ASCII编码排序(2000)
- C语音合法标识符
- 【ObjC那点儿事儿】OC对象内存管理 MRR
- 成绩转换程序(2004)
- Tomcat 环境变量配置
- Makefile文件中调用python文件及perl文件的方法
- CentOS6.4系统中Mysql数据库卸载、安装与配置教程
- 指针与引用的关系
- 走出去!——如何撬动海外手游市场?
- 网络流拆点upc
- 经典java面试题
- SqlBulkCopy转载
- 小技巧之一 string[]合并