数据结构之栈

<数据结构>——栈 📚参考资料:《数据结构C语言版》-严蔚敏 一、栈 首先,我们了解一下什么是栈? 栈是限定仅在表尾进行插入或删除操作的线性表。 表尾为栈顶,表头为栈底,不含元素的空表称为空栈。 例如, 洗干净的盘子总是逐个往上叠放在已经洗好的盘子上面 , 而用时从上往下逐个取用 还有一些案例也利用了栈: 括号的检验 我们来看这些括号,给它们标号为1-4,当出现1和2时,我们更想要先出现3,再出现4。而由于1与3配对,2与4配对,所以我们其实对于2的需求感强于对1的需求感。 1先进... 阅读详情

一、什么是栈

1.栈的概念

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。

2.栈的结构

压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶。
在这里插入图片描述

栈的实现

我们今天使用顺序表来实现栈,因为顺序表在尾部插入的时候代价较小。
在这里插入图片描述
在这里插入图片描述

1.结构定义
typedef int STDateType;
typedef struct Stack
{
	STDateType* a;
	int top;
	int capacity;
}ST;
2.栈的初始化
void StackInit(ST* pst);

void StackInit(ST* pst)
{
	assert(pst);
	pst->a = NULL;
	pst->capacity = pst->top = 0;
}
3.压栈

每次在压栈前判断空间是否充足。在第一次给栈4个空间,后续逐步扩大2倍。

void StackPush(ST* pst, STDateType x);

void StackPush(ST* pst, STDateType x)
{
	assert(pst);
	if (pst->capacity == pst->top)
	{
		int NewCapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;
		STDateType* tmp = (STDateType*)realloc(pst->a, NewCapacity * sizeof(STDateType));
		if (tmp == NULL)
		{
			perror("realloc fail");
			return;
		}
		pst->a = tmp;
		pst->capacity = NewCapacity;
	}
	pst->a[pst->top] = x;
	pst->top++;
}
4.出栈

注意判断栈是否为空。

void StackPop(ST* pst);

void StackPop(ST* pst)
{
	assert(pst);
	assert(!StackEmpty(pst));//判断
	pst->top--;
}
5.判断栈是否为空

top为0栈即为空。
在这里插入图片描述

bool StackEmpty(ST* pst);

bool StackEmpty(ST* pst)
{
	assert(pst);
	return pst->top == 0;
}
6.访问栈顶数据

top从0开始,注意要减1。
在这里插入图片描述

STDateType StackTop(ST* pst);

STDateType StackTop(ST* pst)
{
	assert(pst);
	assert(!StackEmpty(pst));

	return pst->a[pst->top - 1];
}
7.求栈的大小

在这里插入图片描述
top从0开始,top为多少,栈的大小为多少。

STDateType StackSize(ST* pst);

STDateType StackSize(ST* pst)
{
	assert(pst);
	return pst->top;
}
广工计组实验f2一位全加器 一位全加器实验 阅读详情

相关推荐

从零到一:NI USB-8506 LIN通讯的驱动安装与硬件调试全攻略

本文详细介绍了NI USB-8506 LIN通讯设备的驱动安装与硬件调试全流程,包括硬件准备、驱动下载与配置、NI MAX设置及常见问题解决方案。通过实战应用与性能优化技巧,帮助用户快速掌握LIN通讯技术,适用于车载数据记录和自动化测试等场景。

weixin_28273593的博客 924

【数据结构】栈是什么?从0理解栈的数据结构

在数据结构的学习中,栈是一种非常重要的结构。无论你是否是计算机专业,栈的概念其实并不复杂。本篇文章将帮助你从零理解栈的数据结构,了解它的基本用途、实际应用以及如何在C++中实现栈操作。

XuanRan的博客 4543

台达PLC DIAdesigner-AX 编程实战:从安装到通信配置

本文详细介绍了台达PLC DIAdesigner-AX编程的实战操作,从软件安装、项目创建到通信配置的全流程。重点讲解了TCP/IP通信设置、库文件管理及常见错误处理,帮助工程师快速掌握台达PLC编程技巧,提升工业自动化项目的开发效率。

weixin_29215391的博客 530

数据结构 栈

