顺序栈
来源:互联网 发布:android网络通信 编辑:程序博客网 时间:2024/04/27 22:05
#include <iostream>
using namespace std;
typedef int ElemType;// 定义ElemType为int类型
#define MAXSIZE 100 //用户需要的最大栈容量
#define FALSE 0
#define TRUE 1 /*顺序栈存储空间的总分配量*/
/* 定义顺序存储类型 */
typedef struct
{ElemType data[MAXSIZE]; /*存放线性栈的数组*/
int top; /* 栈顶指针,指向栈顶元素*/
}SeqStack;
//以下是顺序栈的基本操作
//顺序栈的初始化
SeqStack SeqStackInit(SeqStack S)
{//构造一个空栈S
S.top=-1;
return S;
}
//判栈空
int SeqStackEmpty(SeqStack S)
{//判断栈S是否为空
if(S.top==-1)
{return TRUE; }
else
{return FALSE;}
}
//入栈
SeqStack SeqStackPush(SeqStack S,ElemType x)
{//插入x为新的栈顶元素
if(S.top==MAXSIZE-1)
{cout<<"栈满!"<<endl; exit(0);}
++S.top;
S.data[S.top]=x;
return S;
}
//出栈
SeqStack SeqStackPop(SeqStack S)
{//若栈S不空,删除S的栈顶元素
ElemType x;
if(S.top==-1)
cout<<"栈空!"<<endl;
else
{x=S.data[S.top];
S.top--;
cout<<"出栈元素是:"<<x<<endl;
}
return S;
}
//清空栈
SeqStack ClearStack(SeqStack S)
{
S.top=-1;
return S;
}
//取栈顶元素
ElemType SeqStackGetTop(SeqStack S)
{//若栈非空,返回栈顶元素的值
if(S.top!=-1)
cout<<"栈顶元素为:";
return S.data[S.top];
}
//计算栈中元素的个数
ElemType SeqStacknum(SeqStack S)
{
cout<<"栈中元素的个数为:";
return S.top+1;
}
int menu()
{int d;
cout<<"请选择所要进行的操作:/n";
cout<<"1.顺序栈的初始化 2.判栈空 3.入栈 4.出栈"<<endl;
cout<<"5.清空栈 6.取栈顶元素 7.计算栈中元素的个数"<<endl;
cout<<"其他键退出......"<<endl;
cin>>d;
return d;
}
void main()
{int quit=0;
ElemType e;
SeqStack S;
cout<<"第一次操作需选择初始化!"<<endl;
while (!quit)
switch(menu())
{case 1:S=SeqStackInit(S);break;
case 2: if(SeqStackEmpty(S))
cout<<"空!";
else cout<<"非空!";
break;
case 3:cout<<"请输入入栈元素:";
cin>>e;
S=SeqStackPush(S,e);
break;
case 4:S=SeqStackPop(S);break;
case 5:S=ClearStack(S);
cout<<"栈已清空!"<<endl;
break;
case 6:if(S.top=-1)
cout<<"栈空!"<<endl;
else cout<<SeqStackGetTop(S);
break;
case 7:cout<<SeqStacknum(S)<<endl;
break;
default:quit=1;
}
}