数据结构与算法操作实验三(栈的操作)
一、实验目的
1.掌握栈的存储结构的表示和实现方法。
2.掌握栈的入栈和出栈等基本操作算法实现。
3.了解栈在解决实际问题中的简单应用。
二、实验内容
1.建立顺序栈,并在顺序栈上实现入栈和出栈操作(验证性内容)。
2.建立链栈,并在链栈上实现入栈和出栈操作(设计性内容)。
3.实现汉诺(Hanoi)塔求解问题(应用性设计内容)。
三、实验的软硬件环境要求
硬件环境要求:
PC机(单机)
使用的软件名称、版本号以及模块:
Windows环境下的VC++等。
四、知识准备
前期要求熟练掌握了C语言的编程规则、方法和顺序栈、链栈的基本操作算法。
五、验证性实验
1.实验要求
编程实现如下功能:
(1)根据输入的栈中元素个数n和各元素值建立一个顺序栈,并输出栈中各元素值。
(2)将数据元素e入栈,并输出入栈后的顺序栈中各元素值。
(3)将顺序栈中的栈顶元素出栈,并输出出栈元素的值和出栈后顺序栈中各元素值。
2. 实验相关原理:
栈是一种插入和删除操作都限制在表的一端进行的特殊线性表,它的操作具有“先进后出”的特性。采用顺序存储结构的栈称为顺序栈。栈的存储结构描述如下:
#define MAXSIZE 100; /*顺序栈的最大长度*/
typedef struct
{
Selemtype base[MAXSIZE]; /*存储栈中数据元素的数组*/
int top; /*top为栈顶指针,它指示栈顶元素的存储空间的下一个存储单元*/
}Sqstack;
【核心算法提示】
1.顺序栈入栈操作的基本步骤:首先判断顺序栈是否为满,如果满,则函数返回ERROR,否则将待入栈的数据元素存放在top所指示的存储单元中,再使top后移一个存储单元位置,即将top值加1,最后函数返回OK。
2. 顺序栈出栈操作的基本步骤:首先判断顺序栈是否为空,如果空,则函数返回ERROR,否则将栈顶指针前移一个存储单元位置,即将top值减1,再将top所指示的栈顶元素用e返回其值,并使函数返回OK。
【核心算法描述】
status Push(Sqstack &S,Selemtype e)
/*将数据元素e压入到顺序栈S中,使其成为新的栈项元素*/
{
if (S.top >=MAXSIZE) /*如果栈满,则函数返回ERROR*/