数据结构速成--栈

        由于是速成专题,因此内容不会十分全面,只会涵盖考试重点,各学校课程要求不同 ,大家可以按照考纲复习,不全面的内容,可以看一下小编主页数据结构初阶的内容,找到对应专题详细学习一下。 

目录

一、栈的基本概念

二、栈的存储结构

1. 顺序栈的实现

2. 顺序栈的基本实现

2.1 初始化

2.2 判断栈空

2.3 数据进栈

2.4 数据出栈

3. 共享栈

4. 栈的链式存储结构

三、栈的使用场景


一、栈的基本概念

        栈是只允许在一端进行插入或删除操作的线性表。限定这种线性表只能在某一端进行插入和删除操作。栈操作的特性是后进先出。
        栈顶:线性表允许进行插入删除的那一端。
        栈底:不允许进行插入和删除的另一端。
        空栈:不含任何元素的空表。

        n个不同元素进栈,出栈元素不同排列的个数为\frac{1}{n+1}C_{2n}^{n}。 

        第一部分大家记清楚栈只能从栈顶插入和删除,以及后进先出的特性,还要知道出栈种类计算。 

二、栈的存储结构

        栈是一种操作受限的线性表,类似于线性表,它也有对应的两种存储方式。

1. 顺序栈的实现

        采用顺序存储的栈称为顺序栈,它利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针top指向当前栈顶元素的位置。

#define MaxSize 50 //定义栈中元素的最大个数
typedef struct{ElemType data[MaxSize]; //存放栈中元素int top; //栈顶指针
}SqStack;

2. 顺序栈的基本实现

2.1 初始化

void InitStack(SqStack &S){S.top=-1; //初始化栈顶指针
}

2.2 判断栈空

bool StackEmpty(SqStack S){if(S.top==-1) //栈空return true;else //不空return false;
}

2.3 数据进栈

bool Push(SqStack &S,ElemType x){if(S.top==MaxSize-1) //栈满,报错return false;S.data[++S.top]=x; //指针先加1,再入栈(注意顺序)return true;
}

2.4 数据出栈

bool Pop(SqStack &S,ElemType &x){if(S.top==-1) //栈空,报错return false;x=S.data[S.top--]; //先出栈,指针再减1(注意顺序)return true;
}

例:入栈序列为1,2,3,4,5,则出栈序列不可能为(     )

A. 4 3 5 1 2              B. 5 4 3 2 1              C. 4 5 3 2 1             D. 1 2 3 4 5

        本道题选A。这类题是栈最常考的题目,想要做好这种题一定要记住栈后进先出的特性。最简单的就是B,1 2 3 4 5一口气全都进栈,然后依次出栈,故B正确。对于C,1 2 3先入栈,4入栈后立刻出栈,然后5再入栈也立即出栈,最后1 2 3再出栈,就是4 5 3 2 1,故C正确。对于D很明显就是进一个元素,这个元素就立即出栈,故D正确。而A,1 2先进栈,3 4入栈后立即出栈才会是4 3开头,5入栈后立即出栈,所以前3位是4 3 5,但是1 2出栈只能是2 1,故A错误。:

3. 共享栈

        利用栈底位置相对不变的特性,可让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸。

        共享栈是为了更有效的利用存储空间,两个栈的空间相互调节,只有在整个存储空间被占满时才发生上溢,有利于减少上溢发生。 

4. 栈的链式存储结构

        采用链式存储的栈称为链栈,链栈的优点是便于多个栈共享存储空间和提高其效率,且不存在栈满上溢的情况。通常采用单链表实现,并规定所有操作都是在单链表的表头进行的。这里规定链栈没有头结点, Lhead指向栈顶元素。

typedef struct LinkNode{ElemType data;struct LinkNode *next;
}*LiStack;

         第二部分大家主要掌握顺序栈栈空/满的条件,给出的例题非常重要。

三、栈的使用场景

        栈能适用于递归算法,表达式求值以及括号匹配等问题中。 

        第三部分就一句话,三种场景大家记一下,后面两个最常出现!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/822572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb--前端--03Vue入门

Vue入门 1 Vue概述2 快速入门3 Vue指令3.1 v-bind和v-model3.2 v-on3.3 v-if和v-show3.4 v-for3.5 案例 4 生命周期 1 Vue概述 个完整的html页面包括了视图和数据,数据是通过请求 从后台获取的,那么意味着我们需要将后台获取到的数据呈现到页面上&#…

OSPF - 链路状态路由协议

IGP 外部网关路由协议: OSPF , IS-IS EGP 内部网关路由协议: BGP 协议算法: 距离矢量路由协议 链路状态路由协议 lsdb:链路状态数据库 - 存放lsa的地址 RIP:有方向的矢量,距离矢量路由协议&#xf…

PHP-extract变量覆盖

[题目信息]: 题目名称题目难度PHP-extract变量覆盖1 [题目考点]: 变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击。 经常导致变量覆盖漏洞场景有:$$&#x…

最前沿・量子退火建模方法(2) : Domain wall encoding讲解和python实现

前言 上篇讲的subQUBO属于方法论,这次讲个通过编码量子比特的方式,同样的约束条件,不同的编码,所需的量子比特数是不同的。有的编码方式,很节省量子比特。比如,这次要讲的Domain wall encoding。 一、Doma…

Vue.js前端开发零基础教学(六)

学习目标 了解什么是路由,能够说出前端后端路由的原理 掌握多种路由的使用方法,能够实现路由的不同功能 掌握Vue Router的安装及基本使用方法 5.1 初始路由 提到路由(Route),一般我们会联想到网络中常见的路由器(Router),…

