码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据结构历年考研真题对应知识点(栈)


    目录

    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)初始化

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

    (2)判栈空

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

    (3)进栈

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

    (4)出栈

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

    (5)读取栈顶元素

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

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

    注意:

    这里的 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]。相应的栈空栈满条件也会发生变化。

  • 相关阅读:
    各位帅哥美女们,请问下面这种情况怎么解决呀,网上很多方法我都试过了,都没用
    android翻转效果时钟
    【含面试题】MySQL表字段值转换为小写(或大写)的java代码实现
    基于SqlSugar的开发框架循序渐进介绍(25)-- 基于SignalR实现多端的消息通讯
    【Spring高级】第3讲 Bean的生命周期
    HTML&CSS
    辅助生成:低延迟文本生成的新方向
    【C++风云录】跨界开发:C++中集成和扩展动态语言的路线指南
    JAVA基于J2ME的手机游戏开发免费
    yolo-word复现
  • 原文地址:https://blog.csdn.net/qq_64017312/article/details/139892794
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号