实验4 栈及栈的应用实验fanglichun

时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……

实验4 栈及栈的应用实验fanglichun.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219