堆栈总结

  • 堆栈
      • 什么是堆栈
      • 堆栈的抽象数据类型描述
      • 栈的顺序存储实现

堆栈

什么是堆栈

计算机如何进行表达式求值?
算术表达式5+6/2-3*4。
正确理解:
5+6/2-3*4 = 5+3-3*4 = 8-3*4 = 8-12 = -4
由两类对象构成的:
运算数,如2、3、4
运算符号,如+、-、*、/  不同运算符号优先级不一样
后缀表达式
中缀表达式:运算符号位于两个运算数之间。如 ,a + b * c - d / e
后缀表达式:运算符号位于两个运算数之后。如, a b c *+ d e /-
后缀表达式求值策略:从左向右“扫描”,逐个处理运算数和运算符号
1. 遇到运算数怎么办?如何“记住”目前还不未参与运算的数?
2. 遇到运算符号怎么办?对应的运算数是什么?
6 2 / 3 - 4 2 *+ = ?
6/2-3+4*2
注意后缀的运算数是紧挨着运算符号之前的两个数
启示:需要有种存储方法,能顺序存储运算数, 并在需要时“倒序”输出!
堆栈(Stack):
具有一定操作约束的线性表 只在一端(栈顶,Top)做 插入、删除
插入数据:入栈(Push)
删除数据:出栈(Pop)
后入先出:Last In First Out(LIFO)

堆栈的抽象数据类型描述

类型名称: 堆栈(Stack)

数据对象集:一个有0个或多个元素的有穷线性表。

操作集:长度为MaxSize的堆栈S Stack,堆栈元素item ElementType

1、Stack CreateStack( int MaxSize ): 生成空堆栈,其最大长度为MaxSize;
2、int IsFull( Stack S, int MaxSize ):判断堆栈S是否已满;
3、void Push( Stack S, ElementType item ):将元素item压入堆栈;
4、int IsEmpty ( Stack S ):判断堆栈S是否为空;
5、ElementType Pop( Stack S ):删除并返回栈顶元素

这里写图片描述

Push 和 Pop 可以穿插交替进行;
按照操作系列 (1)Push(S,A), Push(S,B),Push((S,C),Pop(S),Pop(S),Pop(S) 堆栈输出是? CBA

(2) 而Push(S,A), Pop(S),Push(S,B),Push((S,C),Pop(S),Pop(S) 堆栈输出是? ACB

栈的顺序存储实现

栈的顺序存储结构通常由一个一维数组和一个记录 栈顶元素位置的变量组成。
1.入栈 2.出栈 3.判断 栈满 栈空

typedef int Position;
struct SNode {ElementType *Data; /* 存储元素的数组 */Position Top;      /* 栈顶指针 */int MaxSize;       /* 堆栈最大容量 */
};
typedef struct SNode *Stack;Stack CreateStack( int MaxSize )
{Stack S = (Stack)malloc(sizeof(struct SNode));S->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));S->Top = -1;//top值为零说明栈里有一个元素,-1代表堆栈空S->MaxSize = MaxSize;return S;
}bool IsFull( Stack S )
{return (S->Top == S->MaxSize-1);
}bool Push( Stack S, ElementType X )
{if ( IsFull(S) ) {printf("堆栈满");return false;}else {S->Data[++(S->Top)] = X;return true;}
}bool IsEmpty( Stack S )
{return (S->Top == -1);
}ElementType Pop( Stack S )
{if ( IsEmpty(S) ) {printf("堆栈空");return ERROR; /* ERROR是ElementType的特殊值,标志错误 */}else return ( S->Data[(S->Top)--] );
}

堆栈的其他应用:
函数调用及递归实现
深度优先搜索
回溯算法
。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

harmonyos公测招募,nova为主 HarmonyOS 2.0开发者Beta公测再招募

原标题:nova为主 HarmonyOS 2.0开发者Beta公测再招募HarmonyOS 2.0开发者Beta公测招募将开启第二期,本次公测活动主要针对的机型是华为nova系列。活动报名时间为5月9日-5月17日。【PChome手机频道资讯报道】华为方面在4月份开启了HarmonyOS 2.0开发者Bet…

队列总结

什么是队列 队列(Queue):具有一定操作约束的线性表 插入和删除操作:只能在一端插入,而在另一端删除 数据插入:入队列(AddQ) 数据删除:出队列(DeleteQ) 先来先服务 先…

D P- 免费馅饼

题目 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以ga…

一加桌面3.0 android8,一加手机XRemix6.0安卓8.1.0Beta2.0定制本地化增强适配归属农历等...

制作者:moonlight-roms基于版本:remix最新安卓8.1.0代码适合机型:一加手机X双网版/全网通版/E1001/E1003等/onyx注意事项:1.开机后语言设置:Settings-system-languageandinput-添加一个中文需要并拖动到第一行设置为默…

震惊!Fibonacci Again

题目 There are another kind of Fibonacci numbers: F(0) 7, F(1) 11, F(n) F(n-1) F(n-2) (n>2). Input Input consists of a sequence of lines, each containing an integer n. (n < 1,000,000). Output Print the word “yes” if 3 divide evenly into …

华为鸿蒙手机和电视通话,鸿蒙智慧屏首秀:逾10万人预定,电视视频通话功能强大...

原标题&#xff1a;鸿蒙智慧屏首秀&#xff1a;逾10万人预定&#xff0c;电视视频通话功能强大上周五&#xff0c;大家期待已经的华为开发者大会正式召开&#xff0c;华为鸿蒙系统在这一天对外发布。历时数年&#xff0c;经过几千人的研发&#xff0c;终于正式落地。曾经&#…

两文本一图片android,Android富文本编辑器(二):图文混排以及图片上传处理

