数据结构速成--栈

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

目录

一、栈的基本概念

二、栈的存储结构

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.rhkb.cn/news/312080.html

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

相关文章

基于微信小程序投票评选系统的设计与实现(论文+源码)_kaic

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。所以各大互联网厂商都瞄准移动互联网这个潮…

Vue3(四):组件通信详解(九种方法)

主要有九种方法,以下是详细解释及使用方法: 1.props props实现父子间的通信,是使用频率最高的。 (1)父传子:属性值是非函数。 以Father.vue和Child.vue 为例。 父组件中,引入子组件并给子组…

实战 K8s ConfigMap:打造动态可配置的云原生应用

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、k8s简介 2、ConfigMap简介 二、Con…

【每日刷题】Day16

【每日刷题】Day16 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 24. 两两交换链表中的节点 - 力扣(LeetCode) 2. 160. 相交链表 - 力扣&…

xcode c++项目设置运行时参数

在 Xcode 项目中,你可以通过配置 scheme 来指定在运行时传递的参数。以下是在 Xcode 中设置运行时参数的步骤: 打开 Xcode,并打开你的项目。在 Xcode 菜单栏中,选择 "Product" -> "Scheme" -> "E…

一次配置Docker环境的完整记录

一次配置Docker环境的完整记录 Docker环境搭建报错与解决报错一报错二报错三 Docker环境搭建 本节介绍了一次配置docker环境的完整记录: 编写Dockerfile文件: FROM pytorch/pytorch:1.10.0-cuda11.3-cudnn8-develRUN rm /etc/apt/sources.list.d/cuda.l…

LeetCode 409—— 最长回文串

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 要想组成回文串,那么只有最中间的字符可以是奇数个,其余字符都必须是偶数个。 所以,我们先遍历一遍字符串,统计出每个字符出现的次数。 然后如果某个字符出现了偶…

C++string类(个人笔记)

string类 1.认识string的接口以及熟练使用常用接口1.1string类对象的常见构造1.2string类对象的容量操作1.3string类对象的访问及遍历操作1.4string类对象的修改操作 2.vs 和g下string结构的说明3.string类运用的笔试题4.string类的模拟实现 1.认识string的接口以及熟练使用常用…

使用 Docker 部署 SurveyKing 调查问卷系统

1)SurveyKing 介绍 SurveyKing 是一款功能强大、操作简便的开源问卷系统。它不仅满足了用户对问卷调查的基本需求,还提供了丰富的逻辑设置和灵活的问题设置,使得问卷制作更加智能化和个性化。此外,SurveyKing 还具有快速部署和安全…

【从浅学到熟知Linux】进程控制下篇=>进程程序替换与简易Shell实现(含替换原理、execve、execvp等接口详解)

🏠关于专栏:Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 🎯每天努力一点点,技术变化看得见 文章目录 进程程序替换什么是程序替换及其原理替换函数execlexeclpexecleexecvexecvpexecvpeexecve 替换函数总结实现…

深入剖析跨境电商平台风控机制,探索测评安全与稳定的秘诀

在跨境电商测评市场鱼龙混杂的当下,测评过程中可能隐藏的陷阱保持高度警觉。多年的测评经验告诉我们,选择一个适合的测评系统对于项目的成功至关重要。近年来,测评技术如雨后春笋般涌现,市场上涌现出众多测评系统,覆盖…

配置路由器实现互通

1.实验环境 实验用具包括两台路由器(或交换机),一根双绞线缆,一台PC,一条Console 线缆。 2.需求描述 如图6.14 所示,将两台路由器的F0/0 接口相连,通过一台PC 连接设备的 Console 端口并配置P地址(192.1…

计算机网络的七层模型

序 OSl(Open System Interconnect),即开放式系统互联。一般都叫OSI参考模型。在网络编程中最重要的模型就是OSI七层网络模型和TCP/IP四层网络模型 一、OSI七层参考模型以及功能概述 二、各层的具体职能以及实际应用 1.应用层: OSI参考模型中最接近用…

官方助力:SpringAI快速尝鲜体验(SpringBoot3+Gradle8+JDK17)

SpringAI 自从OpenAI的ChatGPT爆火之后,各种AI大模型开始席卷互联网,作为知名框架的Spring官方也是小小的顺应了一波潮流,就在不久前官方推出了针对AI的部分,称为SpringAI目前最新版本为0.8.1,下面是官网的截图。 直通车https:/…

实验一:配置IP地址

1.实验环境 主机A和主机B通过一根网线相连 2.需求描述 为两台主机配置IP地址,验证IP地址是否生效,验证 同一网段的两台主机可以互通,不同网段的主机不能 直接互通 3.推荐步骤 1. 为两台主机配置P地址,主机A为10.0.10.10&#…

开发工人员必备的XCheck代码检测工具

Xcheck(Application Security Development,应用安全开发),是一款由腾讯纯自研的静态代码分析工具,它是一款致力于检查 Web 类风险的 SAST(Static Application Security Testing,静态代码分析&am…

聚生态 智算兴,超聚变的行业生态之“变”

千帆竞发浪潮涌,独领风骚显英豪。当前,在算力基础设施市场,竞争正日趋白热化。一方面,企业数字化转型走向深入,对算力产生了更加迫切的需求;另一方面,以大模型为代表的AI技术的快速发展与落地应…

十大排序——7.希尔排序

下面我们来看一下希尔排序 目录 1.介绍 2.代码实现 3.总结与思考 1.介绍 希尔排序是插入排序的一种优化,可以理解为是一种分组的插入排序。 希尔排序的要点: 简单来说,就是分组实现插入,每组元素的间隙称为gap,…

【日常记录】【CSS】利用动画延迟实现复杂动画

文章目录 1、介绍2、原理3、代码4、参考链接 1、介绍 对于这个效果而言,最先想到的就是 监听滑块的input事件来做一些操作 ,但是会发现,对于某一个节点的时候,这个样式操作起来比较麻烦 只看这个代码的话,发现他用的是动画&#x…

Java工程师常见面试题:Java基础(一)

1、JDK 和 JRE 有什么区别? JDK是Java开发工具包,它包含了JRE和开发工具(如javac编译器和java程序运行工具等),主要用于Java程序的开发。而JRE是Java运行环境,它只包含了运行Java程序所必须的环境&#xf…