顺序栈

本文介绍了一种使用C++实现的顺序栈数据结构,并详细解释了其基本操作,包括初始化、判空、入栈、出栈等。通过具体示例展示了如何使用这些操作来管理和操作栈中的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值