#include<iostream>
#define MAX_SIZE 100
#define CREMENT 10
using namespace std;
class SqStack{
public:
SqStack(){
base=new int[MAX_SIZE];
stackSize=MAX_SIZE;
top=base;
}
void push(int e){
int length=top-base; //栈顶是指向预插入的那个空间
int *newbase;
if(top-base>=stackSize){
newbase=new int[stackSize+CREMENT];
for(int j=0;j<length;j++)
*(newbase+j)=*(base+j);
delete[] base;
stackSize+=CREMENT;
base=newbase;
top=base+length;
}
*top=e;
++top;
}
int pop(int &e){
if(isEmpty())
return 1;
else
e=* --top;
return 0;
}
bool isEmpty(){
return(top==base?true:false);
}
int getLength(){
return top-base;
}
~SqStack(){
if(base)
delete[] base;
stackSize=0;
top=base=NULL;
}
int print(){
int count=0; //计数用
int* n=top-1; //不要弹一个出来输一个,应该这样输出更加合理
for(n;n>=base;n--){
cout<<*n<<" ";
++count;
}
cout<<endl;
cout<<"栈中元素个数为"<<count<<endl;
return 0;
}
protected:
int *base;
int *top;
int stackSize;
};
int main(){
int e;
SqStack d;
d.push(1);
d.push(2);
d.push(3);
cout<<"此时栈为:";
d.print();
cout<<endl;
d.pop(e);
cout<<"弹出元素为"<<e<<endl;
d.pop(e);
cout<<"弹出元素为"<<e<<endl;
cout<<"此时栈为:";
d.print();
cout<<endl;
d.pop(e);
cout<<"弹出元素为"<<e<<endl;
cout<<"此时栈为:";
d.print();
cout<<endl;
return 0;
}