数据结构——第三章 栈

先入后出

1.栈的进出问题(题目一般只说入栈顺序,而没说啥时候出来)

2.逆波兰式(栈的后缀表示,从中缀转后缀)

例:

(a+b)*3 +2

运算符在两个操作数中间,为中缀表达式

因为电脑太笨,所以需要将中缀表达式转换成后缀表达式,利用栈进行计算。

算法:

如何将中缀表达式转换成后缀表达式?

1.按执行的先后顺序,给表达式全部加上括号

2.把所有运算符移到右括号的后面

3.把所有的括号删除

例: a/b^c+d*e-a*c

1.这个式子需要这样计算 (((a/(b^c))+(d*e) )-(a*c))

2.(((a(bc)^)/(de)* )+(ac)*)-

3. abc^/de*+ac*-

对于计算机:

1。读取表达式exp的一个单词x

2。若x是操作数,则原样输出。否则执行3:

3。x是运算符。若x是) 则将栈中元素输出  直到遇到(为止。将(从栈中删除,执行4

4。x不是),循环比较栈顶元素和x的优先级,若不小于,则栈顶元素出栈输出

5。x进栈

6。若表达式已读完,则执行1,否则执行7

7。将栈中元素依次输出,直至栈空。

例如:8-(3+5)*(5-6/2)

原文地址:https://www.cnblogs.com/eret9616/p/8157890.html

时间: 2024-09-27 10:13:29

数据结构——第三章 栈的相关文章

C语言数据结构——第三章 栈和队列

三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性的数据结构. 从数据类型的角度看,它们是和线性表大不相同的两种重要的抽象数据类型,在面向对象的程序设计中,它们是多型数据类型. 3.1-栈 3.1.1-抽象数据类型栈的定义 栈:是限定仅在表尾进行插入或删除操作的线性表,又可以称为后进先出的线性表. 栈顶:栈的表尾端 栈底:栈的表头端 空栈:不含元素

一步一步学习数据结构(三)栈的顺序存储结构实现代码

//栈这种逻辑结构的实现与一般线性表的实现类似,有两种存储方式:顺序存储和链式存储 //先学习顺序存储 //1. #include<stdio.h> #include<stdlib.h> #define null NULL #define SIZE 100 typedef int dataType ; typedef struct { dataType data[SIZE]; int top; }cStack,*cStackPointer; //初始化栈空间 void initSt

数据结构期末复习第三章栈和队列

第三章:栈和队列 栈的特性:后进先出(LIFO) 1.  输入序列为ABC,可以变为CBA时,经过的栈操作为( B )A. push, pop, push, pop, push, popB. push, push, push, pop, pop, popC. push, push, pop, pop, push, popD. push, pop, push, push, pop, pop 解析: ABC经过push,push,push操作后,从栈顶到栈底元素为CBA,经过pop,pop,pop出

【知识强化】第三章 栈和队列 3.1 栈

在第三章我们将继续学习三种非常重要的线性结构,分别是栈和队列的这样的受限线性表.我们将从它们的基本概念.存储结构以及相关应用这三方面进行详细的学习.最后我们将学习数组的相关知识,大家要注意一下这里的数组指的是一种线性结构,与我们之前在程序设计语言当中提到的数组类型是不同的概念.好,数组我们会学习它的定义以及它的存储结构,还有用数组来实现矩阵的压缩存储.最后还会提一个特殊的矩阵叫做稀疏矩阵.好,这就是本章所要学习的重要考点.本章所学习的知识点其实并不难,它常常出现在选择题当中,但是在之后我们解决一

数据结构实验三《栈和队列》

<数据结构>实验三 栈和队列 一.实验目的 巩固栈和队列数据结构,学会运用栈和队列. 1.回顾栈和队列的逻辑结构和受限操作特点,栈和队列的物理存储结构和常见操作. 2.学习运用栈和队列的知识来解决实际问题. 3.进一步巩固程序调试方法. 4.进一步巩固模板程序设计. 二.实验时间 准备时间为第5周到第6周,具体集中实验时间为6周第2次课.2个学时. 三.实验内容 1.自己选择顺序或链式存储结构,定义一个空栈类,并定义入栈.出栈.取栈元素基本操作.然后在主程序中对给定的N个数据进行验证,输出各个

数据结构(三)——栈Stack

栈是一种特殊的线性表,插入和删除操作均在栈顶进行,插入操作称为入栈,删除操作称为出栈. 一.顺序栈 利用顺序存储方式实现的栈称为顺序栈,下面是它的一些基本操作实现算法,需要理解和记忆. 1.顺序栈的类型定义 #define StackSpaceIncr 20 typedef struct{ SElemType *base; int top; int stackSize; }SqStack;//顺序栈类型 2.初始化操作InitSqStack(&S,InitSize) Status InitSqS

JavaScript数据结构与算法——第三章 栈

栈:后进先出.栈顶在最后,栈底在最前.新添加的元素和待删除的元素抖保存在栈的末尾. 创建一个栈: function Stack() { var items = []; /*用数组保存栈里的元素*/ this.push = function(e) { items.push(e); } this.pop = function() { return items.pop(); } this.peek = function() { return items[length - 1]; } this.isEm

【自考】数据结构第三章,栈、队列、数组,期末不挂科指南,第3篇

学习目标 自考重点.期末考试必过指南,这篇文章让你理解什么是栈.什么是队列.什么是数组 掌握栈.队列的顺序存储结构和链式存储结构 掌握栈.队列的基本操作在顺序存储结构和链式存储结构上的实现 掌握矩阵的压缩存储 今天核心咱们先把栈搞清楚 栈和队列可以看做是特殊的线性表 .它们的特殊性表现在它们的基本运算是线性表运算的子集,它们是运算受限的线性表 栈 栈(Stack)是运算受限的线性表,这种线性表上的插入和删除操作限定在表的一端进行 基本概念 栈顶:允许插入和删除的一端 栈尾:另一端 空栈:不含任何

数据结构-王道2017-第3章 栈和队列-栈和队列的应用

1.前中后缀表达式的转换: 举例说明将自然表达式转换成二叉树: a×(b+c)-d ① 根据表达式的优先级顺序,首先计算(b+c),形成二叉树 ②然后是a×(b+c),在写时注意左右的位置关系 ③最后在右边加上 -d 然后最这个构造好的二叉树进行遍历,三种遍历的顺序分别是这样的: ① 前序遍历:根-左-右 ② 中序遍历:左-根-右 ③ 后序遍历:左-右-根 前缀表达式:-*a+bcd 中缀表达式:a*b+c-d 后缀表达式:abc+*d- 2.队列在层次遍历二叉树中起作用,且在计算机系统中应用非