用堆栈实现算术运算

老感觉自己对算法技术不太过硬,今天开始多学学别人好的算法。

以下为一个博主的简单算法,摘录一下:

以下是算法运算的核心:

/*选择行列标*/
int ChooseIJ(char index)
{
int i;
switch(index)
{
case ‘+‘:
i=0;
break;
case ‘-‘:
i=1;
break;
case ‘*‘:
i=2;
break;
case ‘/‘:
i=3;
break;
case ‘(‘:
i=4;
break;
case ‘)‘:
i=5;
break;
case ‘#‘:
i=6;
}

return i;
}

/*判断运算符优先级*/
char Judge(char top, char ch)
{
static char order[][7]={
// + - * / ( ) #
/* + */ ‘>‘,‘>‘,‘<‘,‘<‘,‘<‘,‘>‘,‘>‘,
/* - */ ‘>‘,‘>‘,‘<‘,‘<‘,‘<‘,‘>‘,‘>‘,
/* * */ ‘>‘,‘>‘,‘>‘,‘>‘,‘<‘,‘>‘,‘>‘,
/* / */ ‘>‘,‘>‘,‘>‘,‘>‘,‘<‘,‘>‘,‘>‘,
/* ( */ ‘<‘,‘<‘,‘<‘,‘<‘,‘<‘,‘=‘,‘ ‘,
/* ) */ ‘>‘,‘>‘,‘>‘,‘>‘,‘ ‘,‘>‘,‘>‘,
/* # */ ‘<‘,‘<‘,‘<‘,‘<‘,‘<‘,‘ ‘,‘=‘
};
int i,j;

i = ChooseIJ(top);
j = ChooseIJ(ch);

return order[i][j];
}

switch(Judge(GetTop(&Ope), c))
{
case ‘<‘://栈顶运算符优先级低于当前操作符, 接收下一个字符
Push(&Ope, c);
c = getchar();
break;
case ‘=‘://当遇到右括号时 就出括号, 并接收下一个字符
Pop(&Ope);
c = getchar();
break;
case ‘>‘://栈顶的操作符优先级高 , 说明需要运算 , 并将计算结果压入操作数栈中
chOpe = Pop(&Ope);
a = Pop(&Num);
b = Pop(&Num);
Push(&Num, Operate(b,chOpe,a));
break;
}

请问有几个人能看懂其中的内容

时间: 2024-10-13 12:05:58

用堆栈实现算术运算的相关文章

嵌入式系统C编程之堆栈回溯(二)

前言 本文作为<嵌入式系统C编程之堆栈回溯>的补充版.文中涉及的代码运行环境如下: 一  异常信号 信号就是软件中断,用于向正在运行的程序(进程)发送有关异步事件发生的信息.Linux应用程序发生异常时,操作系统会产生相应的信号.硬件检测到异常(非法指令.对无效的内存引用等)时也会通知内核,内核将其转换为适当的信号并发给该异常发生时正在运行的进程. 此外,进程可将信号发送给另一进程或进程组(调用kill函数),或向自身发送信号(调用raise函数). 系统中可产生并发送多种类型的信号.在Lin

PAT-l3-002堆栈

L3-002. 堆栈 大家都知道"堆栈"是一种"先进后出"的线性结构,基本操作有"入栈"(将新元素插入栈顶)和"出栈"(将栈顶元素的值返回并从堆栈中将其删除).现请你实现一种特殊的堆栈,它多了一种操作叫"查中值",即返回堆栈中所有元素的中值.对于N个元素,若N是偶数,则中值定义为第N/2个最小元:若N是奇数,则中值定义为第(N+1)/2个最小元. 输入格式: 输入第一行给出正整数N(<= 105).随

JVM学习(2)——技术文章里常说的堆,栈,堆栈到底是什么,从os的角度总结--转载http://www.cnblogs.com/kubixuesheng/p/5202561.html

转载自---http://www.cnblogs.com/kubixuesheng/p/5202561.html 俗话说,自己写的代码,6个月后也是别人的代码--复习!复习!复习!涉及到的知识点总结如下: 堆栈是栈 JVM栈和本地方法栈划分 Java中的堆,栈和c/c++中的堆,栈 数据结构层面的堆,栈 os层面的堆,栈 JVM的堆,栈和os如何对应 为啥方法的调用需要栈 属于月经问题了,正好碰上有人问我这类比较基础的知识,无奈我自觉回答不是有效果,现在深入浅出的总结下: 前一篇文章总结了:JV

delphi如何输出当前堆栈

想实现,输出当前运行的堆栈,有会的吗?给点思路 方法很多,参考: https://bitbucket.org/shadow_cs/delphi-leakcheck/ 的 https://bitbucket.org/shadow_cs/delphi-leakcheck/raw/25652a1e8909dd5e560dab50ec84f475da6ba803/Source/LeakCheck.Trace.DbgHelp.pas http://bbs.2ccc.com/topic.asp?topici

shell中如何进行算术运算

A=3 B=6 let 算术运算表达式  let C=$A+$B $[算术运算表达式]  C=$[$A+$B] $((算术运算表达式))  C=$(($A+$B)) expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用 C=`expr $A + $B`

03 php 数据类型:整数,进制转换,浮点,字符,布尔,数组,空类型,类型转换,算术运算,比较运算

03 数据类型:整数,进制转换,浮点,字符,布尔,数组,空类型,类型转换, 算术运算,比较运算,逻辑运算,短路现象, 三目运算符,字符型运算: 数据类型 整体划分 标量类型: int, float, string, bool 复合类型: array,     object 特殊类型: null,     resouce 整数类型int, integer 3种整数表示法 十进制写法:123: $n1 = 123; 八进制写法: 0123 $n2 = 0123; 十六进制写法: 0x123 $n3

数据结构Java实现05----栈:顺序栈和链式堆栈

数据结构Java实现05----栈:顺序栈和链式堆栈 一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作. 先进后出:堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈. 备注:栈本身就是一个线性表,所以我们之前讨论过线性表的顺序存储和链式存储,对于栈来说,同样适

使用Stack堆栈集合大数据运算

使用Stack堆栈集合大数据运算 package com.sta.to; import java.util.Iterator; import java.util.Stack; public class DaMax { public void jiaFa(String value1, String value2) { /** * 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com * @author 小沫 */ // 把字符串用toCharArray拆成字符 char[] c1

Linux学习记录-数字比较-if语句-算术运算

整数比较 -eq:等于 -nq:不等 -gt:大于 -lt:小于 -ge:大于等于 -le:小于等于 用法: A=3 B=4 [ $A -eq $B ] echo $? 逻辑与:&& 逻辑或:|| 变量名称: 1.只能包含字母.数字.下划线,并且不能数字开头 2.不应该跟系统中已经有的环境变量重名 3.最好做到见名知义 单分支if语句 if 判断条件: then statement1 statement2 .. fi 双分支的if语句 if判断条件:then statement1 stat