//用于exit(1) #include const int stackIncreament=20; template">

顺序栈.doc

  • 格式:doc
  • 大小:31.50 KB
  • 文档页数:2

//顺序栈
//文件名:p089_SeqStack.h":
#include//用于exit(1)
#include
const int stackIncreament=20;
template
class SeqStack{
public:
SeqStack(int sz=10);
~SeqStack(){ delete []elements; }
void Push(const T &x); //新元素x进栈
bool Pop(T &x); //栈顶元素出栈,由x返回
bool getTop(T &x); //读取栈顶元素,由x返回
bool IsEmpty()const{ return top==-1; } //判断栈空否
int getSize()const{ return top+1; }//计算栈中元素个数
void MakeEmpty(){ top=-1; }//置空栈
friend ostream &operator<<(ostream &out,SeqStack &s);
private:
T* elements;//存放栈中元素的栈数组
int top;//栈顶指针
int maxSize;//栈最大可容纳元素个数
void overflowProcess();//栈的溢出处理

};
template
SeqStack::SeqStack(int sz):top(-1),maxSize(sz){
elements=new T[maxSize];
assert(elements!=NULL);
}

template
void SeqStack::Push(const T &x){
if(top==maxSize-1) overflowProcess();
elements[++top]=x;
}

template
bool SeqStack::Pop(T &x){
if(IsEmpty()) return false;
x=elements[top--];
return true;
}
template
bool SeqStack::getTop(T &x){
if(IsEmpty()) return false;
x=elements[top];
return true;
}

template
ostream &operator<<(ostream &os,SeqStack &s){
os<<"top="<for(int i=0;i<=s.top;i++)
os<return os;
}

template
void SeqStack::overflowProcess(){
T *newArray=new T[maxSize+stackIncreament];
if(newArray==NULL) {cerr<<"存储分配失败!\n";exit(1);}
for(int i=0;i<=top;i++) newArray[i]=elements[i];
maxSize=maxSize+stackIncreament;
delete[]elements;
elements=newArray;
}