二,堆栈

中缀表达式:运算符位于两数之后; 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

  1. 运算数:直接输出;
  2. 左括号:压栈
  3. 右括号:输出栈顶元素,直到遇到左括号(出栈,不输出)
  4. 运算符:大于栈顶,压栈;小于等于栈顶,输出栈顶,比较新栈顶,循环,压栈;括号内的运算符依旧遵循此规则
  5. 堆栈存留一一输出

      小于等于栈顶时,栈顶输出

后缀表达式可以用堆栈求出其具体数值:

把运算数压入栈中,遇到运算符,取出栈顶两元素运算后的结果压入栈中,继续

堆栈其他作用:

  1. 函数调用及递归实现
  2. 深度优先搜索
  3. 回溯算法

转载于:https://www.cnblogs.com/xiaoxue126/p/9036568.html

数据结构之线性结构之堆栈相关推荐

  1. 数据结构:线性结构和非线性结构的区分

    数据结构包括线性结构和非线性结构: 线性结构: (1)线性结构的特点是数据元素之间存在着一对一的线性关系 (2)线性结构由两种不同的存储结构,顺序存储结构和链式存储结构 : ①顺序存储的线性表称为顺序 ...

  2. 数据结构_线性结构和非线性结构

    数据结构 数据结构包括:线性结构和非线性结构 线性结构 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线 ...

  3. 数据结构之线性结构(应用实例)

    本文为数据结构之线性结构(应用实例),根据网课而整合的笔记. 栗子: 设计函数分别求两个一元多项式的乘积与和 该题的输入与输出样例: 求解思路 多项式表示 程序框架 读多项式 加法实现 乘法实现 多项 ...

  4. 数据结构之线性结构和非线性结构

    目录 一.线性结构 1.线性结构的概念 2.部分实现 (1)顺序表(顺序存储) (2)链表(链式存储) (3)栈 (4)队列 二.非线性结构 1.非线性结构的概念 (1)二叉树 (2)满二叉树 (3) ...

  5. java数据结构之线性结构和非线性结构

    数据结构包括 :线性结构和非线性结构. 线性结构 1):线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系. 2):线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序 ...

  6. 数据结构之线性结构与非线性结构

    数据结构包括两大类:线性结构和非线性结构 线性结构:其中线性结构是数据元素之间有着一对一的对应关系,分为顺序储存结构和链式存储结构,顺序储存结构顾名思义是按照一定的顺序排列的(地址连续),而链式存储结 ...

  7. 数据结构一 线性结构和非线性结构

    暑假到来,由于自己之前确实数据结构学的一般,因此决定重新学习一下数据结构,一是加深理解,二是对算法使用java进行测验,增强实践能力,主要是通过尚硅谷的视频进行学习,写上去的笔记,有些是尚硅谷的内容, ...

  8. 常用数据结构:线性结构

    目录 2022最新为初学者而著! 顺序表 链表 单链表: 结点的删除: 结点的插入: 循环链表 双链表 结点的删除: 结点的插入: 栈 队列 2022最新为初学者而著! Java基础是初学者的起点,是 ...

  9. 【JS数据结构】线性结构——栈结构

    目录 一. 认识栈结构 1.栈结构 1.1 栈(stack) 1.2 生活中类似于栈的 1.3 栈结构的图解 1.4 程序中的函数调用栈是使用栈实现的呢? 1.5 栈面试题 二. 栈结构实现 1.栈的 ...

最新文章

  1. python接口自动化测试框架链接数据库_python接口自动化测试框架实现之操作mysq数据库...
  2. 既然使用神经网络也可以解决分类问题,那SVM、决策树这些算法还有什么意义呢?...
  3. 单页面与多页面的区别与优缺点?
  4. H2O —— 宣称性能是 Nginx 2 倍的 HTTP 服务器
  5. VTK:绘制单元格颜色用法实战
  6. inotifywait监听php,利用inotifywait监控主机文件和目录
  7. ssh 看apache_使用Apache KeyedObjectPool的ssh连接池
  8. 分析启动耗时 android,Android app启动耗时分析
  9. c52单片机控制l298n步进电机角度_【设计图文】单片机实现的步进电机控制系统(开题报告+论文+文献综述+外文翻译+DWG图纸)...
  10. js生成随机不重复数字的几种方法
  11. python求一个数的因子_求一个整数的所有素数因子的思路是什么?
  12. svn up (svn update) 状态缩写含义
  13. Java高级工程师面试题总结及参考答案
  14. H264编码器与H265编码器对比
  15. 颜色空间的几种表示方法
  16. 淘宝SDK高级模板,设计师模块开放接口详解
  17. [导入]中国民营企业500强
  18. 基于stm32的两轮自平衡小车3(硬件篇)
  19. 院内导航方案怎么样?什么地图可以用于医院导航系统?
  20. PTA 1032 挖掘机技术哪家强 (c语言)

热门文章

  1. 谁说菜鸟不会数据分析--读书笔记
  2. 【转载】通过金矿模型介绍动态规划 (动态规划入门)
  3. org-mode入门教程
  4. JqueryCookie
  5. CuteEditor6.0使用配置心得体会(转)
  6. 如何打造高效的多任务、高并发的网络服务器系统?
  7. 第一个servlet小程序
  8. 属性动画基础之ValueAnimator
  9. Mysql数据库的分离和附加转
  10. 解决vlc-android播放http视频退出问题