




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文章知识点来至于大话数据结构里边章节知识, 这篇主要介绍栈与队列在计算机中存储形式, 以及在某些算法领域中对栈和队列的相关应用。章节最后介绍了著名的逆波兰表达式, 以及通过算法来实现该表达式的运算过程。 在实现代码的同时添加了流程图。相关代码源码请查看文章最后。栈与队列1 栈结构定义2 栈的顺序存储3 两栈共享空间 思路:他们是在数组的两端,向中间靠拢top1和top2是两个栈的栈顶指针, 只要两个指针不碰头就可以 图解4 栈的链式存储5 栈的顺序存储和链式存储区别 如果栈使用过程中元素变化不可预测, 有时候小, 有时候非常大, 那么推荐用栈的链式存储。 如果一直栈的的元素变化在可控范围内, 推荐使用栈的顺序存储。6 后缀表达式 表达式:9 3 1 3 * + 10 2 / + 规则:从左到右遍历表达式中的每个数字和符号, 遇到是数字就进栈, 遇到事符号就就将栈顶两个数字取出进行计算, 运算结果进栈, 一直到最终获得结果。5 中缀表达式转后缀表达式 中缀表达式“9+(3-1)*3+10/2”转化为后缀表达式“9 3 1 3 3 * + 10 2 / +” 规则:从左到右遍历表达式的每个数字和符号,若是数字就输出,就成为后缀表达式的一部分;若是符号,则判断与其栈顶符号的优先级,是右括号或者优先级低于栈顶元素则栈顶元素以此出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式。6 队列 定义:只允许在一段进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出的线性表,简称FIFO。允许插入的一段陈为队尾,允许删除的一段称为对头 循环队列 定义:我们把队列头尾相接的顺序存储结构称为循环队列7 队列的链式存储 队列的链式存储结构其实就是线性表的单链表,只不过它只能头出尾进,我们把它简称为队列。8 接下来开始对以上知识点实践运用,我们已计算器为例来说明算法对于堆栈的使用。目的是计算表达式9+(3-1)*3+10/2的运行结果首先我们熟悉下后缀表达式9 3 1 3 3 * + 10 2 / +, 他是通过中缀表达式9+(3-1)*3+10/2的来的。 关于中缀表达式转后缀表达式:中缀表达式“9+(3-1)*3+10/2”转化为后缀表达式“9 3 1 3 3 * + 10 2 / +” 规则:从左到右遍历表达式的每个数字和符号,若是数字就输出,就成为后缀表达式的一部分;若是符号,则判断与其栈顶符号的优先级,是右括号或者优先级低于栈顶元素则栈顶元素以此出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式。关于后缀表达式计算: 表达式:9 3 1 3 * + 10 2 / + 规则:从左到右遍历表达式中的每个数字和符号, 遇到是数字就进栈, 遇到事符号就就将栈顶两个数字取出进行计算, 运算结果进栈, 一直到最终获得结果。9 中缀表达式转后缀表达式流程图:后缀表达式计算结果流程图:10中缀表达式转后缀表达式实现代码:public static string GetSufficExpression(string expression) var expressionArray = expression.Split( ); var operateStack = new StackLinkList(); var sufficExpression = string.Empty; for (var i = 0; i expressionArray.Length; i+) var input = expressionArrayi; if (string.IsNullOrEmpty(input) continue; if (IsNumber(input) sufficExpression += string.Format(0 , input); continue; else if (input = ) while (true) var popValue = operateStack.Pop(); if (popValue = () break; sufficExpression += string.Format(0 , popValue); else if (IsOperationChar(input) while (true) if (operateStack.IsEmpty() operateStack.Push(input); break; var popValue = operateStack.Pop(); if (!IsOperationChar(popValue) operateStack.Push(popValue); operateStack.Push(input); break; if (ComparePriority(input, popValue) = 0) sufficExpression += string.Format(0 , popValue); else operateStack.Push(popValue); operateStack.Push(input); break; else operateStack.Push(input); while (true) if (operateStack.IsEmpty() break; sufficExpression += string.Format(0 , operateStack.Pop(); return sufficExpression; 后缀表达式计算结果代码: public static string GetCalculateResult(string sufficExpression) var operateStack = new StackLinkList(); var expressionArray = sufficExpression.Split( ); for (int i = 0; i expressionArray.Length; i+) var inputChar = expressionArrayi; if (string.IsNullOrEmpty(inputChar) continue; if (!IsOperationChar(inputChar) & !IsNumber(inputChar) throw new ArgumentException(); if (IsNumber(inputChar) operateStack.Push(inputChar); else int stackTopLeft; int stackTopRight; if (!int.TryParse(operateStack.Pop(), out stackTopRight) | !int.TryParse(operateStack.Pop(), out stackTopLeft) throw new InvalidOperationException(); operateStack.Push(Caculator(inputChar, stackTopLeft, stackTopRight).ToString(CultureInfo.InvariantCulture); return operateStack.Pop(); 单元测试:private static void TestCaculator() var sufficExpression = Calculator.GetSufficExpression(9 + ( 3 - 1 ) * 3 + 10 / 2); Assert.IsEqual(sufficExpression.Trim( ), 9 3 1 - 3 * + 10 2 / +); var caculateResult = Calculator.GetCalculateResult(sufficExpression); Assert.IsEqual(caculateResult, 20); var sufficExpression1 = Calculator.GetSufficExpression(9 + ( 3 - 1 ); Assert.IsEqual(sufficExpression1.Trim( ), 9 3 1 - +); var caculateResult1 = Calculator.GetCalculateResult(sufficExpression1); Assert.IsEqual(caculateResult1, 11); var sufficExpression2 = Calculator.GetSufficExpression(9 + ( 3 - 1 ) * 2 + 8 / 2 * 3); Assert.IsEqual(sufficExpr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025山东大学核科学与能源动力学院非事业编制人员招聘1人备考考试试题及答案解析
- 2025四川乐山市农业技术(经济)助理岗招聘100人(第二批)备考考试题库附答案解析
- 2025黑龙江哈尔滨市呼兰区招聘公益性岗位45人考试模拟试题及答案解析
- 2025年甘肃省嘉峪关市第十一幼儿园招聘辅助用工人员备考考试题库附答案解析
- 2025云南能源职业技术学院省级产业导师选聘(15人)备考模拟试题及答案解析
- 2025西安市养老保险经办处招聘见习生(10人)备考考试题库附答案解析
- 2025年8月广东广州市天河区广氮实验幼儿园招聘编外聘用制专任教师2人考试模拟试题及答案解析
- 2025天津师范大学招聘工程管理岗和校园综合维修岗3人备考考试试题及答案解析
- 2025中烟益升华(福建厦门)滤嘴棒有限责任公司校园招聘45人备考模拟试题及答案解析
- 2025江苏苏州昆山高新集团有限公司招聘工作人员15人备考考试试题及答案解析
- 《ABB工业机器人虚拟仿真技术》(1+X) 课件全套 项目1-7 工业机器人仿真软件基本操作 -双机协同关节装配工作站虚拟仿真
- 设备安装、维修、调试、验收管理制度
- 医院副主任护师职称竞聘报告
- 2025年人教版新教材数学三年级上册教学计划(含进度表)
- 2025-2030AI辅助药物研发创新趋势分析与投资机会评估报告
- 2025年湖北省武汉市《公共基础知识》事业单位招聘考试国考真题(附答案)
- 2025秋教科版(2024)小学科学三年级上册教学计划及进度表(2025-2026学年第一学期)
- 融资专员考试题含答案
- 企业诉讼案件管理办法
- 成都数字化档案管理办法
- 《中国儿童幽门螺杆菌感染诊治专家共识(2022)》解读
评论
0/150
提交评论