对于一个富文本编辑器来说&#xff0c;图文混排是最基本的功能。而从上一篇文章中我们知道图文混排需要使用ImageSpan。下面这段代码摘自我的RichEditText源码&#xff1a;/*** 添加图片* param filePath 图片文件路径*/public void addImage(String filePath) {SpannableStrin…

震惊! Rightmost Digit 快速幂解决

题目 Given a positive integer N, you should output the most right digit of N^N. Input The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow. Each test case conta…

android handler同步,android解决:使用多线程和Handler同步更新UI

如果运行时&#xff0c;可以看到滚动条由条慢慢变短&#xff0c;则说明程序成功了。截图如下&#xff0c;建议选择大点的文件做测试。main.xmlxmlns:android"http://schemas.android.com/apk/res/android"android:layout_height"wrap_content" android:id&…

html玫瑰花效果代码,html5渲染3D玫瑰花情人节礼物js特效代码

情人节马上就要到来了&#xff0c;这里给程序员前端设计师们献上一个&#xff0c;html5渲染而成的3D玫瑰花js效果&#xff0c;可以作为虚拟的情人节礼物送给自己的爱人。支持html5的浏览器查看。查看演示下载资源&#xff1a;16次 下载资源下载积分&#xff1a;20积分情人节玫瑰…

html 页面怎么加载富文本,UILabel加载html富文本

本文主要解决html标签之外文本属性设置当APP里面有搜索的需求的时候&#xff0c;产品可能会要求关键字显示特殊颜色或者字体。其中一种可能性是服务器返回的数据是带有html标签的字符串&#xff0c;那么该怎么解决&#xff1f;当标签之外的其他字体也需要设置不同格式&#xff…

python 打印皮卡丘_用python打印你的宠物小精灵吧

我们来通过一个有趣的例子开始编写我们的第一个python代码。本文涉及的python基础语法为&#xff1a;print输出函数&#xff0c;赋值&#xff0c;字符串print()print()是python的一个内置函数&#xff0c;用于打印输出&#xff0c;是最常见的一个函数之一。有些朋友可能对于打印…

360浏览器查看html文件在哪里,360浏览器8菜单栏怎么弄出来?如何查看网站源代码...

今天想查看一个页面的源代码&#xff0c;没想到这个页面竟然禁止了鼠标右键功能&#xff0c;所以无法通过鼠标右键选择“查看源代码”来查看。然后就想通过 360 浏览器的“查看源代码”按钮进行查看&#xff0c;没想到找了半天都找不到这个按钮&#xff0c;最后只能通过查看源代…

判断html()中有长度,VBS 字符串长度判断的问题

对于给你一个字符串你应该怎样判断他的字符串长度&#xff0c;试举一些典型的例子C语言——字符串长度的计算方法提示&#xff1a;(1)计算字符串长度时关键是要注意辨认转义字符&#xff1b;(2)一个转义字符总是以反斜杠开始&#xff0c;再加一个其他字符组成。所以&#xff0c…

计算机专业后悔么,王言匀

《中华独特疗法大成》分方法和治疗两篇。方法篇依据用药与否&#xff0c;分为药物疗法和非药物疗法两章&#xff0c;药物疗法按照给药途径分为内服法和外用法两节&#xff1b;非药物疗法根据施术手段分为针灸、推拿、气功及其他4节。这些章节介绍了273种治疗方法的基本内容、适…

应用计算机散热的原理是什么,水冷散热器是什么原理?水冷可以带给机箱多大的散热作用?...

用户若是CPU安装了水冷散热器&#xff0c;就可以利用水快速导热和散热的特性加强主机硬件的散热效果&#xff0c;和普通风扇的散热效果相比&#xff0c;水冷可以更加有效的降低硬件温度和热量散发速度。阅读下文了解水冷散热器的原理和作用。CPU水冷散热器是指使用液体在泵的带…

计算机办公应用软件初级,电脑办公软件有哪些?桌面便签办公软件基础教程

原标题&#xff1a;电脑办公软件有哪些&#xff1f;桌面便签办公软件基础教程Windows电脑上的办公软件有很多&#xff0c;很多网友都觉得电脑上用的桌面便签小工具不算办公软件&#xff0c;其实只要是对工作有帮助的电脑程序&#xff0c;在某种程度上来说都可以说是办公小工具软…

电脑开机启动修复无法自动修复此计算机,Win7系统开机无法自动修复此计算机如何解决...

在使用win7系统的时候&#xff0c;总是会遇到一些问题&#xff0c;比如就有用户反映说开机提示自动修复&#xff0c;导致无法正常进入操作系统&#xff0c;经过分析部分系统修复报错文件为&#xff1a;X:Windowssystem32driversspoon.sys&#xff0c;那么要怎么解决这样的问题呢…

计算机控制系统视频关守平,国家级精品课《计算机控制系统》课程建设研讨会顺利召开...

10月27日&#xff0c;国家级精品课《计算机控制系统》课程建设研讨会于科技楼4002会议室召开。我校校长刘建昌&#xff0c;东北大学教授关守平等6人&#xff0c;燕山大学教授孙孝峰等4人&#xff0c;分校控制工程学院院长王凤文、副院长段洪军&#xff0c;各省级精品课负责人、…

武汉理工大学计算机学院2018复试,武汉理工大学2018年自主招生复试揭秘

原标题&#xff1a;武汉理工大学2018年自主招生复试揭秘2018年武汉理工大学考试方式学马教育徐老师介绍&#xff0c;考核以笔试和学科专项测试或特殊专长考评的方式进行&#xff0c;具体要求如下&#xff1a;笔试科目为能力测试(满分300分&#xff0c;内容为数学与逻辑、中文阅…