• 1、栈是一种后进者先出,先进者后出的数据结构
    2、用数组实现的栈叫作顺序栈,用链表实现的栈叫作链式栈
    3、栈的时间复杂度为 O(1);往一个要先扩容的栈内添加一个数据,均摊之后时间复杂度也为O(1)
    4、常见栈的使用场景
    4.1、用来存储函数调用时的临时变量。每进入一个函数,就会将临时变量入栈,当被调用函数执行完成,返回之后,将这个函数对应的变量出栈
    4.2、表达式求值中的应用。比如:34+13*9+44-12/3这个运算,编译器就是通过两个栈来实现的,其中一个保存操作数的栈,另一个是保存运算符的栈,从左向右遍历表达式,当遇到数字,我们就直接压入操作数栈;当遇到运算符,就与运算符栈的栈顶元素进行比较;如果比运算符栈顶元素的优先级高,就将当前运算符压入栈;如果比运算符栈顶元素的优先级低或者相同,从运算符栈中取栈顶运算符,从操作数栈的栈顶取 2 个操作数,然后进行计算,再把计算完的结果压入操作数栈,继续比较
    4.3、在括号匹配中的应用。比如,{[]()[{}]}或{[}()]检查哪个合法,用栈来保存未匹配的左括号,从左到右依次扫描字符串。当扫描到左括号时,则将其压入栈中;当扫描到右括号时,从栈顶取出一个左括号。如果能够匹配,比如“(”跟“)”匹配,“[”跟“]”匹配,“{”跟“}”匹配,则继续扫描剩下的字符串。如果扫描的过程中,遇到不能配对的右括号,或者栈中没有数据,则说明为非法格式
    4.4、浏览器前进后退功能。我们使用两个栈,X 和 Y,我们把首次浏览的a, b, c页面依次压入栈 X,当点击后退按钮时,从栈 X 中出栈c,并将出栈的c放入栈 Y,此时跳转到新的页面 d 了,此时需要清空栈 Y,页面 c 就无法再通过前进按钮重复查看了

  • 相关阅读:
    哈夫曼(Huffman)编码
    面向对象的3个基本要素和5个基本设计原则(整理)
    面向对象设计原则OO
    Java多线程中start()和run()的区别
    HBase入门
    SparkGraphXTest.scala
    IntellijIdea中常用的快捷键
    SparkSQLTest.scala
    SparkStreamingTest.scala
    (转)理解POST和PUT的区别,顺便提下RESTful
  • 原文地址:https://www.cnblogs.com/jetqiu/p/13358112.html
Copyright © 2020-2023  润新知