CSS3 max/min-content及fit-content、fill-available值的详解

c3中对width的值多了几个值&#xff1a;fill-available, max-content, min-content, 以及fit-content。 1.width:fill-available 我们在页面中扔一个没有其他样式的<div>元素&#xff0c;则&#xff0c;此时&#xff0c;该<div>元素的width表现就是fill-availabl…

杰理-701-更换字库

杰里-701-更换字库显示 工具&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1yMDatiRCaJj2ioKXF-H8GQ 把使用的字库文件放进该目录下 生成后的字库文件需要修改名称 把修改好名称的字库文件放到该目录下替换 代码,把所有语言的PIX修改未新替换的字库文件&#xff08;保…

00_Qt概述以及如何创建一个QT新项目

Qt概述 1.Qt概述1.1 什么是Qt1.2 Qt的发展史1.3 支持的平台1.4 Qt版本1.5 Qt的下载与安装1.6 Qt的优点 2.QT新项目创建3.pro文件4.主函数5.代码命名规范和快捷键 1.Qt概述 1.1 什么是Qt Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面…

机器人视觉软件实现目标检测通常借助深度学习技术和计算机视觉算法

机器人视觉软件实现目标检测通常借助深度学习技术和计算机视觉算法。以下是一般而言的目标检测实现步骤&#xff1a; 1、数据收集与标注&#xff1a;首先需要收集包含目标物体的大量图像数据&#xff0c;并对这些图像进行标注&#xff0c;标注出目标物体的位置和类别信息。这些…

一篇安装配置ubuntu22.04(步骤详细,配置成功)

一篇配置ubuntu22.04(步骤详细&#xff0c;配置成功) 官网下载相应的镜像 vitualbox安装ubuntu 新建虚拟机 第一步 第二步 第三步、按需分配内存、处理器个数、磁盘大小 第四步、一直下一步直至完成 配置虚拟机网络 第一步、先停止虚拟机 第二步、设置虚拟机网络 正常启…

【C++】一篇文章带你深入了解vector

目录 一、vector的介绍二、 标准库中的vector2.1 vector的常见接口说明2.1.1 vector对象的常见构造2.1.1.1 [无参构造函数](https://legacy.cplusplus.com/reference/vector/vector/vector/)2.1.1.2 [有参构造函数&#xff08;构造并初始化n个val&#xff09;](https://legacy.…

Advanced RAG 03:运用 RAGAs 与 LlamaIndex 评估 RAG 应用

编者按&#xff1a;目前&#xff0c;检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;RAG&#xff09;技术已经广泛使用于各种大模型应用场景。然而&#xff0c;如何准确评估 RAG 系统的性能和效果&#xff0c;一直是业界和学界共同关注的重点问题。若无法…

设计模式之状态模式(下)

3&#xff09;共享状态 1.概述 在某些情况下&#xff0c;多个环境对象可能需要共享同一个状态&#xff0c;如果希望在系统中实现多个环境对象共享一个或多个状态对象&#xff0c;那么需要将这些状态对象定义为环境类的静态成员对象。 2.案例 背景&#xff1a;要求两个开关对…

前端-vue项目debugger调试

一、前言 有的时候接受同事一个项目&#xff0c;用框架不一样&#xff0c;写的也不太规范&#xff0c;那么就需要打断点去学习改项目的流程了。 那么vue项目是如何debugger调试呢&#xff1f; 二、操作 大概理解一下&#xff0c;vue项目启动&#xff0c;大概是先启动框架&am…

高效进行文件夹批量改名,轻松实现英文到中文的翻译,让你的文件夹管理更高效!

在数字化时代&#xff0c;我们每天都在与无数的文件夹打交道。而管理这些文件夹&#xff0c;尤其是为它们命名&#xff0c;往往成为一项繁琐而耗时的任务。尤其是当文件夹名以英文命名时&#xff0c;对于非英语用户来说&#xff0c;理解和记忆都可能会成为一道难题。那么如何翻…

HarmonyOS4-数据持久化

轻量级preferences&#xff1a; 关系型数据库&#xff1a; 增删改&#xff1a; 查询语句&#xff1a; 具体详情代码可参与源码&#xff1a; 黑马大佬写的。 harmonyos-lessons: 黑马程序员B站HarmonyOS课程的基础篇代码部分

C语言学习/复习20

一、调试 1.实例1&#xff1a; 经调试&#xff0c;该代码因数组越界会死循环 二、优秀的代码 注意事项&#xff1a;assert()返回真假并决定是否报错 常量指针本质是指针&#xff0c;常量修饰它&#xff0c;表示这个指针是一个指向常量的指针&#xff08;变量&#xff09…

MySQL 基础使用

文章目录 一、Navicat 工具链接 Mysql二、数据库的使用1.常用数据类型2. 建表 create3. 删表 drop4. insert 插入数据5. select 查询数据6. update 修改数据7. delete 删除记录truncate table 删除数据 三、字段约束字段1. 主键 自增delete和truncate自增长字段的影响 2. 非空…

Tomcat 获取客户端真实IP X-Forwarded-For

Tomcat 获取客户端真实IP X-Forwarded-For 代码实现&#xff1a; 在Host标签下面添加代码&#xff1a; <Valve className"org.apache.catalina.valves.RemoteIpValve" remoteIpHeader"x-forwarded-for" remoteIpProxiesHeader"x-forwarded-by&q…