顺序栈

来源:互联网 发布: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;
 }
}

原创粉丝点击