/***顺序栈的实现***/
#include<iostream.h>
#include<stdlib.h>
//顺序栈定义
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef int SElemType;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//算法3.1 顺序栈的初始化
Status InitStack(SqStack &S)
{// 构造一个空栈 S
S.base = new SElemType[MAXSIZE]; //为顺序栈分配一个最大容量为MAXSIZE的数组空间
if(!S.base)
exit (OVERFLOW); //存储分配失败
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//算法3.2 顺序栈的入栈
Status Push(SqStack &S,SElemType &e)
{ // 插入元素e为新的栈顶元素
if(S.top-S.base==S.stacksize)
return ERROR; //栈满
*(S.top++) = e; //元素e压入栈顶,栈顶指针加1
return OK;
}
//算法3.3 顺序栈的出栈
Status Pop(SqStack &S,SElemType &e)
{// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
if(S.base == S.top)
return ERROR;//栈空
e = *(--S.top); //栈顶指针减1,将栈顶元素赋给e
return OK;
}
//算法3.4 取顺序栈的栈顶元素
Status GetTop(SqStack S,SElemType &e)
{// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
if(S.top == S.base)
return ERROR;
e = *(S.top-1);//栈顶指针减1,将栈顶元素赋给e
return OK;
}
int main()
{
SqStack s;
SElemType e;
SElemType t;
cout<<"进栈元素依次为:"<<endl;
if(InitStack(s)==OK)
for(int j=1;j<=12;j++)
{
Push(s,j);
cout<<j<<" ";
}
cout<<endl<<"依次弹出的栈顶元素为:"<<endl;
while(GetTop(s,e) == OK)
{
cout<<e<<" ";
Pop(s,t); //这一行不能去掉
}
return 0;
}
</pre><pre name="code" class="cpp"><pre name="code" class="cpp">/***顺序栈的实现***/
#include<iostream.h>
#include<stdlib.h>
//顺序栈定义
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef int SElemType;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//算法3.1 顺序栈的初始化
Status InitStack(SqStack &S)
{// 构造一个空栈 S
S.base = new SElemType[MAXSIZE]; //为顺序栈分配一个最大容量为MAXSIZE的数组空间
if(!S.base)
exit (OVERFLOW); //存储分配失败
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//算法3.2 顺序栈的入栈
Status Push(SqStack &S,SElemType &e)
{ // 插入元素e为新的栈顶元素
if(S.top-S.base==S.stacksize)
return ERROR; //栈满
*(S.top++) = e; //元素e压入栈顶,栈顶指针加1
return OK;
}
//算法3.3 顺序栈的出栈
Status Pop(SqStack &S,SElemType &e)
{// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
if(S.base == S.top)
return ERROR;//栈空
e = *(--S.top); //栈顶指针减1,将栈顶元素赋给e
return OK;
}
//算法3.4 取顺序栈的栈顶元素
SElemType GetTop(SqStack S)
{// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
if(S.top == S.base)
return ERROR;
return *(S.top-1);//栈顶指针减1,将栈顶元素赋给e
}
int main()
{ SqStack s;
SElemType e;
cout<<"1.初始化栈"<<endl;
cout<<"2.入栈"<<endl;
cout<<"3.出栈"<<endl;
cout<<"4.取栈顶元素"<<endl;
cout<<"0.退出"<<endl;
int choose=-1;
while(choose!=0)
{
cout<<"请选择:\n";
cin>>choose;
switch(choose)
{
case 1:
{
if(InitStack(s))
cout<<"顺序栈初始化成功!\n";
else
cout<<"顺序栈初始化失败!\n";
break;
}
case 2:
{
cout<<"请输入进栈元素个数:";
int n;
SElemType a;
cin>>n;
cout<<"进栈元素依次为:\n";
for(int i=0;i<n;i++)
{
cin>>a;
Push(s,a);
}
break;
}
case 3:
{
cout<<"出栈元素依次为:\n";
while(Pop(s,e))
{
cout<<e<<" ";
}
break;
}
case 4:
{
cout<<"栈顶元素为:";
e=GetTop(s);
cout<<e<<endl;
break;
}
case 0:exit(0);
default:cout<<"无此选项!\n";
}
}
}
</pre><pre name="code" class="cpp"><pre name="code" class="cpp">#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef int Selemtype;
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct{
Selemtype *top;
Selemtype *base;
int stacksize;//栈的最大容量
}SqStack;
//算法3.1 顺序栈的初始化
Status InitStack(SqStack &S)//构造一个空栈
{
S.base=new Selemtype[MAXSIZE];//为顺序栈分配一个最大容量为MAXSIZE的数组空间
if(!S.base)
exit(OVERFLOW);//存储分配失败
S.top=S.base;
S.stacksize=MAXSIZE;
return OK;
}
//算法3.2 顺序栈的入栈
Status Push(SqStack &S,Selemtype e)//插入e为新的栈顶元素
{
if(S.top-S.base==S.stacksize)
return ERROR;//栈满
*S.top++=e;//元素e压入栈顶,栈顶指针加1
return OK;
}
//算法3.3 顺序栈的出栈
Status Pop(SqStack &S,Selemtype &e)
{
if(S.top==S.base) return ERROR;//栈空
e=*--S.top;//栈顶指针减1,栈顶元素付给e
return OK;
}
//算法3.4 取栈顶元素
Selemtype GetTop(SqStack S)
{
if(S.top==S.base) exit(1);
return *(S.top-1);//栈顶指针减1,返回栈顶元素
}
int main()
{
SqStack sa;
if(InitStack(sa))
{
cout<<"顺序栈初始化成功!请输入进栈元素个数:";
int n;
Selemtype a;
cin>>n;
cout<<"进栈元素依次为:\n";
for(int i=0;i<n;i++)
{
cin>>a;
Push(sa,a);
}
}
else
cout<<"初始化顺序栈失败!\n";
cout<<"依次弹出的栈顶元素为:\n";
Selemtype b;
while(Pop(sa,b))
{
cout<<b<<" ";
}
cout<<endl;
return 0;
}