【数据结构和算法笔记】用c语言实现栈
栈的引入:
栈,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方。
栈是一种 后进先出 的结构。
它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
栈的相关概念
例:
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语言实现栈相关推荐
- 【数据结构和算法笔记】c语言实现顺序表和链表
线性表的定义: 线性表中元素关系是一对一的,元素个数是有限的 序列补充: 存在唯一开始元素和终端元素,除此之外,每个元素只有唯一的前驱元素和后继元素 线性表的长度: 线性表中所含元素的个数(n),n= ...
- 数据结构源码笔记(C语言):置换-选择算法
//实现置换-选择算法#include<stdio.h> #include<malloc.h> #include<string.h> #include<std ...
- 数据结构源码笔记(C语言):哈希表的相关运算算法
//实现哈希表的相关运算算法 #include<stdio.h> #include<malloc.h> #include<string.h>#define MaxS ...
- 数据结构源码笔记(C语言):二叉平衡树的相关操作算法
//二叉平衡树的相关运算 #include<stdio.h> #include<malloc.h> #include<string.h>typedef char I ...
- 数据结构源码笔记(C语言):二叉排序树的基本操作算法
//二叉排序树的基本运算算法#include<stdio.h> #include<malloc.h>#define MaxSize 100typedef int KeyType ...
- 数据结构源码笔记(C语言):B树的相关运算算法
//B树的相关运算算法#include<stdio.h> #include<malloc.h>#define MAXM 10//定义B树最大的阶数 typedef int Ke ...
- 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 优先级队列 — 左高树
<数据结构.算法与应用 -- C++语言描述>学习笔记 - 优先级队列 - 左高树 一.左高树 1.外部节点 2.高度优先左高树 (1)定义 (2)特性 (3)HBLT 与 大小根树 3. ...
- 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 回溯法
<数据结构.算法与应用 -- C++语言描述>学习笔记 - 回溯法 一.算法思想 二.货箱装载 1.问题描述 2.回溯算法 3.实现 4.测试代码 一.算法思想 回溯法是搜索问题解的一种系 ...
- 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 竞赛树
<数据结构.算法与应用 -- C++语言描述>学习笔记 - 竞赛树 一.赢者树 二.二叉树的数组描述(补充) 1.声明 2.实现 三.赢者树 1.抽象数据类型 2.赢者树的表示 3.声明 ...
- 数据结构与算法笔记 - 绪论
数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...
最新文章
- 读书笔记之: 计算机网络(第4版)- 第6章 传输层
- hdu4396 多状态spfa
- 显示非模式窗口和模式窗口
- VTK:Utilities之DataAnimation
- RabbitMq初探——安装
- 卡方检验检验水准矫正_【2008.】趋势性卡方检验专题讨论
- LeetCode 1108. IP 地址无效化
- oracle颜色,oracle - Oracle SQL Developer - 如何使用颜色显示百分比(非数字) - 堆栈内存溢出...
- SpringMVC实现文件上传
- 【干货】22道机器学习常见面试题目
- 深度学习TF—14.WGAN原理及实战
- java看懂程序_手把手教你运行第一个 Java 程序,看不懂你来骂我!
- 数学分析视频+书籍等
- 控制系统分析与设计(一):控制系统分类及建模
- ROS dst-nat端口映射限制访问映射IP
- 零基础Python学习(2) --- 《我想你猜》1.0版
- 狂神 MyBatis
- 硬盘位置不可用因格式变RAW而打不开:文件或目录损坏且无法读取/此卷不包含可识别的文件系统等无法访问错误-CHKDSK被中止
- 判断线程池任务执行完成
- java 数字转大写_Java实现数字大写转换