#include <iostream>
using namespace std;
#define STACK_INIT_SIZE 100 //初始存储容量
#define STACKINCERMENT 10 //存储空间增量
struct SqStack //顺序栈的定义
{
int *base; //栈底指针
int *top; //栈顶指针
int stacksize; //当前最大容量
};
bool InitStack(SqStack &S) //构造一个空栈
{
S.base=new int [STACK_INIT_SIZE]; //先给空栈分配一个初始空间
if(!S.base) return 0; //分配失败则返回0
S.top=S.base; //栈顶指针初值指向栈底指针,代表空栈
S.stacksize=STACK_INIT_SIZE; //赋予栈当前的最大容量值
return 1;
}
int GetTop(SqStack S,int &e) //若栈不空,则用e返回S的栈顶元素
{
if(S.top==S.base) return 0; //如果栈为空,则返回0
e=*(S.top-1); //如果栈不为空,则用e返回栈顶元素
//cout<<e<<endl;
return e;
}
bool Push(SqStack &S,int e) //插入元素e为新的栈顶元素
{
if(S.top-S.base>S.stacksize) //如果栈满,则给栈追加存储空间
{
S.base=new int[STACKINCERMENT];
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCERMENT;
}
if(!S.base) return 0; //如果分配失败,则返回0
*S.top=e; //把e的值赋给栈顶指针 ,可合并为 *S.top++=e; (++运算级高于*)
++S.top; //栈顶指针地址加一
return 1;
}
bool Pop(SqStack &S) //若栈不空,则删除S的栈顶元素
{
if(S.top==S.base) //若栈为空,返回0
return 0;
*(--S.top)=NULL; //把栈顶指针指向的值赋给e
return 1;
}
int main()
{
int e=3,x;
SqStack s; //定义一个栈s
InitStack(s); //初始化栈
Push(s,e); //插入元素e为新的栈顶元素
GetTop(s,e); //用e返回栈顶元素
cout<<e<<endl;
Pop(s); //删除栈顶元素
GetTop(s,x);
cout<<x;
while(1){}
delete [] s.base;
return 0;
}
using namespace std;
#define STACK_INIT_SIZE 100 //初始存储容量
#define STACKINCERMENT 10 //存储空间增量
struct SqStack //顺序栈的定义
{
int *base; //栈底指针
int *top; //栈顶指针
int stacksize; //当前最大容量
};
bool InitStack(SqStack &S) //构造一个空栈
{
S.base=new int [STACK_INIT_SIZE]; //先给空栈分配一个初始空间
if(!S.base) return 0; //分配失败则返回0
S.top=S.base; //栈顶指针初值指向栈底指针,代表空栈
S.stacksize=STACK_INIT_SIZE; //赋予栈当前的最大容量值
return 1;
}
int GetTop(SqStack S,int &e) //若栈不空,则用e返回S的栈顶元素
{
if(S.top==S.base) return 0; //如果栈为空,则返回0
e=*(S.top-1); //如果栈不为空,则用e返回栈顶元素
//cout<<e<<endl;
return e;
}
bool Push(SqStack &S,int e) //插入元素e为新的栈顶元素
{
if(S.top-S.base>S.stacksize) //如果栈满,则给栈追加存储空间
{
S.base=new int[STACKINCERMENT];
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCERMENT;
}
if(!S.base) return 0; //如果分配失败,则返回0
*S.top=e; //把e的值赋给栈顶指针 ,可合并为 *S.top++=e; (++运算级高于*)
++S.top; //栈顶指针地址加一
return 1;
}
bool Pop(SqStack &S) //若栈不空,则删除S的栈顶元素
{
if(S.top==S.base) //若栈为空,返回0
return 0;
*(--S.top)=NULL; //把栈顶指针指向的值赋给e
return 1;
}
int main()
{
int e=3,x;
SqStack s; //定义一个栈s
InitStack(s); //初始化栈
Push(s,e); //插入元素e为新的栈顶元素
GetTop(s,e); //用e返回栈顶元素
cout<<e<<endl;
Pop(s); //删除栈顶元素
GetTop(s,x);
cout<<x;
while(1){}
delete [] s.base;
return 0;
}