栈的简单操作

//借鉴《实用数据结构一书》
#include <iostream>
using namespace std;
//定义顺序栈类
template <class T>  //模板声明,数据元素虚拟类型为T
class  sq_stack     //顺序栈类
{ private:  //数据成员
int mm;       //存储空间容量
int top;     //栈顶指针
T *s;        //顺序栈存储空间首地址
	  public:   //成员函数
		  sq_stack(int);    //构造函数,建立空栈,即栈初始化 
		  void prt_sq_stack();  //顺序输出栈顶指针与栈中的元素
		  int flag_sq_stack();  //检测顺序栈的状态
		  void ins_sq_stack(T);  //入栈
		  T del_sq_stack(); //退栈
		  T read_sq_stack(); //读栈顶元素
};
//建立容量为mm的空栈
template <class T>
sq_stack<T>::sq_stack(int m)  
{ mm=m;          //存储空间容量
s=new T[mm];   //动态申请存储空间
top=0;          //栈顶指针为0,即建立空栈
return; 
}
//顺序输出栈顶指针与栈中的元素
template <class T>
void sq_stack<T>::prt_sq_stack()
{ int i;
cout <<"top=" <<top <<endl;
for (i=top; i>0; i--) cout <<s[i-1] <<endl;
return;
}
//检测顺序栈的状态
template <class T>
int sq_stack<T>::flag_sq_stack() 
{ if (top==mm) return(-1);  //存储空间已满,返回-1
if (top==0) return(0);   //栈为空,返回0
return(1);   //正常返回1
}
//入栈
template <class T>
void sq_stack<T>::ins_sq_stack(T x) 
{ if (top==mm)   //存储空间已满,上溢错误
{ cout <<"stack overflow!" <<endl;   return; }
top=top+1;  //栈顶指针进1
s[top-1]=x;   //新元素入栈
return;
}
//退栈
template <class T>
T sq_stack<T>::del_sq_stack()
{ T y;
if (top==0)  //栈为空,下溢错误
{ cout <<"stack underflow!" <<endl;  return(0); }
y=s[top-1];  //将栈顶元素赋给指定的变量y
top=top-1;  //栈顶指针退1
return(y);  //返回退出栈的元素
}
//读栈顶元素
template <class T>
T sq_stack<T>::read_sq_stack()
{ if (top==0)  //栈为空
{ cout <<"stack empty!" <<endl;  return(0); }
return(s[top-1]);  //返回栈顶元素
}
int main()
{ sq_stack<int> s(10);  //建立容量为10的空栈s,元素为整型
s.ins_sq_stack(50);   //将50入栈s
s.ins_sq_stack(60);   //将60入栈s
s.ins_sq_stack(70);   //将70入栈s
s.ins_sq_stack(80);   //将80入栈s
s.ins_sq_stack(90);   //将90入栈s
s.ins_sq_stack(100);  //将100入栈s
cout <<"输出栈顶指针与栈中的元素:" <<endl;
s.prt_sq_stack();    //输出栈顶指针与栈中的元素
cout <<"栈顶元素:" <<s.read_sq_stack() <<endl;  //输出栈顶元素
cout <<"输出退栈元素:" <<endl;
cout <<s.del_sq_stack() <<endl;   //输出从栈退出的元素
cout <<s.del_sq_stack() <<endl;   //输出从栈退出的元素
cout <<s.del_sq_stack() <<endl;   //输出从栈退出的元素
cout <<"再次输出栈顶指针与栈中的元素:" <<endl;
s.prt_sq_stack();    //再次输出栈顶指针与栈中的元素
return 0;
}



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值