数据结构历年考研真题对应知识点(栈)

news2024/11/26 8:28:10

目录

3.1栈

3.1.1栈的基本概念

【栈的特点(2017)】

【入栈序列和出栈序列之间的关系(2022)】 

【特定条件下的出栈序列分析(2010、2011、2013、2018、2020)】

3.1.2栈的顺序存储结构

【出/入栈操作的模拟(2009)】


3.1栈

3.1.1栈的基本概念

栈的特点(2017)】

栈(Stack)是只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。

栈顶(Top)。线性表允许进行插入删除的那一端
栈底(Bottom)。固定的,不允许进行插入和删除的另一端。
空栈。不含任何元素的空表。 

每接触一种新的数据结构,都应从其逻辑结构、存储结构和运算三个方面着手。

入栈序列和出栈序列之间的关系(2022)】 

特定条件下的出栈序列分析(2010、2011、2013、2018、2020)】

假设某个栈S=(a1, a2, a3, a4,a5),如图 3.1 所示,则 a1 为栈底元素,a5为栈顶元素。

栈只能在栈顶进行插入和删除操作,进栈次序依次为a1,a2,a3,a4,a5,而出栈次序为 a5,a4,a3,a2,a1。

由此可见,栈的操作特性可以明显地概括为后进先出(Last In First Out,LIFO)。

3.1.2栈的顺序存储结构

出/入栈操作的模拟(2009)】

栈操作的示意图如图 3.2 所示,图 3.2(a)是空栈,图 3.2(c)是A、B、C、D、E共5个元素依次入栈后的结果,图 3.2(d)是在图 3.2(c)之后E、D、C的相继出栈,此时栈中还有2个元素,或许最近出栈的元素 C、D、E仍在原先的单元存储着,但 top 指针已经指向了新的栈顶,元素 C、D、E已不在栈中,读者应通过该示意图深刻理解栈顶指针的作用。

下面是顺序栈上常用的基本操作实现: 

(1)初始化

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

(2)判栈空

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

(3)进栈

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

(4)出栈

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

(5)读取栈顶元素

bool GetTop(SqStack S,ElemType &x){
    if(S.top==-1) //栈空,报错
        return false;
    x=S.data[S.top];//x记录栈顶元素
    return true;
}

仅为读取栈顶元素,并没有出栈操作,因此原栈顶元素依然保留在栈中。

注意:

这里的 top 指的是栈顶元素。于是,进栈操作为 S.data[++S.top]=x,出栈操作为x=S.data[S.top--]。若栈顶指针初始化为S.top=0,即 top 指向栈顶元素的下一位置,则入栈操作变为S.data[S.top++]=x;出栈操作变为x=S.data[--S.top]。相应的栈空栈满条件也会发生变化。

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

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

相关文章

嵌入式linux系统中LCD屏驱动实现思路分析

在 Linux 下 LCD 的使用更加广泛,在搭配 QT 这样的 GUI 库下可以制作出非常精美的 UI 界面。接下来就来学习一下如何在 Linux 下驱动 LCD 屏幕。 第一:Framebuffer设备简介 先来回顾一下裸机的时候 LCD 驱动是怎么编写的,裸机 LCD 驱动编写流程如下: ①、初始化 I.MX6U 的…

NeRF从入门到放弃4: NeuRAD-针对自动驾驶场景的优化

NeuRAD: Neural Rendering for Autonomous Driving 非常值得学习的一篇文章,几乎把自动驾驶场景下所有的优化都加上了,并且也开源了。 和Unisim做了对比,指出Unisim使用lidar指导采样的问题是lidar的垂直FOV有限,高处的东西打不…

一年前 LLM AGI 碎片化思考与回顾系列⑦ · 在SystemⅡ未知之境之中徘徊

阅读提示: 本篇系列内容的是建立于自己过去一年在以LLM为代表的AIGC快速发展浪潮中结合学术界与产业界创新与进展的一些碎片化思考并记录最终沉淀完成,在内容上,与不久前刚刚完稿的那篇10万字文章「融合RL与LLM思想,探寻世界模型以…

02--MySQL数据库概述

目录 第10章 子查询 10.1 SELECT的SELECT中嵌套子查询 10.2 SELECT的WHERE或HAVING中嵌套子查询 10.3 SELECT中的EXISTS型子查询 10.4 SELECT的FROM中嵌套子查询 第11章 MySQL支持的数据类型 11.1 数值类型:包括整数和小数 1、整数类型 2、bit类型 3、小数类型 11.2…

