数据结构的概念大合集03(栈)
概念大合集03
- 1、栈
- 1.1 栈的定义和特点
- 1.2 栈的基础操作
- 1.3 栈的顺序存储
- 1.3.1 顺序栈
- 1.3.2 栈空,栈满,进栈,出栈的基本思想
- 1.3.3 共享栈
- 1.3.3.1 共享栈的4要素
- 1.4 栈的链式存储
- 1.4.1 链栈的实现
- 1.4.2 链栈的4个要素
1、栈
1.1 栈的定义和特点
栈是一种只能在一端进行插入或删除操作的线性表。在栈中,允许插入和删除操作的一端称为栈顶,另一端称为栈底。当栈为空时,称为空栈。栈的插入操作称为进栈或入栈,删除操作称为出栈退栈。
栈的特点是“后进先出”,即后进栈的元素先出栈,英文表示为“last in first out,即LIFO”
1.2 栈的基础操作
| 函数名 | 函数作用 |
|---|---|
| InitStack(&s) | 初识化线性表,构造一个空列表 |
| DestroyStack(&s) | 销毁线性表,释放为线性表L分配的内存空间 |
| StackEmpty(s) | 判断线性表是否为空表,若L为空表,则返回true,否则返回false |
| Push(&s,e) | 进栈,将元素e插入栈中作为栈顶元素 |
| Pop(&s,&e) | 出栈,从栈s中删除栈顶元素,并将其赋值给e |
| GetTop(s,&e) | 取栈顶元素,返回当前的栈顶元素,并将其赋值给e。 |
1.3 栈的顺序存储
1.3.1 顺序栈
同线性表一样,栈里面的元素也可以采用顺序存储结构,即分配一块连续的存储空间来存放栈中的元素,并用一个变量(例如top)指向当前的栈顶元素,以反映栈中元素的变化。这种采用顺序结构的栈称为顺序栈。

1.3.2 栈空,栈满,进栈,出栈的基本思想
- 栈空:s->top == -1。
- 栈满:s->top == MaxSize - 1 (data数组的最大下标)。
- 进栈:先将栈顶指针top增1,然后将元素e放在栈顶指针处。
- 出栈:现将栈顶指针top处元素取出放在e中,然后将栈顶指针减1.

1.3.3 共享栈
顺序栈的一种特殊表现形式,将两个类型相同的栈结合起来,这样可以避免栈溢出或内存浪费的情况。
在设计共享栈的时候,由于一个数组(大小为MaxSize)有两端点,两个栈有两个栈底,让一个栈的栈底为数组的是始端,即下表为0处,另一个栈的栈底的为数组的末端,即下表为MaxSize-1处,这样,在两个栈中进栈元素时,栈顶向中间伸展。

