栈的基本运算有3种:入栈、退栈、读栈。
入栈运算是指在栈顶位置插入一个新元素;退栈运算是指取出栈顶元素并赋值给一个指定的变量;读栈顶元素是指将栈顶元素赋给一个指定的变量。
下面以例子来呈现,是今天刚完成的,参考的书上的。
这个是顺序栈类的文件,文件名为sq_Stack.h
#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); //栈满
if(top==0)return(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; //新元素入栈,至于这些类似的地方为什么要减1,是因为在C++中数组元素下标都是从0开始的。
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 underflow!"<<endl;return(0);}
return(s[top-1]); //返回栈顶元素
}
这是主函数,文件名为L2_4.cpp
#include<iostream>
#include "sq_Stack.h"
using namespace std;
int main()
{
sq_Stack<int>s(10); //建立容量为10的空栈s,元素为整型
s.ins_sq_Stack(50); //将50入栈s,单步运行,这一步结束的时候,发现s当中存储的值为50,top值为1
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,单步运行,这一步结束的时候,发现s当中存储的值为50,top值为6
cout<<"输出栈顶指针与栈中的元素:"<<endl;
s.prt_sq_Stack(); //输出栈顶指针与栈中的元素
cout<<"栈顶元素:"<<s.read_sq_Stack()<<endl; //输出栈顶元素
cout<<"输出退栈元素:"<<endl;
cout<<s.del_sq_Stack()<<endl; //输出从栈退出的元素单步运行,这一步结束的时候,s当中存储的值为50,top值为5
cout<<s.del_sq_Stack()<<endl; //输出从栈退出的元素
cout<<s.del_sq_Stack()<<endl; //输出从栈退出的元素单步运行,这一步结束的时候,s当中存储的值为50,top值为3
cout<<"再次输出栈顶指针与栈中的元素:"<<endl;
s.prt_sq_Stack(); //输出栈顶指针与栈中的元素
return 0;
}
1040

被折叠的 条评论
为什么被折叠?



