快速上手 C++ 数据结构与算法
王健伟
《C++ 新经典》系列作者,资深 C++ 讲师
3224 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
结束语 (1讲)
快速上手 C++ 数据结构与算法
15
15
1.0x
00:00/00:00
登录|注册

08|栈:如何实现数据的后进先出?

你好,我是王健伟。
从“链表”毕业之后,我们就要进入“栈”的学习了。作为一种耳熟能详的数据结构,“栈”到底是个什么东西呢?
还记得我们之前提到过的线性表吗?没错,栈仍旧是一种线性表。不过它只能在一端进行插入和删除操作,先入栈的数据只能后出来,而后入栈的数据只能先出来。所以栈具有先进后出或者后进先出的特性。通常来说,我们可以把栈理解为一种受限的线性表
如果我们把栈比成一个类似木桶这样的容器,栈有两端,把允许进行插入和删除操作的一端称为栈顶(top)也就是桶口,或者称为线性表的表尾,而另一端称为栈底(bottom)也就是桶底,或者称为线性表的表头。不包含任何数据的栈,叫做空栈(空线性表)
整体结构理清之后,我们再说相关的操作。向栈中插入元素,可以叫做入栈或进栈,从栈中删除元素,就叫出栈。除了能够在表尾插入和删除数据外,对于栈这种数据结构,在任何其他位置插入和删除数据都不应该被允许。你只能提供符合这个规定的操作接口,否则实现的就不是栈了。
栈也被称为后进先出(Last In First Out:LIFO)的线性表,这意味着最后放入到栈里的数据(插入数据)只能最先被从栈中拿出来(删除数据)
其实,我们生活中满足栈这种后进先出的情形非常多,比如往抽屉里放东西,先放进去的肯定会被堆到最里面,所以只能最后取出,而最后放入的物品往往在最前面或者最上面,所以会被最先取出。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了顺序栈和共享栈的基本概念、实现方式以及链式栈的定义和常用操作。顺序栈是一种常见的数据结构,具有后进先出的特性,只能在一端进行插入和删除操作。文章详细介绍了顺序栈的操作方法和扩容技巧,通过示例代码和详细解释,读者可以快速了解顺序栈的实现原理。共享栈则是在两个顺序栈共享存储空间的基础上,实现了最大限度利用空间、减少浪费的目的。链式栈的实现方式和常用操作也得到了详细阐述。文章还提到了栈在实际应用中的重要性,以及在STL中提供的stack容器。总的来说,本文通过对栈的不同实现方式和应用场景的介绍,为读者提供了对栈的全面理解和深入学习的基础知识。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《快速上手 C++ 数据结构与算法》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • 徐石头
    1. 操作系统调用栈,浏览器前进后退功能 3. 内存中的堆栈和数据结构堆栈不是一个概念,内存中的堆栈是真实存在的物理区,数据结构中的堆栈是抽象的数据存储结构。 操作系统给每个线程分配了一块独立的内存空间,这块内存被组织成“栈”这种结构, 用来存储函数调用时的临时变量。每进入一个函数,就会将临时变量作为一个栈帧入栈,当被调用函数执行完成,返回之后,将这个函数对应的栈帧出栈,符合先进后出的特性。 从调用函数进入被调用函数,对于数据来说,变化的是作用域。所以只要能保证每进入一个新的函数,都要是一个新的作用域。而要实现这个,用栈就非常方便。在进入被调用函数的时候,分配一段栈空间给这个函数的变量,在函数结束的时候,将栈顶复位,正好回到调用函数的作用域内。 用Go实现的数组栈和链表栈 https://github.com/xushuhui/algorithm-and-data-structure/tree/master/datastructure/stack

    作者回复: 👏👏😂😂

    2023-03-02归属地:湖南
    2
  • Bruder_Jin
    1、操作系统中的调用栈:在操作系统中,每个进程都有一个独立的调用栈,用于存储函数调用的返回地址和参数。当程序执行一个函数时,它的参数和返回地址被压入该进程的调用栈中。当函数返回时,这些参数和返回地址被弹出栈。 2、网络协议中的数据包处理:在网络协议中,数据包处理通常采用栈的方式进行,以确保数据包能够正确地路由。数据包处理时,每个网络层都会将自己的头部信息入栈,并在发送时逆序弹出栈,以保证数据包的正确传输。 3、数据库系统中的事务处理:在数据库系统中,事务处理可以采用栈来实现。每次进行事务操作时,会将操作入栈,以便回滚时能够按照相反的顺序执行操作。(事务的实现可能会有所不同。除了使用栈来管理事务操作序列外,还可以使用其他数据结构,如链表、数组等来实现事务。此外,不同的数据库系统还可能会采用不同的事务模型和隔离级别,以满足不同的应用需求。) 4、操作系统中的中断处理:在操作系统中,中断处理也可以采用栈来实现。当系统发生中断时,将当前程序的状态入栈,然后转到中断处理程序。当中断处理程序执行完毕后,将保存的程序状态弹出栈,恢复原来的程序执行。 6、撤销操作:在编辑器中,撤销操作通常也可以使用栈来实现,将每次编辑的操作记录在栈中,撤销时将最近的操作出栈并撤销。

    作者回复: 👏👏👏👏

    2023-03-17归属地:中国台湾
    1
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部