#ifndef _STACK_H #define _STACK_H #define STACK_INIT_SIZE 100 //初始栈的最大长度 #define STACKINCREMENT 10 //每次新增的栈的长度 #endif template <class DataType> class Stack{ public: Stack(); void Push(DataType e); //插入为e的新栈顶元素 int Pop(DataType &e); //删除栈顶元素 int GetTop(DataType &e); //取出栈顶元素 bool StackEmpty(); //判断栈是否为空 ~Stack(); //栈被销毁 private: DataType *base; //栈尾 DataType *top; //栈顶 int stacksize; }; /*------------ 构造函数,创建一个新的空栈 --------------*/ template <class DataType> Stack<DataType>::Stack() { if(!(base=(DataType*)malloc(STACK_INIT_SIZE*sizeof(DataType)))) { exit(1); } top=base; stacksize=STACK_INIT_SIZE; } /*-------- 插入为e的新栈顶元素 --------------*/ template <class DataType> void Stack<DataType>::Push(DataType e) { if(top-base>=stacksize){ if(!(base=(DataType*)realloc(base,(stacksize+STACKINCREMENT)*sizeof(DataType)))) { exit(1); } top=base+stacksize; stacksize+=STACKINCREMENT; } *top++=e; } /*-------- 删除栈顶元素 --------------*/ template <class DataType> int Stack<DataType>::Pop(DataType &e) { if(top==base) { return 0; } e=*--top; return 1; } /*-------- 取出栈顶元素 --------------*/ template <class DataType> int Stack<DataType>::GetTop(DataType &e) { if(top==base) { return 0; } e=*(top-1); return 1; } /*------------ 判断栈是否为空:空返回1 --------------*/ template <class DataType> bool Stack<DataType>::StackEmpty() { if (top == base) { return TRUE; } else { return FALSE; } } /*------------ 销毁栈 --------------*/ template <class DataType> Stack<DataType>::~Stack() { free(base); }