数据结构实验 4 顺序栈的实现

数据结构实验4 顺序栈的基本操作及应用 姓名:Far_Rainbow 学号: 202505000X 专业: 软件工程 年级:2020级 实验名称:实验4 顺序栈的基本操作及应用 实验内容: (1)实验目的 通过该实验,让学生掌握栈的相关基本概念,认识栈是插入和删除集中在一端进行的线性结构,掌握栈的“先入后出”操作特点。栈在进行各类操作时,栈底指针固定不动,掌握栈空、栈满的判断条件。 (2)实验内容 用顺序存储结构,实现教材定义的栈的基本操作,提供数制转换功能,将输入的十进制整数转换成二进制、八进制或十六进制。 3)参考界面 菜单中包括以下功能: 阅读详情

一、实验目的

1.掌握顺序栈的定义和特性。

2.掌握顺序栈的初始化、创建、取栈顶元素、销毁、打印、入栈、出栈等基本操作。

4. 了解顺序栈相较于顺序表的特殊性,能在不同情况下选择合适的存储方式。

二、实验要求

1. 写出顺序栈的操作的详细算法步骤;

2. 使用C/C++实现顺序栈,并编译运行。

三、实验过程

实验环境:visual studio 2017

实验步骤:

  1. 初始化顺序栈S,定义函数名为Init_Stack;
  2. 创建顺序栈S,定义函数名为Create_Stack;
  3. 取顺序栈S的栈顶元素,定义函数名为Get_Top;
  4. 销毁顺序栈S,定义函数名为Destory_Stack;
  5. 打印顺序栈S,定义函数名为Print_Stack;
  6. 元素入栈,定义函数名为Push;
  7. 栈顶元素出栈,定义函数名为Pop;

Stack.h

#define ELEMTYPE int   //用#define定义一个标识符ELEMTYPE表示int
#define MAXSIZE 10     //用#define定义一个标识符MAXSIZE表示10
#include<stdio.h>      //调用头文件
#include<stdlib.h>     //调用头文件

typedef struct           //构建一个结构体存储顺序栈信息
{
	ELEMTYPE* data;      //定义一个数组存放顺序栈中的元素
	int top;             //定义一个整型变量存放栈顶元素的下标
}Stack;             	 //结构名为Stack

void Init_Stack(Stack* S);    		 //声明初始化函数-Init_Stack
void Creat_Stack(Stack* S);   		 //声明创建函数-Creat_Stack
int Get_Top(Stack S);	      		 //声明取栈顶元素函数-Get_Top
void Destory_Stack(Stack* S); 		 //声明销毁函数-Destory_Stack
void Print_Stack(Stack S);    		 //声明打印函数-Print_Stack
void Push(Stack* S, ELEMTYPE e);     //声明入栈函数-Push
void Pop(Stack* S,ELEMTYPE* e);      //声明出栈函数-Pop

Stack.c

#include "Stack.h"    		 //调用头文件

void Init_Stack(Stack* S)    //初始化顺序栈
{
	S->data = (ELEMTYPE*)malloc(sizeof(ELEMTYPE)*MAXSIZE);    //开辟一块空间存放栈
	S->top = -1;    			    //顺序栈长度为0时top设置为-1
}

void Creat_Stack(Stack* S)    		//创建顺序栈
{
	int length;						//定义整型变量length表示顺序栈长度
	printf("Please input the length:");     //提示输入顺序栈长度
	scanf("%d", &length);                   //输入顺序栈长度
	printf("\n");                           //换行
	S -> top = length - 1;				    //栈顶元素的下标为栈长-1
	for (int n = 0; n <= S->top; n++)       //向顺序栈输入length个元素
	{
		printf("Please input the data:");   //提示输入顺序栈元素
		scanf("%d", &S->data[n]);           //输入顺序表元素
	}
	printf("\n");                           //换行
}

int Get_Top(Stack S)						//取栈顶元素
{
	return S.data[S.top];					//返回栈顶元素
}

void Destory_Stack(Stack* S)				//销毁顺序栈
{
	free(S->data);							//释放顺序栈S所占用空间
	S->data = NULL;							//指针S置为空
}