摘要 栈是一种后进先出(LIFO)的线性数据结构,仅允许在栈顶进行插入(push)和删除(pop)操作。其核心特性包括:仅操作栈顶、不支持随机访问、默认基于deque实现。栈的提出源于1950年代鲍尔团队对逆波兰表达式计算和函数调用机制的研究,现广泛应用于程序调用栈、表达式求值、括号匹配等场景。C++中可通过STL的std::stack或手动数组实现栈操作,基本功能包括压栈、弹栈、判空等。例题B3758展示了栈在括号匹配中的典型应用——通过栈统计未匹配括号数量,动态补全成合法序列。栈的高效性使其成为算法和系

syshrgjdkdh的博客 2237

快速玩转 Llama2!机器学习 PAI 最佳实践(一)—低代码 Lora 微调及部署

本实践将采用阿里云机器学习平台PAI-快速开始模块针对 Llama-2-7b-chat 进行开发。PAI-快速开始支持基于开源模型的低代码训练、布署和推理全流程,适合想要快速开箱体验预训练模型的开发者。

阿里云云栖号 1765

头歌操作系统2023春季课堂练习2.1:外部中断

本关任务:通过相关知识以及实验回答:版本 1 内核的第 6 次时钟中断发生时,断点和恢复点(指令地址)分别是多少?回答问题:当第一行 0/1 字符全部输出完毕的时候一共发生了几次时钟中断,即第一行完全填满时 jiffies 记录的已发生次数为多少?本关任务:通过实际操作回答在输出第一行 0/1 字符的过程中(如下图所示),共发生了几次时钟中断?2.此时 bochs 虚拟机输出的 0/1 字符串是什么?(只填写数字,不填写空格!根据相关知识进行实际操作,一直输入 c 直到 0/1 将第一行完全填满。

weixin_64821608的博客 8126

【数据结构】栈的详解

栈的结构体其实和顺序表差不多,一个动态开辟的数组,一个栈的容量。注意 top 我们要决定它指向栈顶还是栈顶的下一个元素。如果top初始化为0,则它指向栈顶的下一个元素。如果top初始化为-1,则它指向栈顶元素。我比较喜欢初始化为0,1是top还可以表示元素的个数,可以用来判断栈是否满了。2是插入元素的时候直接在top的位置插入就行,然后再top++即可。这里根据大家喜好设定就行。int top;} ST;

fighting小泽的博客 3433

go语言实现服务器server端与客户client端即时通信(附完整源码)

go语言实现服务器server端与客户client端即时通信(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 626

数据结构之——栈

数据结构之——栈 一:栈的定义: 栈是限定是限定仅在表位进行插入和删除操作的线性表,栈又称为先进后出(Last In First Out)的线性表,简称LIFO结构。 栈顶:允许插入和删除的一端称为栈顶。 栈底:不可以进行插入和删除操作。 空栈:不含任何数据元素的栈称为空栈。 理解栈的定义需要注意几点: 1:它是一个线性表,即说明栈元素具有 线性关系,即 前驱后继 关系。只不 过它是一种特殊的线性表而已。 2:定义中说在线性表的表的表尾进行插入和删除操作,注意这里表尾指的是

WenJieya的博客 7499

出现 Error occurred during initialization of VMagent library failed Agent OnLoad 解决方法

ntelliJ IDEA启动时出现"Agent library failed to load"错误,主要原因是JVM代理加载失败。解决方法包括:1)完全卸载并删除用户目录下的JetBrains配置文件;2)检查并修改idea64.exe.vmoptions文件,确保路径正确并删除不必要的-javaagent参数;

码农研究僧的博客 2480

【QNX+Android虚拟化方案】136 - QNX 侧 Coredump 文件解析

【QNX+Android虚拟化方案】136 - QNX 侧 Coredump 文件解析

|~~~热爱生活、努力学习的小伙汁~~~| 1906

栈—数据结构

6、获取栈顶元素(获取栈顶元素,在外面开一个空间,将该空间的地址传过去,进行获取元素,以便于区分元素还是返回值)入栈的方向是是增栈的方式,放入数据的是满栈的方式。入栈的方向是是减栈的方式,放入数据的是满栈的方式。入栈的方向是是增栈的方式,放入数据的是空栈的方式。入栈的方向是是减栈的方式,放入数据的是空栈的方式。3、出栈(看一下,出去的元素,所以和6一样)1、入栈:先放入输入,再移动栈顶指针。2、出栈:先移动栈顶指针,再数据弹出。1、入栈:先挪栈顶指针,再放入数据。2、出栈:先移出数据,再移动指针。

