数据结构之线性结构之堆栈
二,堆栈
中缀表达式:运算符位于两数之后; a+b*c-d/e
后缀表达式:运算符位于两数之后; abc*+de/-;计算机表示式求解时的读法;用堆栈实现计算
前缀表达式:运算符位于两数之前; -+a*bc/de
堆栈(操作受限制的线性表),先入后出,只在一端(栈顶,top)做插入和删除
push和pop为最常用的操作,可以交替进行;
栈的顺序存储实现:用数组实现堆栈
#define MAXSIZE 10 typedef struct {int Data[MAXSIZE];int Top; //指向栈顶的位置 }Stack;
void Push(Stack *PtrS, int item)//item为待插入元素 {if (PtrS->Top == MAXSIZE){printf("堆栈满"); return;}else{PtrS->Data[++(PtrS->Top)] = item;//先把指向top的指针指向下一位,再往该位置插入数字return;} }
int Pop(Stack *PtrS) {if (PtrS->Top==-1){printf("栈为空");return -NAN; //此处只要是特殊值,标志错误 }else{return(PtrS->Data[(PtrS->Top)--]);//返回栈顶的值之后需要把栈顶的指针的值往下移动一位 } }
一个数组实现两个堆栈:一个指向数组头,一个指向数组尾部,当两个指针相邻时,数组满,即两头向中间生长
堆栈的链式存储实现
用链表表示堆栈,链栈,实际是个单链表。插入和删除操作只能在链栈的栈顶进行。即栈顶Top应该在链表的头,不能在尾部(单向链表只能找到下一项,找不到上一项)
typedef struct NodeStack {int Data;struct NodeStack *Next; }LinkStack;void LinkPush(int item, LinkStack *S) {LinkStack *temp = new LinkStack;temp->Data = item;temp->Next = S->Next;S->Next = temp; }int LinkPop(LinkStack *S) {LinkStack *temp = new LinkStack;int result;if (S->Next == NULL){printf("堆栈空");return NULL;}else{temp = S->Next;//删除某一个数时需要定位到该数之前的那个数S->Next = temp->Next;result = temp->Data;delete(temp);return result;} }
中缀表达式转换成后缀表达式:堆栈实现,复杂度为n
- 运算数:直接输出;
- 左括号:压栈
- 右括号:输出栈顶元素,直到遇到左括号(出栈,不输出)
- 运算符:大于栈顶,压栈;小于等于栈顶,输出栈顶,比较新栈顶,循环,压栈;括号内的运算符依旧遵循此规则
- 堆栈存留一一输出
小于等于栈顶时,栈顶输出
后缀表达式可以用堆栈求出其具体数值:
把运算数压入栈中,遇到运算符,取出栈顶两元素运算后的结果压入栈中,继续
堆栈其他作用:
- 函数调用及递归实现
- 深度优先搜索
- 回溯算法
转载于:https://www.cnblogs.com/xiaoxue126/p/9036568.html
数据结构之线性结构之堆栈相关推荐
- 数据结构:线性结构和非线性结构的区分
数据结构包括线性结构和非线性结构: 线性结构: (1)线性结构的特点是数据元素之间存在着一对一的线性关系 (2)线性结构由两种不同的存储结构,顺序存储结构和链式存储结构 : ①顺序存储的线性表称为顺序 ...
- 数据结构_线性结构和非线性结构
数据结构 数据结构包括:线性结构和非线性结构 线性结构 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线 ...
- 数据结构之线性结构(应用实例)
本文为数据结构之线性结构(应用实例),根据网课而整合的笔记. 栗子: 设计函数分别求两个一元多项式的乘积与和 该题的输入与输出样例: 求解思路 多项式表示 程序框架 读多项式 加法实现 乘法实现 多项 ...
- 数据结构之线性结构和非线性结构
目录 一.线性结构 1.线性结构的概念 2.部分实现 (1)顺序表(顺序存储) (2)链表(链式存储) (3)栈 (4)队列 二.非线性结构 1.非线性结构的概念 (1)二叉树 (2)满二叉树 (3) ...
- java数据结构之线性结构和非线性结构
数据结构包括 :线性结构和非线性结构. 线性结构 1):线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系. 2):线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序 ...
- 数据结构之线性结构与非线性结构
数据结构包括两大类:线性结构和非线性结构 线性结构:其中线性结构是数据元素之间有着一对一的对应关系,分为顺序储存结构和链式存储结构,顺序储存结构顾名思义是按照一定的顺序排列的(地址连续),而链式存储结 ...
- 数据结构一 线性结构和非线性结构
暑假到来,由于自己之前确实数据结构学的一般,因此决定重新学习一下数据结构,一是加深理解,二是对算法使用java进行测验,增强实践能力,主要是通过尚硅谷的视频进行学习,写上去的笔记,有些是尚硅谷的内容, ...
- 常用数据结构:线性结构
目录 2022最新为初学者而著! 顺序表 链表 单链表: 结点的删除: 结点的插入: 循环链表 双链表 结点的删除: 结点的插入: 栈 队列 2022最新为初学者而著! Java基础是初学者的起点,是 ...
- 【JS数据结构】线性结构——栈结构
目录 一. 认识栈结构 1.栈结构 1.1 栈(stack) 1.2 生活中类似于栈的 1.3 栈结构的图解 1.4 程序中的函数调用栈是使用栈实现的呢? 1.5 栈面试题 二. 栈结构实现 1.栈的 ...
最新文章
- python接口自动化测试框架链接数据库_python接口自动化测试框架实现之操作mysq数据库...
- 既然使用神经网络也可以解决分类问题,那SVM、决策树这些算法还有什么意义呢?...
- 单页面与多页面的区别与优缺点?
- H2O —— 宣称性能是 Nginx 2 倍的 HTTP 服务器
- VTK:绘制单元格颜色用法实战
- inotifywait监听php,利用inotifywait监控主机文件和目录
- ssh 看apache_使用Apache KeyedObjectPool的ssh连接池
- 分析启动耗时 android,Android app启动耗时分析
- c52单片机控制l298n步进电机角度_【设计图文】单片机实现的步进电机控制系统(开题报告+论文+文献综述+外文翻译+DWG图纸)...
- js生成随机不重复数字的几种方法
- python求一个数的因子_求一个整数的所有素数因子的思路是什么?
- svn up (svn update) 状态缩写含义
- Java高级工程师面试题总结及参考答案
- H264编码器与H265编码器对比
- 颜色空间的几种表示方法
- 淘宝SDK高级模板,设计师模块开放接口详解
- [导入]中国民营企业500强
- 基于stm32的两轮自平衡小车3(硬件篇)
- 院内导航方案怎么样?什么地图可以用于医院导航系统?
- PTA 1032 挖掘机技术哪家强 (c语言)