void Print_Stack(Stack S)				    //输出顺序栈
{
	printf("The stack is:");    		    //提示输出顺序栈
	for (int n = 0; n <= S.top; n++)        //遍历顺序栈
	{
		printf("%d ", S.data[n]);           //打印栈的元素
	}
	printf("\n");   						//换行
}

void Push(Stack* S,ELEMTYPE e)				//元素e入栈
{
	if (S->top >= MAXSIZE - 1)				//如果栈满
	{
		printf("push failed\n");			//提示入栈失败
		return;								//退出函数
	}								
	S->data[++S->top] = e;		            //栈顶插入元素e并更新栈顶元素的下标
}

void Pop(Stack* S,ELEMTYPE* e)				//栈顶元素出栈
{
	if(S->top==-1)							//顺序栈S为空
	{
		printf("pop failed\n");				//提示出栈失败
		return;								//退出函数
	}
	*e = S->data[S->top];					//栈顶元素赋值给*e
	S->top--;								//更新栈顶元素的下标
}

以下为测试函数

1.测试初始化函数Init_Stack;创建函数Create_Stack;打印函数Print_Stack.

#include "Stack.h"    //调用头文件

int main(void)        //main()函数
{
	Stack S;            //定义一个顺序表L
	Init_Stack(&S);     //调用Init_Stack函数将顺序栈S初始化
	Creat_Stack(&S);    //调用Creat_Stack函数创建顺序栈S
	Print_Stack(S);     //调用Print_Stack函数打印顺序栈S
	return 0;           //返回值
}

2.测试销毁函数Destory_Stack.

#include "Stack.h"    //调用头文件

int main(void)        //main()函数
{
	Stack S;          	//定义一个顺序表L
	Init_Stack(&S);      //调用Init_Stack函数将顺序栈S初始化
	Creat_Stack(&S);     //调用Creat_Stack函数创建顺序栈S
	Print_Stack(S);      //调用Print_Stack函数打印顺序栈S
	Destory_Stack(&S);	 //调用Destory_Stack函数销毁顺序栈S
	Print_Stack(S);      //调用Print_Stack函数打印顺序栈S
	return 0;            //返回值
}

3.测试入栈函数Push.

#include "Stack.h"          //调用头文件

int main(void)          	//main()函数
{
	Stack S;          	 //定义一个顺序表L
	Init_Stack(&S);      //调用Init_Stack函数将顺序栈S初始化
	Creat_Stack(&S);     //调用Creat_Stack函数创建顺序栈S
	Print_Stack(S);      //调用Print_Stack函数打印顺序栈S
	ELEMTYPE e;			 //定义ELEMTYPE类型变量e表示待入栈元素
	printf("Please input the element you want to push:");		//提示输入待入栈元素
	scanf("%d", &e);				 //输入待入栈元素
	Push(&S,e);					     //调用Push函数将元素e入栈
	Print_Stack(S);     			 //调用Print_Stack函数打印顺序栈S
	return 0;          			     //返回值
}

4.测试出栈函数Pop.

#include "Stack.h"   	 //调用头文件

int main(void)    		 //main()函数
{
	Stack S;          	 //定义一个顺序表L
	Init_Stack(&S);      //调用Init_Stack函数将顺序栈S初始化
	Creat_Stack(&S);     //调用Creat_Stack函数创建顺序栈S
	Print_Stack(S);      //调用Print_Stack函数打印顺序栈S
	ELEMTYPE e;		   	 //定义ELEMTYPE类型变量e表示待出栈元素
	Pop(&S,&e);	 		 //调用Push函数将栈顶元素出栈
	Print_Stack(S);      //调用Print_Stack函数打印顺序栈S
	return 0;          	 //返回值
} 

四、实验结果及分析

测试函数

测试用例

运行结果

Init_Stack Creat_Stack

Print_Stack

5

1,2,3,4,5

Please input the length:5

Please input the data:1

Please input the data:2

Please input the data:3

Please input the data:4

Please input the data:5

The stack is:1 2 3 4 5

0

Please input the length:0

The linked list is:

Destory_Stack

5

1,2,3,4,5

Please input the length:5

Please input the data:1

Please input the data:2

Please input the data:3

Please input the data:4

Please input the data:5

The stack is:1 2 3 4 5

The stack is:

0

Please input the length:0

The stack is:

The stack is:

Push

原栈栈满

1