weixin_63722559的博客 1427

SpringBoot整合JWT实战:从零构建无状态认证系统,详解Token生成、验证与安全最佳实践

JWT在SpringBoot中的实现与应用 摘要:本文介绍了JWT(JSON Web Token)的基本概念、与Session机制的对比,以及SpringBoot项目中JWT的整合实现。JWT由Header、Payload和Signature三部分组成,具有无状态、跨域支持等优势。文章详细展示了如何在SpringBoot项目中配置JWT环境,封装JWT工具类来实现Token的生成、解析和验证功能,包括密钥管理、自定义声明、签名验证等核心操作。通过对比表格和生活化比喻,帮助读者理解JWT与传统Session的

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1773

数据结构——————栈

栈(Stack)是一种特殊的线性数据结构,其插入和删除操作都只允许在表的一端进行。这一端被称为栈顶(top),另一端则被称为栈底(bottom)。栈遵循后进先出(Last In First Out,LIFO)的规则,即最后存入的元素将被最先取出。顺序栈采用一个数组存放栈中的元素。如果需要用到两个类型相同的栈,这时若为它们各自开辟一个数组空间,极有可能出现这样的情况:第一个栈已满,再进栈就溢出了,而另一个栈还有很多空闲的存储空间。解决这个问题的方法是。

m0_66847953的博客 1381

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数据结构-栈及栈的应用

栈的概述 栈式一种重要的线性结构,属于一种操作受限的线性表 栈(stack) 是限定尽在表尾进行插入或删除操作的线性表 表尾端称为栈顶(top),表头端称为栈底(bottom) 栈的元素先进后出(后进先出),即最先进入栈的元素最后出栈 ...

初始化的博客 5106

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数据结构——栈

本文介绍了栈的基本概念和两种实现方式:顺序栈和链栈。主要操作包括压栈(插入)和出栈(删除)。顺序栈采用数组实现,具有高效尾部操作的优势;链栈则使用链表结构实现。最后通过一道有效的括号匹配算法题展示了栈的实际应用。理解栈的实现原理有助于掌握更复杂的数据结构,并为算法学习打下基础。

2401_88326089的博客 1119

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【数据结构】栈

什么是栈?栈:一种特殊的线性表其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈顶 栈底是什么,线性表又是什么?栈顶与栈底是不固定的,取决于你想在哪边操作。拿顺序表举例,若只在表尾增删,那表尾就是栈顶,相对的表头就是栈底。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈,出数据也在栈顶。因为栈一般是存储在堆上的,故栈的大小可以看作无穷大(取决于你的机器)。【数据结构】初阶——顺序表①为什么说栈是受限制的。

Kaisir777的博客 878

栈数据结构

栈是一种先进后出的数据结构,可以分为:顺序栈和链式栈 一、顺序栈 1、其结构如下图所示: 2、栈的基本操作,只有如下的五个 push( ) 入栈 pop( ) 出栈 empty( ) 是否为空 top( ) 返回栈顶元素 size( ) 返回栈中元素个数 swap() 交换 #include<iostream> #include<stack> ...

Jeffxu_lib的博客 2448

【数据结构】栈和队列——栈

本文介绍了栈和队列的基本概念与实现方式。主要内容包括: 栈的定义与特点:受限线性表,遵循先进后出(FILO)原则,仅允许在栈顶进行插入(push)和删除(pop)操作。 栈的存储结构:顺序栈(数组实现)和链式栈(链表实现),分析各自优缺点。 顺序栈的实现细节:包括静态和动态两种方式,重点说明栈顶指针的两种不同定义方式及其操作差异。 栈的基本操作:详细讲解入栈(Push)操作的实现逻辑,包括栈满判断、元素放置和指针更新等关键步骤。 文章通过代码示例展示了顺序栈的初始化、入栈和出栈操作,并特别强调了动态顺序栈的

m0_72516377的博客 962
上一篇: 数据结构之双向带头循环链表
下一篇: 数据结构之队列
沉着冷静2024
博客等级 码龄5年 669粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值