//借鉴《实用数据结构一书》
#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;
}
栈的简单操作
最新推荐文章于 2022-04-24 16:28:33 发布