3.栈(学习笔记)

栈的简单介绍

    栈就像是一摞放在一起的碟子,都是从下往上一个一个的放,取得时候从上往下一个一个的拿。实际上,栈可以用数组来实现叫顺序栈,如果用链表来实现,叫链式栈。

① 用数组来实现一个栈:

②用链表来尝试:

栈的实际应用

①比较经典的一个应用场景就是函数调用栈

    如下,操作系统为每个线程分配了一块独立的内存空间,这块内存被组织成“栈”结构,用来储存函数调用的临时变量,每进入一个函数,就会把一个变量作为一个栈帧入栈,当被调用函数执行完成,就会将这个函数出栈。

②栈在表达式求值中的应用

    比如说一个只包含加减乘除的算法:3+5*8-6。对于这个运算画成图就如下:

    从左到右开始遍历表达式,如果遇到数字,就把他直接压入数字操作栈,当遇到运算符,就与运算符的栈顶元素作比较,如果比栈顶运算符的优先级高,就把他放到栈中,如果比栈顶运算符优先级低或相同,从运算符栈中取栈顶运算符,从操作数栈的栈顶取2个操作数,然后进行计算,再把计算完的结果压入操作数栈,继续比较。

(本文是个人听课笔记,不少东西摘取于王争老师的原文,原文链接http://gk.link/a/10aMZ)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。