顺序栈的模拟
顺序栈的初始化
typedef struct sqstack
{
int *base;
int *top;
int stacksize;
}sqstack;
//顺序栈的结构体中包括一个栈底指针一个栈顶指针,和栈的大小。
int InitStack(sqstack &s)//注意&符号,如果不加无法对传入的s产生影响,函数起不到创建的作用
{
s.base=new int [MAXSIZE];//为s申请一个100个大小的空间
if(!s.base)exit(-1);
s.top=s.base;//最初栈顶指针和栈底指针指向同一位置
s.stacksize=MAXSIZE;
}
判空和判满
bool isEmpty(sqstack s)//加不加&都可以
{
if(s.top==s.base)return true;
else return false;
}
bool isFull(sqstack s)
{
if(s.top-s.base==MAXSIZE) return true;
else return false;
}
入栈出栈
int push(sqstack &s,int e)//入栈
{
if(isFull(s)){cout<<"wrong"<<endl;return -1;}
*s.top=e;
s.top++;
return e;
}
int pop(sqstack &s)
{
if(isEmpty(s)){cout<<"wrong"<<endl;return -1;}
s.top--;
}
获取栈顶元素
因为栈顶指针在栈顶元素的下一个位置,所以返回top-1的值
int gettop(sqstack s)
{
if(s.top==s.base)
{cout<<"wrong"<<endl;return -1;}
return *(s.top-1);
}
运行主函数
int main()
{
sqstack sta;
int e;
InitStack(sta);
push(sta,5);
push(sta,8);
push(sta,50);
cout<<gettop(sta)<<endl;
pop(sta);
cout<<gettop(sta)<<endl;
pop(sta);
cout<<gettop(sta)<<endl;
pop(sta);
cout<<gettop(sta)<<endl;
pop(sta);
cout<<gettop(sta)<<endl;
}
结果: