顺序栈的简单实现
#include<iostream>
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
using namespace std;
typedef int Status;
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base=new int[MAXSIZE];
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=MAXSIZE;
return OK;
}
Status Push(SqStack &S,int e)
{
if(S.top-S.base==S.stacksize) return ERROR;
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,int &e)
{
if(S.top==S.base) return ERROR;
e=*--S.top;
return OK;
}
Status GetTop(SqStack S)
{
if(S.top!=S.base)
return *(S.top-1);
}
Status StackEmpty(SqStack S)
{
if(S.base==S.top)
return OK;
else
return ERROR;
}
Status StackLength(SqStack S)
{
return S.top-S.base;
}
void ClearStack(SqStack &S)
{
if(S.base)
S.top=S.base;
}
void DestroyStack(SqStack &S)
{
if(S.base)
{
delete S.base;
S.stacksize=0;
S.base=S.top=NULL;
}
}
int main()
{
SqStack S;
cout <<"简单实现顺序栈:"<<endl;
cout<<"初始化一个空栈:"<<endl;
if(InitStack(S))
cout <<"初始化成功!"<<endl<<endl;
else
cout <<"初始化失败"<<endl<<endl;
cout<<"输入你想要几个元素入栈:";
int n,e;
cin >>n;
cout<<endl;
cout <<"请输入这几个元素:";
for(int i=0;i<n;i++)
{
cin >>e;
Push(S,e);
}
cout <<endl;
cout<<"此时顺序栈内元素个数为:"<<StackLength(S)<<endl<<endl;
cout<<"删除栈顶元素:"<<endl;
if(Pop(S,e))
cout<<"删除成功!"<<"此元素为:"<<e<<endl<<endl;
else
cout<<"删除失败!"<<endl<<endl;
if(!StackEmpty(S))
cout<<"栈非空!"<<endl<<endl;
else
cout<<"栈空!"<<endl<<endl;
cout<<"此时栈内元素个数为:"<<StackLength(S)<<endl<<endl;
cout<<"取栈顶元素:"<<GetTop(S)<<endl<<endl;
cout<<"清空顺序栈:"<<endl;
ClearStack(S);
cout<<"此时顺序栈内元素个数为:"<<StackLength(S)<<endl<<endl;
cout<<"销毁顺序栈:"<<endl;
DestroyStack(S);
cout<<"顺序栈已销毁";
return 0;
}
链栈的简单实现
#include<iostream>
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
using namespace std;
typedef int Status;
typedef struct StackNode
{
int data;
struct StackNode *next;
}StackNode,*LinkStack;
Status InitStack(LinkStack &S)
{
S=NULL;
return OK;
}
Status Push(LinkStack &S,int e)
{
LinkStack p;
p=new StackNode;
p->data=e;
p->next=S;
S=p;
return OK;
}
Status Pop(LinkStack &S,int &e)
{
LinkStack p;
if(S==NULL) return ERROR;
e=S->data;
p=S;
S=S->next;
delete p;
return OK;
}
Status GetTop(LinkStack S)
{
if(S!=NULL)
return S->data;
}
Status LenthStack(LinkStack S)
{
int len=0;
StackNode *p=S;
while(p!=NULL)
{
p=p->next;
len++;
}
return len;
}
Status StackEmpty(LinkStack S)
{
if(S==NULL)
return OK;
else
return ERROR;
}
void ClearStack(LinkStack &S)
{
if(S) S=NULL;
}
void DestroyStack(LinkStack &S)
{
LinkStack q;
while(S)
{
q=S->next;
delete S;
S=q;
}
}
int main()
{
LinkStack S;
cout <<"链栈的简单实现:"<<endl;
cout<<"初始化一个链栈:"<<endl;
if(InitStack(S))
cout <<"初始化成功!"<<endl<<endl;
else
cout <<"初始化失败!"<<endl<<endl;
cout<<"请输入你想要几个元素入栈:";
int n,x,e;
cin >> n;
cout<<endl<<"输入这几个元素:";
for(int i=1;i<=n;i++)
{
cin>>x;
Push(S,x);
}
cout<<endl;
cout<<"此时栈内元素个数为:"<< LenthStack(S)<<endl<<endl;
cout<<"删除栈顶元素:"<<endl;
if(Pop(S,e))
cout<<"删除成功!"<<endl<<"此元素为:"<<e<<endl<<endl;
else
cout<<"删除失败!"<<endl<<endl;
if(!StackEmpty(S))
cout <<"栈非空!"<<endl<<endl;
else
cout<<"栈空!"<<endl<<endl;
cout<<"此时栈内元素个数为:"<< LenthStack(S)<<endl<<endl;
cout<<"取栈顶元素:"<<GetTop(S)<<endl<<endl;
cout<<"清空链栈:"<<endl;
ClearStack(S);
cout<<"已清除!"<<endl;
cout<<"此时栈内元素个数为:";
cout<<LenthStack(S)<<endl<<endl;
cout<<"销毁链栈:"<<endl;
DestroyStack(S);
cout<<"已销毁!";
return 0;
}