学习数据结构第6天(栈的基本概念)
栈的基本概念
- 栈的定义
- 栈的基本操作
- 栈的存储结构
栈的定义
栈(Stack)是一种基于先进后出(FILO)或者后进先出(LIFO)的数据结构,是一种只允许在一端进行插入和删除操作的特殊线性表。
栈按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。我们称数据进入到栈的动作为压栈(入栈),数据从栈中出去的动作称为弹栈(出栈)。

栈顶(TOP):线性表允许进行插入删除的那一端。
栈底(Bottom):固定的,不允许进行插入和删除的另一端。
空栈:不含任何元素的空表。
栈的基本操作
InitStack(&S):初始化一个空栈S。
StackEmpty(&S):判断一个栈是否为空,若栈S为空则返回True,否则返回False。
Push(&S):进栈,若栈S未满,则将x加入是之成为新栈顶。
Pop(&S):出栈,若栈S非空,则弹出栈顶元素,并用x返回。
GetTop(&S):读栈顶元素,若栈S非空,则用x返回栈顶元素。
DestroyStack(&S):销毁栈,并释放S占用的存储空间
以上可以看成是一个栈的框架,上面的函数也可以直接进行相应的使用。
栈的存储结构
栈是一种操作受限的线性表,类似于线性表,它也有对应的两种存储方式:顺序存储、链式存储。
- 顺序栈
采用顺序存储的栈称为顺序栈,使用数组进行实现。
在实现顺序栈之前,我们先来看一看对于顺序栈的操作:

顺序栈可以使用一维数组实现,base指针指向栈底(数组的第0个元素),top指针是动态的,每次都指向栈顶元素(最后一个放入栈中的元素),因此,我们将base指针称之为:栈底指针,将top指针称之为栈顶指针。
在实现进栈操作的时候,栈不满时,栈顶指针先加1,再送值到栈顶元素;实现出栈操作的时候,栈非空,则先取栈顶元素值,再将栈顶指针减1。
- 链栈
采用链式存储的栈称为链栈,使用链表进行相应的实现。
链栈中通常采用单链表实现,并规定所有的操作都在单链表的表头进行的,但是与之前所学的链表不同的是:链式栈中不需要头结点(数据域为空的结点)。

