栈的引入:

栈,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方。

栈是一种 后进先出 的结构。

它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

栈的相关概念

例:

A.a进b进,c进,c出,d进d出,b出,a出

B.a进b进c进d进,d出,c出,b出,a出

C.a进a出,b进c进,c出,d进d出,b出

D.a进b进c进d进,d出c出,所以d后面只能跟c

p1是3开始操作只能是1进栈2进栈3进栈,3出栈,

3出栈后,2可以出栈,4可以进栈然后出栈,也可以让5进栈5出栈,....p2可能是2,4,5,6,......n(不能是1,3),所以为n-2

栈的存储形式:

顺序栈:

采用顺序储存结构的栈

用top变量指向当前栈顶元素以及反映栈中元素的变化

链栈:

不存在栈满溢出的情况

两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端

栈的应用:表达式运算

中缀表达式:

 后缀表达式:

 中缀表达式和后缀表达式相互转换:
1 初始化两个栈:运算符栈s1和存储中间结果的栈s2
2 从左至右扫描中缀表达式
3 遇到运算符时,比较其与s1栈顶运算符的优先级

3.1 如果s1为空,或栈顶运算符为左括号’(’,则直接将此运算符入栈;
  3.2 否则,如果优先级比栈顶运算符的高,也直接将此运算符入栈;
  3.3 否则,将s1栈顶的运算符弹出并压入s2中。然后又从3.1步开始进行比较(此时带入栈的操作符还是之前那个,只是栈顶元素已变更)
4 遇到操作数时,将其压入s2
5 遇到括号时

5.1 如果是左括号’(’,则直接压入s1
  5.2 如果是右括号’)’,则依次弹出s1栈顶的运算符,并压入s2中,直到遇到左括号’('为止,将这个左括号从s1中弹出丢弃(这时候消除了一对括号)
6 重复2~5步,直到中缀表达式扫描完成
7 将s1中剩余的运算符依次弹出并压入s2中
8 依次弹出s2中的元素并输出,并将输出结果逆序,即得到后缀表达式

【数据结构和算法笔记】用c语言实现栈相关推荐

  1. 【数据结构和算法笔记】c语言实现顺序表和链表

    线性表的定义: 线性表中元素关系是一对一的,元素个数是有限的 序列补充: 存在唯一开始元素和终端元素,除此之外,每个元素只有唯一的前驱元素和后继元素 线性表的长度: 线性表中所含元素的个数(n),n= ...

  2. 数据结构源码笔记(C语言):置换-选择算法

    //实现置换-选择算法#include<stdio.h> #include<malloc.h> #include<string.h> #include<std ...

  3. 数据结构源码笔记(C语言):哈希表的相关运算算法

    //实现哈希表的相关运算算法 #include<stdio.h> #include<malloc.h> #include<string.h>#define MaxS ...

  4. 数据结构源码笔记(C语言):二叉平衡树的相关操作算法

    //二叉平衡树的相关运算 #include<stdio.h> #include<malloc.h> #include<string.h>typedef char I ...

  5. 数据结构源码笔记(C语言):二叉排序树的基本操作算法

    //二叉排序树的基本运算算法#include<stdio.h> #include<malloc.h>#define MaxSize 100typedef int KeyType ...

  6. 数据结构源码笔记(C语言):B树的相关运算算法

    //B树的相关运算算法#include<stdio.h> #include<malloc.h>#define MAXM 10//定义B树最大的阶数 typedef int Ke ...

  7. 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 优先级队列 — 左高树

    <数据结构.算法与应用 -- C++语言描述>学习笔记 - 优先级队列 - 左高树 一.左高树 1.外部节点 2.高度优先左高树 (1)定义 (2)特性 (3)HBLT 与 大小根树 3. ...

  8. 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 回溯法

    <数据结构.算法与应用 -- C++语言描述>学习笔记 - 回溯法 一.算法思想 二.货箱装载 1.问题描述 2.回溯算法 3.实现 4.测试代码 一.算法思想 回溯法是搜索问题解的一种系 ...

  9. 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 竞赛树

    <数据结构.算法与应用 -- C++语言描述>学习笔记 - 竞赛树 一.赢者树 二.二叉树的数组描述(补充) 1.声明 2.实现 三.赢者树 1.抽象数据类型 2.赢者树的表示 3.声明 ...

  10. 数据结构与算法笔记 - 绪论

    数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...

最新文章

  1. 读书笔记之: 计算机网络(第4版)- 第6章 传输层
  2. hdu4396 多状态spfa
  3. 显示非模式窗口和模式窗口
  4. VTK:Utilities之DataAnimation
  5. RabbitMq初探——安装
  6. 卡方检验检验水准矫正_【2008.】趋势性卡方检验专题讨论
  7. LeetCode 1108. IP 地址无效化
  8. oracle颜色,oracle - Oracle SQL Developer - 如何使用颜色显示百分比(非数字) - 堆栈内存溢出...
  9. SpringMVC实现文件上传
  10. 【干货】22道机器学习常见面试题目
  11. 深度学习TF—14.WGAN原理及实战
  12. java看懂程序_手把手教你运行第一个 Java 程序,看不懂你来骂我!
  13. 数学分析视频+书籍等
  14. 控制系统分析与设计(一):控制系统分类及建模
  15. ROS dst-nat端口映射限制访问映射IP
  16. 零基础Python学习(2) --- 《我想你猜》1.0版
  17. 狂神 MyBatis
  18. 硬盘位置不可用因格式变RAW而打不开:文件或目录损坏且无法读取/此卷不包含可识别的文件系统等无法访问错误-CHKDSK被中止
  19. 判断线程池任务执行完成
  20. java 数字转大写_Java实现数字大写转换

热门文章

  1. 前端浏览器兼容性网站
  2. HDU 1712 ACboy needs your help(简单分组DP)
  3. Visual C# 2008+SQL Server 2005 数据库与网络开发--9.2.1 XML文档
  4. CCPC2020太原理工获得一枚奖牌
  5. UVA10165 Stone Game【Nim游戏】
  6. NUC1100 Biorhythms【中国剩余定理】
  7. CCF201412-1 门禁系统(100分)
  8. MySQL 基础 —— 数据类型、各种变量
  9. 神经网络的 Delta 学习规则(learning rule)
  10. 张量(tensor)的理解