实验4 栈及栈的应用实验fanglichun
时间:2025-05-16
时间:2025-05-16
实验报告四
班级:20103259姓名:栈及栈的应用实验方立春学号:20103259专业:信息安全
一、实验目的:
(1)掌握栈的基本操作的实现方法。
(2)利用栈先进后出的特点,解决一些实际问题。
二、实验内容:(请采用模板类及模板函数实现)
1、栈顺序存储结构的基本操作算法实现
/*(1)栈顺序存储结构的类定义:*/
#include<iostream.h>
#include<stdlib.h>
//#include"fanglichun";
template<classdatatype>
classseqstack//类的声明
{
public:
seqstack(intsize);//构造函数初始化栈
//~seqstack();//析构函数
voidPush(constdatatype&item);//进栈
datatypePop();//出栈
datatypeGettop();//获取栈顶元素
voidprint();//遍历栈所有元素
boolIsempty();//判断栈是否为空
boolIsfull();//判断栈是否为满,为满则返回1,否则返回0
voidClear();//清空栈
private:
datatype*s;//存放栈元素的数组起始地址
intmaxsize;//栈的最大容量
inttop;//数组下标指示器
};
/*(2)构造栈算法
输入:栈元素个数的最大数size
初始化栈:栈顶指示置为-1,创建存储栈的数组,
栈元素个数的最大数maxsize置为size;*/
/***************************************************/
template<classdatatype>
seqstack<datatype>::seqstack(intsize):top(-1),maxsize(size)//构造函数{
s=newdatatype[size];//创建存储栈的动态数组
if(s==NULL)
{
cout<<"动态申请失败!"<<endl;
exit(0);
}
}
/*(3)销毁栈算法
输入:无
前置条件:栈存在
动作:删除存储栈元素的数组
输出:无
后置条件:栈的存储元素区域不存在,栈顶指针归-1,maxsize为0*/
template<classdatatype>
voidseqstack<datatype>::Clear()
{
if(top==-1)throw"栈为空!";
else
{
delete[]s;
top=-1;
maxsize=0;
}
}
/*(4)进栈算法
输入:要进栈的项item
前置条件:栈未满
动作:把item压入栈顶
输出:无
后置条件:栈顶增加一个新元素,栈顶指示加1;*/
/*******************************************/
template<classdatatype>
voidseqstack<datatype>::Push(constdatatype&item)//入栈
{
//先判断栈是否已满
if(top==maxsize-1)throw"栈已满!";
else
{
//写成s[top++]=item将会出错
s[++top]=item;//item入栈
}
}
/*(5)出栈算法
输入:无
前置条件:栈非空
动作:删除栈顶元素
输出:返回删除的栈顶元素值
后置条件:删除栈顶元素,栈顶指示减1*/
/**************************************/
template<classdatatype>
datatypeseqstack<datatype>::Pop()
{
datatypetemp;
//先判断站是否为空
if(top==-1)
throw"栈为空!";
else
{
temp=s[top];
top--;//这两句等价于temp=s[top--]
returntemp;
}
}
/*(6)获得栈顶元素算法
输入:无
前置条件:栈不空
动作:取栈顶数据元素给e
输出:返回栈顶元素值e
后置条件:无*/
/***************************************/
template<classdatatype>
datatypeseqstack<datatype>::Gettop()
{
if(top==-1)throw"空栈!";
returns[top];
}
/*(7)判栈满算法
输入:无
前置条件:无
动作:检查栈顶指示是否等于maxsize-1
输出:栈满时返回1,否则返回0
后置条件:无*/
/*********************************/
template<classdatatype>
boolseqstack<datatype>::Isfull()
{
return(top==maxsize);
}
/*(8)判栈空算法
输入:无
前置条件:无
动作:检查栈顶指示是否等于-1
输出:栈空时返回1,否则返回0
后置条件:无*/
/**********************************/
template<classdatatype>
boolseqstack<datatype>::Isempty()
{
return(top==-1);
}
/*(9)遍历栈算法
输入:无
前置条件:栈非空
动作:遍历输出每个栈非空元素
输出:无
后置条件:无*/
/**********************************************/
template<classdatatype>
voidseqstack<datatype>::print()
{
if(top==-1)
{
cout<<"栈为空,不能再输出!"<<endl;
exit(0);
}
for(inti=0;i<=top;i++)
{
cout<<s[i]<<"";
}
cout<<endl;
}
voidmain()
{
intn;
cout<<"输入动态数组的元素个数:"<<endl;
cin>>n;
int*s=newint[n];
for(intj=0;j<n;j++)
{
cout<<"s["<<j<<"]=";
cin>>s[j];
}
seqstack<int>stack(100);
for(intk=0;k<n;k++)
{
stack.Push(s[k]);
}
cout<<"输出栈元素为:";
stack.print();
cout<<endl;
stack.Pop();
stack.Gettop();
cout<<"出栈以后输出栈元素为:";
stack.print();
cout<<endl;
cout<<"是空栈则是1,否则为0):"<<stack.Isempty()<<endl;
stack.Clear();
cout<<"是满栈则返回1,否则返回0):"<<stack.Isfull()<<endl;
}粘贴测试数据及运行结果 …… 此处隐藏:1782字,全部文档内容请下载后查看。喜欢就下载吧 ……