数据结构实验报告

该实验报告详细介绍了栈的存储结构和操作,包括顺序栈和链栈的入栈、出栈实现,以及汉诺塔问题的解决。实验在VC++环境下进行,旨在帮助学生掌握C语言编程及栈的特性,通过验证性和设计性实验加深理解。

数据结构与算法操作实验三(栈的操作)

一、实验目的

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*/
        return ERROR;
    S.base[S.top++]=e;/*将新元素e存放在top所指示的存储单元中,并使top值加1*/
    return OK;
  }
status Pop(Sqstack &S,Selemtype &e)
/*将顺序栈S中的栈顶元素从栈中删除,并用e返回其值*/
  { if (S.top==0)    /*如果栈空,则函数返回ERROR*/
       Return ERROR;
    e=S.base[--S.top];/*将top值减1,并用e保存top所指示的栈顶元素值*/
    return OK;
  }

3.学生实验代码

#include "stdio.h"
#define MAXSIZE 100
typedef struct
{
	int base[MAXSIZE];
	int top;
}Sqstack;

Sqstack creat(int n)
{	int x;
	Sqstack s;
	s.top=0;
	for(int i=1;i<=n;i++)
	{ 
		printf("Input a value:");
		scanf("%d",&x);
		s.top++;
		s.base[s.top]=x;
	}
	return s;
}

void print(Sqstack s)
{
	while(s.top!=0){

	printf("%4d",s.base[s.top]);
	s.top--;
	}
	printf("\n");
}


Sqstack push(Sqstack s,int e)
{
	if(s.top>=MAXSIZE)
	printf("the stack is full");
	else{
	s.top++;
	s.base[s.top]=e;
}return s;
}

Sqstack pop(Sqstack s)
{
	if(s.top==0)
	printf("the stack is empty");
	else
	{
		printf("the top of stack value %d\n",s.base[s.top]);
		s.top--;
	}

	return s;
}

int main()
{
	Sqstack st;
	int n,x;
	printf("input the length of stack");
	scanf("%d",&n);
	st=creat(n);

	printf("input insert x value");
	scanf("%d",&x);
	st=push(st,x);
	print(st);
	st=pop(st);
	print(st);

}

4.运行结果

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值