#include<iostream>
using namespace std;
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACINEREMENT 10 //存储空间分配增量
#define ERROR 0
#define OK 1
class Stack{
private:
int*top; //栈顶指针
int*base; //栈底指针
intstacksize; //栈的当前可使用的最大容量
public:
friendStack InitStack(); //初始化
friendint Push(Stack &s); //把数据压入栈内
friendint GetTop(Stack &s); //取出栈顶元素(栈中元素没有减少)
friendint Pop(Stack &s); //弹出栈顶元素(栈中元素已减少一个)
};
StackInitStack(){
Stacks;
s.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
returns;
}
int Push(Stack &s){
intn,e;
if(s.top-s.base>=s.stacksize){
s.base=(int*)realloc(s.base,(s.stacksize+STACINEREMENT)*sizeof(int));
if(!s.base)return ERROR;
s.top=s.base+s.stacksize;
s.stacksize+=STACINEREMENT;
}
cout<<"请输入你需要元素的个数: "; cin>>n;
s.stacksize=n;
cout<<"请输入你需要的"<<n<<"个元素: ";
for(intj=0;j<s.stacksize;j++){
cin>>e;
*s.top++=e;
}
cout<<"刚创建的栈内的元素为(从栈底至栈顶输出):";
int*p=s.base;
for(inti=0;i<s.stacksize;i++){
cout<<*p<<" ";
p++;
}
cout<<endl<<endl;
returnOK;
}
int GetTop(Stack &s){
if(s.top==s.base)return ERROR;
inte=*(s.top-1);
cout<<"栈顶元素为:";cout<<e<<endl<<endl;
returnOK;
}
int Pop(Stack &s){
if(s.top==s.base)return ERROR;
inte=*(--s.top);
cout<<"弹出的栈顶元素为:";cout<<e<<endl;;
s.stacksize--;
cout<<"新的栈内的元素为(从栈底至栈顶输出):";
int*p=s.base;
for(inti=0;i<s.stacksize;i++){
cout<<*p<<" ";
p++;
}
cout<<endl<<endl;
returnOK;
}
int main(){
StackS;
S=InitStack();
Push(S);
GetTop(S);
Pop(S);
return0;
}