1996年-2023年 全国298个地级市-外商直接投资FDI(数据收集)

外商直接投资(FDI)是一种跨国界的经济活动,它涉及外国投资者在中国境内进行的直接投资行为。这种投资行为不仅包括以货币、实物、技术等形式的资本投入,还可能包括开办独资企业、合资企业、合作企业,以及参与资源开发等…

FreeCAD中智能指针分析

实现原理 FreeCAD中有两套智能指针,一个是OCC的智能指针handle,另一个是自己定义的智能指针Reference,两种智能指针都是通过引用计数方式管理指针。 1.1 OCC智能指针handle OCC在基础类包中定义了一个模板类handle,该类包含一个私…

Github 2024-06-23开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-23统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3C++项目2JavaScript项目2非开发语言项目2Jupyter Notebook项目1Python项目1Vue项目1Java项目1HTML项目1从零开始构建你喜爱的技…

直流电机三级串电阻启动

直流电动机在工农业生产中拥有广泛的应用,这主要得益于其调速范围广、调速平稳、过载能力强以及启动和制动转矩大的优点。为了降低起动电流和起动转矩,研究者们探索了直流电动机串电阻起动方法。这种方法通过在直流电动机电枢绕组中串入电阻,…

【学习笔记】CSS

CSS 1、 基础篇 1.1、选择器 1.2、长度单位 1.3、CSS2 常用属性 1.4、盒模型 1.5、浮动 1.6、定位 position2、 CSS3 2.1、新增长度单位 2.2、新增颜色表示 2.3、新增选择器 2.4、新增盒子属性 2.5、新增背景属性 …

电子SOP实施(MQTT协议)

架构图 服务与程序 用docker启动mqtt broker(服务器) 访问:http://192.168.88.173:18083/#/dashboard/overview 用户名:admin 密码:*** 消息发布者(查找sop的url地址,发布出去) 修改url,重新发布消息 import ran…

5.XSS-反射型(post)利用:获取cookie

原理: 文件路径:\pikachu\pkxss\xcookie\post.html 将post.html文件,复制到皮卡丘的根路径下或者根下随意路径即可,并编辑文件 需要修改以下两个地址,第一个地址是将原界面的样子链接过来,让用户认为是原…

探索Agent AI智能体的未来

随着人工智能(AI)技术的飞速发展,Agent AI智能体正成为一种改变世界的新力量。这些智能体不仅在当前的技术领域中发挥着重要作用,而且在未来将以更深远的影响改变我们的生活、工作和社会结构。本文将探讨Agent AI智能体的现状、潜…

Python学习打卡:day13

day13 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day1397、初识对象98、类的成员方法类的定义和使用成员变量和成员方法成员方法的定义语法 99、类和对象在程序中通过类来描述基于类创建对象 100、…

通信系统网络架构_2.广域网网络架构

1.概述 通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现…

24年下半年各省自考报名时间汇总

24年下半年各省自考报名时间汇总

自动驾驶⻋辆环境感知:多传感器融合

目录 一、多传感器融合技术概述 二、基于传统方法的多传感器融合 三、基于深度学习的视觉和LiDAR的目标级融合 四、基于深度学习的视觉和LiDAR数据的前融合方法 概念介绍 同步和配准 时间同步 标定 摄像机内参标定(使用OpenCV) 摄像机与LiDAR外…

Java学习 - 网络静态路由与动态路由 讲解

网络畅通的条件 数据报包有去有回网络中的路由器必须知道且只需要知道下一跳的地址【路由器只要知道下一跳地址就行,不必知道如何到达任意的路由器,因为如果要实现,路由表将非常非常巨大,这是不可能的】 静态路由 静态路由是指…

【Python系列】探索 NumPy 中的 mean 函数:计算平均值的利器

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

LabVIEW电控旋翼测控系统

开发基于LabVIEW开发的电控旋翼测控系统,通过高效监控和控制提升旋翼系统的性能和安全性。系统集成了多种硬件设备,采用模块化设计,实现复杂的控制和数据处理功能,适用于现代航空航天领域。 项目背景 传统旋翼系统依赖机械和液压…

【AI技术】GPT-4o背后的语音技术猜想

前言: 本篇文章全文credit 给到 台大的李宏毅老师,李宏毅老师在机器学习上风趣幽默、深入浅出的讲解,是全宇宙学AI、讲中文学生的福音,强力推荐李宏毅老师的机器学习课程和深度学习 人工智能导论; 李宏毅老师的个人长…