Please input the element you want to push:1

push failed

The stack is:1 2 3 4 5 6 7 8 9 10

原栈未满

1

Please input the element you want to push:1

The stack is:1 2 3 4 5 1

Pop

原栈栈空

Please input the length:0

The stack is:

pop failed

The stack is:

原栈未空

Please input the length:5

Please input the data:1

Please input the data:2

Please input the data:3

Please input the data:4

Please input the data:5

The stack is:1 2 3 4 5

The stack is:1 2 3 4

实验4:栈和队列的基本操作实现及其应用——循环队列 一、实验目的 1、   熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。 2、      学会使用栈和队列解决实际问题。 二、实验内容 1、自己确定结点的具体数据类型和问题规模: 分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。 分别建立一个顺序队列和链队列,实现队列的入队和出队操作。 2、设计算法并写出代码,实现一个十将二进制转换 阅读详情

相关推荐

数据结构实验4、顺序栈的基本操作及应用

实验四: 作者说: 实验只包括栈的相关操作,没有用到队列,其实我觉得队列也挺复杂的。哈哈哈,刚刚看了一下,下一个实验就是关于队列的,慢慢学吧,加油! 定义: 栈和队列是两种特殊的线性表,即操作受限的线性表,只是对插入、删除运算加以限制。 栈是只允许在一端进行插入、删除运算,因而是后进先出表LIFO,允许插入和删除运算的一端称为栈顶。不允许插入和删除运算的一端称为栈底; 一、运行效果截图 二、实验要求 (1)实验目的 通过该实验,让学生掌握栈...

Scarlett的博客 3123

数据结构实验4---顺序栈的基本操作及应用

重点: 入栈和出栈 难点: 进制转换(十六进制)

qq_62474991的博客 869

数据结构|顺序栈的实现(实验3.1)