指向链表中的第一个结点的指针就是栈顶指针,指向链表最后一个结点的指针就是栈底指针。采用链式存储,便于结点的插入与删除,同链表的操作类似,入栈和出栈都是在表头进行。
相关文章:
学习数据结构第6天(栈的基本概念)
栈的基本概念 栈的定义栈的基本操作栈的存储结构 栈的定义 栈(Stack)是一种基于先进后出(FILO)或者后进先出(LIFO)的数据结构,是一种只允许在一端进行插入和删除操作的特殊线性表。 栈按照先进后出的原则存储数据,先进入的数据被压入栈底,最…...
自动化添加时间戳版本号
自动化添加时间戳版本号 前言一、静态资源二、版本号的来源三. 版本信息的位置四. 添加时间戳版本号1. 手动添加2. 自动化生成 前言 软件开发和发布过程中,版本是个极其重要的因素。大至操作系统,小到功能组件,都会涉及到版本相关的问题。 …...
【C语言】指针进阶[上] (字符、数组指针、指针数组、数组传参和指针传参)
简单不先于复杂,而是在复杂之后。 目录 1. 字符指针 面试题 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名 VS 数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二…...
软件测试外包干了4年,感觉废了..
先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...
ai改写句子软件-ai改写
AI免费伪原创:助力网站内容升级 您是否曾经为网站优化而烦恼,无论是内容更新还是SEO优化,都需要大量的时间和精力。但是,您是否知道,现在有一款能够使用AI技术来帮助您完成这些任务,而且还是免费的呢&…...
zabbix监控linux主机
1.本实验使用centos7主机,IP地址为10.1.60.115,firewalld和selinux服务已关闭 2.下载zabbix yum源(与zabbix server用一样的版本) rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm 3.安装zabbix客户…...
编程中泛型的使用规则和限制是什么?
泛型是一种程序设计风格,它允许程序员在编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。泛型主要用于实现通用的数据结构,例如集合、映射、列表等,使得这些数据结构可以存储多种类型的元素。 在泛型使用之…...
【工具】使用VS Code调试Docker Container中的代码
目录 使用VS Code调试Docker Container中的Autoware.ai代码第一种方法 -- 在VS Code中进行DebugStep1Step2Step3Step4c_cpp_properties.jsonlaunch.jsonsettings.jsontask.json Step5Step6Step7参考链接 第二种方法 -- cmake重新编译cmake使用方法(简介)…...
ZVL3网络分析仪
ZVL3 Rohde&Schwarz ZVL3 3G矢量网络分析仪|罗德与施瓦茨 9KHz至3GHz 罗德与施瓦茨Rohde&Schwarz 性能特点: 频率范围 9kHz至3GHz/6 GHz(典型值为5kHz) 测量时间(201个测量点,以校准的双端口) <75ms 数据传输(201个测量点) 在100Mbit/sLAN…...
TCP协议
传输层(协议) TCP协议 三次握手协议保证连接建立 四次挥手,利用这个协议断开连接,而且保证连接通道里面数据已经处理完毕 客户端(Socket): 1、创建客户端的Socket对象(Socket)与指…...
69. x 的平方根
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 1࿱…...
Webshell应急响应指南
Webshell应急响应指南 1.Webshell 排查2.入侵时间确定3.Web日志分析4.漏洞分析5.漏洞复现6.清除Webshell并修复漏洞7.Webshell 防御方法1.Webshell 排查 可利用 Webshell 扫描工具(如 D 盾,河马)对应用部署目录进行扫描,如网站D:\WWW\目录 或者将当前网站目录文件与此前备…...
Linux如何定时执行任务
目录 crontab 介绍 安装crontab 服务操作说明 操作案例 crontab 介绍 Linux crontab是采用定期执行程序的命令,当安装完成操作 系统后,默认便会启动此任务调度命令,crond命令每分钟都会定期检查是否要执行任务的工作,如果要执…...
使用nvm替换nvmw作为nodejs的版本切换(亲测)
之前的文章:同时使用vue2.0和vue3.0版本的采坑记录 安装的nvmw,今天想要用nvmw切换时,居然给我报错了: 然后我就走上了使用nvm替换nvmw之路。。 1.安装 nvm-windows下载 下载release版 中Assets中的包,window10&…...
分布式事务
数据库事务 Atomicity 原子性 某个操作,要么全部执行完毕,要么全部回滚 Consistency 一致性 数据库中的数据全都符合现实世界的约束,则这些数据就符合一致性。 比如性别约束男or女,人名币面值不能为负数;出生地址不能…...
zk111111111111111111
Zookeeper 1 zookeeper(作为 dubbo 的注册中心): 概述: zookeper 是 一个分布式的、开源的分布式应用程序的协调服务,管理分布式应 用 作用: 配置管理,分布式锁,集群管理 2 zookeeper 的安装 (dubbo 的资料中已经整理) 3 zookeeper 的数据模型 zookeeper 是一个树形的服…...
018:Mapbox GL加载Google地图(影像瓦片图)
第018个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载google地图。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共80行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://xia…...
Web API 和 API 的区别编写api
编写api 自从Roy Fielding博士在2000年他的博士论文中提出(Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨重的SOAP,成为Web API的标准了。 什么是Web API呢? 1. Web API 和…...
IDEA 用上这款免费 GPT4 插件,生产力爆表了
大家好,我是一航! 早前给大家分享过GPT的一些玩法,但是依旧有很多铁子没有掌握魔法的奥秘,始终没有用上;前两天,一兄台分享给我一款 IDE 插件:Bito-ChatGPT ,安装就能直接在IDE中使…...
1187.使数组严格递增 学习记录
题目描述 给你两个整数数组 arr1 和 arr2,返回使 arr1 严格递增所需要的最小「操作」数(可能为 0)。 每一步「操作」中,你可以分别从 arr1 和 arr2 中各选出一个索引,分别为 i 和 j,0 < i < arr1.l…...
Airtable MCP服务器:AI与数据协作的自动化新范式
1. 项目概述:当Airtable遇上MCP,数据协作的自动化新范式 如果你和我一样,日常工作中重度依赖Airtable来管理项目、追踪任务、甚至搭建轻量级的业务系统,那你一定也遇到过这样的痛点:数据是活的,但流程是死…...
基于Terraform与Azure的Dify AI平台云原生自动化部署实践
1. 项目概述:一键部署AI应用平台的云原生方案最近在折腾AI应用开发平台,发现很多团队在从本地原型验证转向云端生产环境时,总会遇到一堆“部署地狱”的问题。环境配置不一致、资源管理混乱、成本不可控,这些问题在需要整合多个AI模…...
SpringBoot+Vue民宿管理系统源码+论文
代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择: 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...
容器化应用分发平台seait:简化部署流程,实现一键运行
1. 项目概述:一个面向开发者的容器化应用分发平台最近在折腾个人项目部署和团队协作时,我一直在思考一个问题:如何能像分发一个可执行文件一样,轻松地分享和运行一个完整的、包含所有依赖的应用程序?尤其是在跨平台、跨…...
【限时开放】Midjourney未来主义风格权威认证路径:完成这5个里程碑任务,获取由Adobe+MJ Labs联合签发的Futurism Prompt Architect证书
更多请点击: https://intelliparadigm.com 第一章:【限时开放】Midjourney未来主义风格权威认证路径:完成这5个里程碑任务,获取由AdobeMJ Labs联合签发的Futurism Prompt Architect证书 什么是未来主义Prompt架构师认证…...
Mastra AI编排框架:构建生产级智能工作流的完整指南
1. 项目概述:一个面向开发者的AI应用编排框架最近在折腾AI应用开发的朋友,估计都绕不开一个核心痛点:如何把不同的AI模型、工具和数据源高效地串联起来,形成一个稳定、可维护的智能工作流。无论是想做个智能客服,还是搞…...
LLM赋能网页抓取:基于ChatGPT的智能数据提取实战指南
1. 项目概述与核心价值最近在数据采集和自动化领域,一个名为“oxylabs/chatgpt-web-scraping”的项目引起了我的注意。乍一看,这像是把两个热门概念——大型语言模型(LLM)和网页抓取(Web Scraping)——强行…...
中文文本人性化:从NLP原理到cn-humanizer工程实践
1. 项目概述:为什么我们需要一个中文“人性化”工具?在数字时代,我们与机器生成的文本打交道的机会越来越多。无论是AI助手生成的回复、自动化脚本输出的日志,还是数据清洗后得到的报告,这些文本常常带着一种难以言喻的…...
开源清理工具OpenClearn:透明可控的数字垃圾管理方案
1. 项目概述:一个开源的“清洁工”如何重塑你的数字生活如果你和我一样,是个在数字世界里摸爬滚打了十几年的老鸟,那你电脑里肯定也有一堆“数字垃圾”。这些垃圾不是指那些过时的文件,而是那些你明明已经删除了,但操作…...
从田野笔记到理论建模,NotebookLM政治学辅助全流程拆解,含6类典型误用场景避坑指南
更多请点击: https://intelliparadigm.com 第一章:从田野笔记到理论建模:NotebookLM政治学辅助全流程概览 NotebookLM 作为 Google 推出的基于用户上传文档进行深度语义理解的 AI 助手,正逐步成为政治学研究者处理非结构化文本的…...
