栈的概念笔记

1.栈的概念

   栈是一种基于先进后出(FILO)或者后进先出(LIFO)的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

2.栈的应用

       (1)浏览器 "回退" 功能的实现,底层使用的就是栈存储结构。当你关闭页面 A 时,浏览器会将页面 A 入栈;同样,当你关闭页面 B 时,浏览器也会将 B入栈。因此,当你执行回退操作时,才会首先看到的是页面 B,然后是页面 A,这是栈中数据依次出栈的效果。

       (2)表达式求值

       (3)数制的转换,比如给定十进制数N=1348,转换为八进制数R=2504

         (4)二叉树的遍历

2.顺序栈

   (1)、顺序栈的描述结构体

    (2)、顺序栈的初始化

3.链式栈

4.栈的应用

1、数值转换

2、括号匹配

假设表达式中允许出现两种括号:圆括号()和方括号[],其嵌套的顺序随意,即( [ ( ) ( ) ] )或者 [ ( [ ] [ ] ) ]等为正确的表达式,但是 ( [ ( ] ) 或者 [ ( [ ) ] 或者 ( [ ( ] ) )等为错误的表达式。检查括号是否匹配可以采用如下逻辑:

  • 遍历整个表达式
  • 如果是左括号入栈
  • 如果是右括号则从栈中出栈一个括号,如果与右括号匹配则继续往后遍历,如果不匹配则说明是错误的表达式
  • 如果表示遍历完毕,最后栈为空说明表达式正确否则说明表达式错误

3、 表达式求值

需求:输入一个表达式,含加减乘除括号运算,输出表达式的值

例如:求20+(3*400)-100/3的值

逻辑:

  • 使用两个栈,一个栈存放操作符,一个栈存放操作数
  • 遍历整个表达式,如果是操作数入栈操作数栈
  • 如果是操作符,则获取操作符栈的栈顶元素,比较两个操作符的优先级,如果比栈顶的操作符优先级低或者相等,则出栈一个操作符,出栈两个操作数,将计算结果入操作数栈
  • 如果比栈顶的操作符优先级高则直接入栈操作符栈
  • 如果遇到的是左括号 ( , 则直接入栈操作符栈
  • 如果是右括号 ),则从操作符栈出栈一个操作符,出栈两个操作数,将计算结果入操作数栈,直到将左括号出栈
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值