一、实验目的 1、熟练掌栈的结构特点,掌握栈的顺序存储结构和实现。 2、学会使用栈解决实际问题。 二、实验内容 1、自己确定结点的具体数据类型和问题规模,建立一个顺序栈,实现栈的压栈和出栈操作。 三、实验步骤 1、依据实验内容分别说明实验程序中用到的数据类型的定义; template < typename T > class SeqStack{ public: ...

weixin_40141473的博客 5795

数据结构与算法-顺序栈的操作及应用C语言实现(超详细注释/设计/实验/作业)

通过本次实验,掌握栈的一些基本操作。懂得入栈与出栈的特点,知道四则运算与含括号运算在栈中优先级的运用。在实验中有很多东西,收益匪浅。我觉得,做实验必须掌握实验的基本原理,因此,牢固掌握书本上的基本知识很重要。其次要有耐心,在程序运行之前可能会出现很多的错误,这就需要我们逐步的去调试,找出一个个错误,并改正,这样程序才能运行。不懂的问题多讨论。

我是程序员Amin,关注我,带你学习有趣的计算机知识 907

【数据结构(三)】栈(上)栈的定义&顺序栈

文章目录栈的定义栈的抽象数据类型栈的顺序存储结构顺序栈的进栈&出栈两栈共享 栈的定义 栈:一种限定仅在表尾进行插入和删除操作的线性表。 栈顶:线性表上被允许插入和删除的一端。(表尾) 栈底:线性表上不允许插入和删除的一端。(栈底是固定的,最先进栈的只能在栈底) LIFO:栈又称作后进先出的线性表,简称LIFO结构。 进栈:栈的插入操作,也叫入栈,压栈。 出栈:栈的删除操作,也叫弹栈。 多...

s599796的博客 716

(实验三)《数据结构》第三章 顺序栈与链栈的验证

《数据结构》实验三:    栈和队列实验 一..实验目的      巩固栈和队列数据结构,学会运用栈和队列。 1.回顾栈和队列的逻辑结构和受限操作特点,栈和队列的物理存储结构和常见操作。 2.学习运用栈和队列的知识来解决实际问题。 3.进一步巩固程序调试方法。 4.进一步巩固模板程序设计。 二.实验时间    准备时间为第5周到第6周,具体集中实验时

HuangWeiJie2013GDOU 2103

数据结构实验:顺序栈的基本操作及应用

实验内容用顺序存储结构,实现教材定义的栈的基本操作,提供数制转换功能,将输入的十进制整数转换成二进制、八进制或十六进制。参考界面菜单中包括以下功能:1.初始化栈,2.销毁栈,3.清空栈,4.栈判空,5.求栈长度,6.获取栈顶元素,7.插入一个 元素,8.删除一个元素,9输出所有元素,10进制转换。要求:自定义的函数中不允许出现提示语和输出语句。验收/测试用例通过菜单调用各个操作,测试点:没有初始化前进行其他操作,程序是否能控制住;初始化一个栈;判栈空,屏幕显示栈为空;

m0_73002963的博客 1969

数据结构作业——顺序栈的实现

/* author:Evrse email:494776017@qq.com */ #include<cstdio> #include<cstdlib> #include<cstring> #define fori(i,a,b) for(int i=(a);i<(b);i++) #define ford(i,a,b) for(int i=(a)-1;i>=(b);i--) const int maxn = 1e3 + 10; template<class

Evrse的博客 614

#数据结构---实验5: 顺序栈的基本操作及应用

本文基于顺序栈实现,重点在于理解free()到底在做什么,到底free()的是谁?以及进制转化时对十六进制的特殊处理:ASCII码或打表

weixin_73508102的博客 788

实现顺序栈的各种基本运算的算法

实现顺序栈的各种基本运算的算法

wzq_030123的博客 3675

避坑指南:Qt无边框窗口拖动+阴影效果这些细节要注意

本文深入探讨了Qt无边框窗口开发中实现流畅拖动与阴影效果的关键细节与常见陷阱。针对高DPI屏幕适配、阴影闪烁、拖动卡顿及多显示器兼容性等核心难题,提供了从QGraphicsDropShadowEffect原理剖析到手动绘制优化、坐标系统精准处理及平台原生事件拦截的实战解决方案,帮助开发者构建稳定、美观的商业级应用界面。

weixin_27943395的博客 477

数据结构与算法分析实验4 栈和队列的基本实现(顺序版、链表版)

数据结构预算法分析实验4,实现了栈和队列(通过顺序表和链表)的基本操作

2301_81290340的博客 990

从光耦隔离到稳定驱动:信捷伺服与STM32的硬件设计陷阱与救赎

本文深入探讨了信捷伺服驱动器与STM32微控制器配合时的硬件设计关键问题,包括光耦隔离电路选型、电源电压选择、拨码开关设置等核心环节。针对伺服驱动器的稳定驱动需求,提供了从电路设计到抗干扰策略的完整解决方案,帮助工程师规避常见陷阱,提升工业控制系统的可靠性。

gold8的专栏 310

数据结构--顺序栈的c语言实现(超详细注释/实验报告)

数据结构–顺序表的c语言实现(超详细注释/实验报告) 栈(Stack)作为一种限定性线性表,是将线性表的插入和删除操作限制为仅在表的一端进行,通常将表中允许进行插入、删除操作的一端成为栈顶(Top),因此栈顶的当前位置是动态变化的,它由一个成为栈顶指针的位置指示器来指示。同时,表的另一端被称为栈底(Bottom)。当栈中没有元素时成为空栈。栈的插入操作被形象地成为进栈或入栈,删除操作称为出栈或退栈。 栈被称为时后进先出(Last In First Out,LIFO)的线性表,简称LIFO表。生活

池塘春草梦的博客 1万+

C语言入门—初识C语言

一、C语言概述 1、什么是C语言 语言是用来交流沟通的,有一方说,有一方听。必须要两方参与。(自言自语的除外) 语言是人与人交流,而C语言是人与机器交流 语言有独特的语法规则和定义,双方必须遵循这些规则和定义才能实现真正的交流。 接下来首先了解下计算机的组成: 2、计算机介绍 2.1、计算机结构组成 2.2、计算机系统组成 2.3、程序的指令 指令是对计算机进行程序控制的最小单元 计算机的指令系统是指所有指令的集合 程序是指为完成某一项特定任务而用某种言语编写的一组指令序列 3、C语言发展历程 3.

jun319817的博客 1033

STM32F407+LAN8720网口不通?别慌,手把手教你用CubeMX和HAL库搞定RMII配置与调试

本文详细介绍了STM32F407与LAN8720网口不通的全面排查与解决方法,涵盖硬件检查、CubeMX配置、PHY芯片初始化和LWIP协议栈优化。通过RMII接口配置、时钟树设置和PHY芯片调试,帮助开发者快速定位并解决网络连接问题,提升嵌入式网络开发效率。

weixin_30457551的博客 506

【数据结构】顺序栈

顺序栈

2203_76003626的博客 2574

将Python爬取的数据导入钉钉多维表

摘要:本文介绍将Python爬取的数据导入钉钉多维表的完整解决方案。首先通过requests库爬取数据并解析为结构化格式,然后使用钉钉开放平台API对接多维表。关键步骤包括获取app_key、app_secret等凭证,通过OAuth2获取access_token,以及批量写入记录。文章详细说明了参数获取位置、字段类型匹配、权限配置等注意事项,并提供了错误处理建议和性能优化方法。适用于需要将网络数据同步到钉钉多维表的开发场景。

IT深耕十余载,大道之简 2130

数据结构—顺序栈

顺序栈是利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的元素数据。分别使用top指针和base指针指向栈顶和栈底。 栈为空的标志是:top==base. 要注意的是:非空栈的栈顶指针总是指向栈顶元素的上一个位置。 栈满时的处理方法: 1、报错,返回操作系统。 2、分配更大的空间,作为栈的存储空间,将原栈的内容移入新栈。 1.顺序栈的表示 #def...

小虾米编程 8605

GPD源码分析

gpd使用示例 先看下面一段代码,为标准gpd算法的使用方法,可以看到输入为点云,cloud_camera_; 输入:std::unique_ptr<gpd::util::Cloud> cloud_camera_ 输出: std::vector<std::unique_ptr<gpd::candidate::Hand>> grasps; // detect grasp poses gpd对象:std::unique_ptr<gpd::GraspDetect.

weixin_41003113的博客 2331

SAP CAP core data service 里 association 和 composition 的区别

我们进行 SAP CAP 开发时,在schema.cds里进行数据建模,可以使用 association 和 composition,来描述两个 entity 之间的关联关系。在 SAP BTP 的 Cloud Application Programming Model (CAP) 中,cds文件定义了数据模型,而和是用于建立实体关系的两种关键机制。理解它们的区别对于构建高效、清晰的 CAP 数据模型至关重要。下面,我们将通过严谨的逻辑推理,结合代码示例,深入分析和之间的核心差异。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 322

数据结构——顺序栈与链式栈的实现

数据结构——顺序栈与链式栈的实现 概念 接口 栈的基本运算顺序栈 (Sequential Stack) 实 栈的链表实现 两种实现的优缺点

wei_Embedded_z的博客 1908

TIBCO Jaspersoft Studio报表开发 使用教程-进阶版

本文学习内容容器定制二级目录三级目录 容器定制 二级目录 三级目录

吉哲的博客 7520

【数据结构】顺序栈 Stack

08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205 顺序栈各种基本运算算法的实现 栈是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底(push),最后的数据在栈顶

小魏的修行路 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数据结构实验3:C++实现顺序栈类与链栈类

                                        实验3   3.1 实验目的 熟练掌握栈的顺序存储结构和链式存储结构。 熟练掌握栈的有关算法设计,并在顺序栈和链栈上实现。 根据具体给定的需求,合理设计并实现相关结构和算法。 3.2实验要求 3.2.1 顺序栈的实验要求 顺序栈结构和运算定义,算法的实现以库文件方式实现,不得在测试主程序中直接实现; ...

u25th_engineer的博客 2523

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

顺序栈的实现

文章目录一.准备知识二.顺序栈结构的打造三.功能函数的声明与写法四.完成主函数五.全部代码演示六.运行结果 一.准备知识    顺序栈是数据结构栈的一个分类,顺序栈也是一种受限的线性表,我们说这个受限是指它受到了某种限制,这个限制是什么呢?   先来看一下顺序栈的示意图: a1,a2…an依次进入这个容器,出来的时候是an先出来,接着…a2,a1.我们把这种进入出入的方式成为“先进后出”。造成这...

令狐_JackieHao的博客 3772

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: 数据结构实验 3 双向链表的实现
下一篇: 数据结构实验 5 循环队列的实现
Binkkkk
博客等级 码龄5年 303粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Binkkkk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值