顺序栈
#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)
{ 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;
}