1.3.3.1 共享栈的4要素
- 栈空:栈1为空top == -1;栈2为空top2 == MaxSize。
- 栈满:top1 == top2-1。
- 进栈:栈1进栈top1++ ; data[top1] = x; ==> data[++top1] = x;
栈2进栈top-- ; data[top2] = x; ==> data[–top] = x; - 出栈:栈1出栈x = data[top1];top-- ; ==> x = data[top1–];
栈2出栈x = data[top2] ; top2++; ==> x = data[top2++];
1.4 栈的链式存储
即采用链式存储的栈称为链栈,但是与链表不同的是,链栈只有单链栈,不存在双链栈,所以将单链栈也直接称为链栈。
1.4.1 链栈的实现
采用带头结点的单链表来实现栈链
1.4.2 链栈的4个要素
- 栈空:s->next == NULL;
- 栈满:因为是链栈,只有在内存溢出的情况下,才会出现满栈的情况,所以一般情况不考虑;
- 进栈:新建一个结点存放元素e(由p指向它),将结点p插入头结点之后。
- 出栈:取出首结点的data值并将其删除
注:
本文将主要探讨栈的概念,其中提及的各个函数操作将在后续的文章中详细展示,敬请读者期待。
上一篇文章
数据结构的概念大合集02(线性表)
下一篇文章
数据结构的概念大合集04(队列)
相关文章:
数据结构的概念大合集03(栈)
概念大合集03 1、栈1.1 栈的定义和特点1.2 栈的基础操作1.3 栈的顺序存储1.3.1 顺序栈1.3.2 栈空,栈满,进栈,出栈的基本思想1.3.3 共享栈1.3.3.1 共享栈的4要素 1.4 栈的链式存储1.4.1 链栈的实现1.4.2 链栈的4个要素 1、栈 1.1 栈的定义和特…...
C++ 哈希表
目录 两数之和 面试题 01.02. 判定是否互为字符重排 存在重复元素 存在重复元素 II 字母异位词分组 两数之和 1. 两数之和 思路1:两层for循环 思路2:逐步添加哈希表 思路3:一次填完哈希表 如果一次填完,那么相同元素的值&…...
C++之继承详解
一.继承基础知识 继承定义: 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象 程序设…...
C#装箱和拆箱
一,装箱 装箱是指将值类型转化为引用类型。 代码如下: 装箱的内部过程 当值类型需要被装箱为引用类型时,CLR(Common Language Runtime)会为值类型分配内存,在堆上创建一个新的对象。值类型的数据会被复…...
企业用大模型如何更具「效价比」?百度智能云发布5款大模型新品
服务8万企业用户,累计帮助用户精调1.3万个大模型,帮助用户开发出16万个大模型应用,自2023年12月以来百度智能云千帆大模型平台API日调用量环比增长97%...从一年前国内大模型平台的“开路先锋”到如今的大模型“超级工厂”,百度智能…...
linux 外部GPIO Watchdog驱动适配
前言 文章描述, 利用外部gpio看门狗芯片驱动芯片的复位功能。 芯片:RK3568 平台: Linux ubuntu.lan 4.19.232 #27 SMP Sat Sep 23 13:43:49 CST 2023 aarch64 aarch64 aarch64 GNU/Linux 硬件接线图示 看门狗芯片采用GPIO喂狗,W…...
活动回顾 | 走进华为向深问路,交流数智办公新体验
3月20日下午,“企业数智办公之走进华为”交流活动在华为上海研究所成功举办。此次活动由上海恒驰信息系统有限公司主办,华为云计算技术有限公司和上海利唐信息科技有限公司协办,旨在通过对企业数字差旅和HR数智化解决方案的交流,探…...
【Java】Oracle发布Java22最新版本
甲骨文(ORACLE)已经于2023年3月19日正式发布了最新版本的JDK,版本号:22 根据官方声明,Java 22 (Oracle JDK 22) 在性能、稳定性和安全性方面进行了数千种改进,包括对Java 语言、其API 和性能,以…...
Vue reactive函数的使用
let searchForm reactive({}); let data reactive({ isAdmin: true, isshowAccount: true }); reactive 是什么? reactive 是 Vue 3 Composition API 中的一个函数,用于创建一个包含响应式数据的对象。在 Vue 2.x 中,我们通常使用 data 选项…...
unity自动引用生成
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using UnityEditor; using UnityEngine; using UnityEngine.UI;/// <summary> /// 模板脚本生成 /// </summary> public class ScriptCreater : EditorW…...
【Linux系统】线程互斥与同步
目录 一.几个概念 二.线程互斥 1.定义并初始化锁 2.加锁 3.解锁 4.销毁锁 三.互斥锁的本质 1.xchg的原子性 2.加锁的过程 3.解锁的过程 四.可重入VS线程安全 五.死锁 1.死锁的概念 2.具体实例 3.死锁产生的四个必要条件 4.解决或避免死锁 六.线程同步 七.…...
武汉星起航引领跨境电商新潮流,深耕亚马逊打造全方位合作新模式
在全球化的浪潮下,跨境电商已成为连接各国市场的重要桥梁,为无数企业带来了前所未有的发展机遇。在这一领域,武汉星起航电子商务有限公司以其独特的战略眼光和实战经验,成为引领行业发展的佼佼者。公司自2017年起便深耕亚马逊平台…...
GateWay路由规则
Spring Cloud GateWay 帮我们内置了很多 Predicates功能,实现了各种路由匹配规 则(通过 Header、请求参数等作为条件)匹配到对应的路由 1 时间点后匹配 server:port: 8888 spring:application:name: gateway-servicecloud:nacos:discovery:…...
shell脚本基础改造
一、基础的shell脚本格式 #!/bin/bash 2 #3 #********************************************************************4 #Author: LJH5 #QQ: 2…...
静态综合实验
一,1.搭建拓扑结构并启动。 2.根据题意得该图需要14个网段,根据192.168.1.0/24划分子网段,如下: 划分完如图所示: 二、配置IP地址 R1路由器: 1.进入系统视图并改名. 2.接口配置IP地址:…...
Spring Web MVC入门(6)
应用分层 在开发的过程中, 我们会发现, 程序的代码有时会很"杂乱", 如果后面的项目更大了, 那就会更加地杂乱无章(文件乱, 代码内容乱). 也基于此, 接下来让我们来学习一下应用分层. 也类似于公司的组织架构 公司初创阶段, 一个人身兼数职, 既做财务, 又做人事,还有…...
muduo异步日志
muduo异步日志实现 陈硕老师的muduo网络库的异步日志的实现,今晚有点晚了,我明晚再把这个异步日志抽出来,作为一个独立的日志库。 所在文件 AsyncLogging.cc AsyncLogging.h LogFile.h LogFile.cc CountDownLatch.h CountDownLatch.cc…...
在智慧能源的发展历程中,哪些技术的出现起到了关键性的作用?
智慧能源作为一种全新的能源发展理念,正逐渐成为能源领域的热门话题。在智慧能源的发展历程中,有许多技术的出现起到了关键性的作用,推动了智慧能源的快速发展。 一、物联网技术 物联网技术使得能源设备可以实现互联互通,通过传感…...
SQLiteC/C++接口详细介绍sqlite3_stmt类(十三)
返回:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(十二) 下一篇: 待续 51、sqlite3_stmt_scanstatus_reset sqlite3_stmt_scanstatus_reset 函数用于重置指定语句对象最近一次执行的 WHER…...
扫雷(蓝桥杯,acwing)
题目描述: 扫雷是一种计算机游戏,在 2020 世纪 80 年代开始流行,并且仍然包含在某些版本的 Microsoft Windows 操作系统中。 在这个问题中,你正在一个矩形网格上玩扫雷游戏。 最初网格内的所有单元格都呈未打开状态。 其中 M个…...
Akagi:终极雀魂AI辅助工具完整使用指南
Akagi:终极雀魂AI辅助工具完整使用指南 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amatsuki, with the …...
Git与GitHub:深入理解版本控制与代码托管
Git与GitHub:深入理解版本控制与代码托管 引言 在软件开发领域,版本控制和代码托管是至关重要的环节。Git和GitHub作为当前最流行的版本控制工具和代码托管平台,已经成为广大开发者必备的技能。本文将深入探讨Git和GitHub的基本概念、使用方法以及它们在软件开发中的重要性…...
手把手教你用CAPL脚本精准测量UDS 0x11复位服务的执行时间(附完整代码)
手把手教你用CAPL脚本精准测量UDS 0x11复位服务的执行时间(附完整代码) 在汽车电子控制单元(ECU)的开发与验证过程中,精确测量诊断服务的执行时间是确保系统性能达标的关键环节。UDS(Unified Diagnostic Se…...
Dify2OpenAI:无缝对接Dify工作流与OpenAI API的实战指南
1. 为什么需要Dify2OpenAI? 如果你正在使用Dify平台开发AI应用,可能会遇到一个头疼的问题:Dify原生API返回的数据格式与OpenAI标准不兼容。这意味着你辛苦开发的聊天机器人、工作流应用,无法直接接入市面上主流的AI客户端工具。我…...
基于Docker的NextCloud与OnlyOffice无缝集成方案
1. 为什么需要NextCloud与OnlyOffice集成 如果你正在寻找一套私有化的协同办公解决方案,NextCloudOnlyOffice的组合绝对值得考虑。NextCloud作为开源的云存储平台,提供了文件管理、日历、联系人等基础功能,而OnlyOffice则是功能强大的在线文档…...
ClearerVoice-Studio从零开始:无GPU服务器上CPU模式语音增强配置指南
ClearerVoice-Studio从零开始:无GPU服务器上CPU模式语音增强配置指南 1. 引言:为什么你需要一个无GPU的语音处理工具? 想象一下这个场景:你有一段重要的会议录音,但背景里混杂着空调的嗡嗡声、键盘的敲击声ÿ…...
Ansoft Maxwell 永磁同步直线电机仿真项目分析
永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极 包括图中模型以及一个仿真设置要点word文档教程项目概述 本文档详细分析了一个基于Ansoft Maxwell 16.0的永磁同步直线电机(Permanent Magnet Synchronous Linear Motor)仿真项目。该项目采用12槽11极…...
10_TiDB AI生态集成与行业实践案例
10_TiDB AI 生态集成与行业实践案例 标签: TiDB AI生态 LangChain RAG实践 行业案例 Django SQLAlchemy 关键词: TiDB AI生态、LangChain集成、LlamaIndex集成、Django TiDB、SQLAlchemy向量、行业实践案例、知识库问答、智能客服、TiDB.AI、GraphRAG、…...
SNN系列|学习算法篇(7)STDP变体与神经调制融合机制
1. STDP学习规则的核心原理与生物基础 脉冲时序依赖可塑性(STDP)是大脑中突触可塑性的重要机制之一,它通过调整突触前后神经元脉冲的相对时间来改变突触强度。想象一下两个小朋友在玩传球游戏——如果A小朋友总是在B小朋友准备接球前恰到好处…...
【ENSP实战】VLAN间通信的VLANIF三层路由配置详解(HCIA)
1. 为什么需要VLAN间通信? 在企业网络中,不同部门往往需要划分到不同的VLAN中。比如财务部在VLAN 10,市场部在VLAN 20,这是为了安全和管理方便。但问题来了:财务部有时候需要和市场部共享文件,这时候就需要…...
