顺序栈
#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef struct//定义
{
int *base;//栈底指针
int *top;//栈顶指针
int stacksize;//栈可用最大容量
}SqStack;
void InitStack(SqStack &S)//初始化
{
S.base=new int[MAXSIZE];
S.top=S.base;
S.stacksize=MAXSIZE;
}
void Push(SqStack &S,int e)//入栈
{ if(S.top-S.base==S.stacksize){cout<<"栈满"<<endl;return;}
*S.top++=e;
}
void Pop(SqStack &S,int &e)//出栈,并把栈顶元素保存到e
{ if(S.top==S.base){cout<<"栈空"<<endl;return;}
e=*--S.top;
}
int GetTop(SqStack S)//取栈顶元素,但不出栈
{
if(S.top!=S.base)
return *(S.top-1);
}
int main()
{
SqStack S;
InitStack(S);
Push(S,10);
Push(S,15);
Push(S,1);
int ans=GetTop(S);
cout<<ans<<endl;
int ans1;
Pop(S,ans1);
Pop(S,ans1);
cout<<ans1<<endl;
return 0;
}
链式栈
#include <iostream>
using namespace std;
typedef struct StackNode
{
int data;
struct StackNode *next;
}StackNode,*LinkStack;
void InitStack(LinkStack &S)//初始化
{
S=NULL;//设置空栈,没必要设头结点
}
void Push(LinkStack &S,int e)//入栈
{
StackNode *p;
p=new StackNode;
p->data=e;
p->next=S;
S=p;
}
void Pop(LinkStack &S,int &e)//出栈
{
if(S!=NULL)
{e=S->data;
StackNode *p;//方便后续删除节点
p=S;
S=S->next;
delete p;
}
}
int GetTop(LinkStack &S)//获取栈顶元素
{
if(S!=NULL)
return S->data;
}
int main()
{
LinkStack S;
InitStack(S);
Push(S,10);
Push(S,15);
Push(S,1);
int ans=GetTop(S);
cout<<ans<<endl;
int ans1;
Pop(S,ans1);
Pop(S,ans1);
cout<<ans1<<endl;
return 0;
}