怎么用C语言栈实现表达式求值

如题所述

这个问题不是一两句话可以解释清楚的。这个要涉及到计算机编译原理课程的基本知识。其主要技术涉及到:表达式的分析与求值。表达式的分析与求值分为:前缀、中缀、及后缀。再具体的编程必须要参考 C 语言编程的书籍。我那会儿编程使用的书籍是《C 语言大全》,该书虽然比较老了,但是上面有很多现成的源代码可供参考。
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-13
你需要建立两个栈,一个放数据,一个放表达符。

C语言 任意表达式求值。(栈的应用
int s1[n0+1]; \/\/操作数栈 char s2[n0+1]; \/\/运算符栈 int t1,t2;int num[4]; \/\/提取表达式中的整数 void calcu() \/\/一次计算 { int x1,x2,x;char p;\/\/弹出一个运算符 p=s2[t2--];\/\/弹出两个操作数 x2=s1[t1--];x1=s1[t1--];\/\/进行一次运算 switch(p) { case ...

编写程序对表达式求值C语言
\/\/删除S的顶元素,并用e返回其值 Status Pop(SqStack *S, SElemType *e){ if(S->top == S->base)return ERROR;S->top--;e = *(S->top);return OK;} \/\/从栈底到栈顶依次对S的每个元素调用函数Visit(),一旦失败操作无效 Status ListTraverse(SqStack S,Status (*visit)(SElemTyp...

c语言表达式求值
\/\/若栈不为空,则删除s的栈顶元素,用e返回其值,并返回OK;否则返回ERROR if(S.top==S.base)return ERROR;e=*(--S.top);return OK;}\/\/Pop char Precede(char t,char c){ switch(c){ case '+':if(t=='+'||t=='-'||t=='*'||t=='\/'||t==')')return '>';else ret...

数据结构c语言版表达式求值标准程序
link head; \/\/ 指向栈顶第一个有效对象

算术表达式求值 C语言
int st[100]; \/\/转化过程使用的过度栈 char ch;int i=0,exindex=0,stindex=-1; \/\/i是str下标,exindex是expr下标,stindex是st下标 while((ch=str[i++])!='\\0'){ if(ch>='0' && ch<='9') \/\/判断是数字 { expr[exindex]=ch; \/\/压栈 exindex++; \/\/栈顶...

C语言 表达式求值 2\/5+3﹡(6-4)利用栈的定义怎么表示
建立俩个栈分别存放操作数和操作符,然后进行入栈操做就OK了

栈的应用举例:数制转换,表达式求值
关于表达式的分析与求值是计算机软件专业中“编译原理”课程极其重要的部分,主要用于最初的词法分析。其表示方式有:前缀、中缀、后缀表示法。其数据结构可以使用一个堆栈来表示。具体的实现代码,我以前使用的书籍是《C语言大全》,那上面就有完整的、现成的代码,可以供你参考运行。同时你还可以参考《编译...

C语言编程:1. 100以内任意数的阶乘。 2 。表达式求值
确保所有有效位都被输出。最后,使用getchar()函数读取输入缓冲区的剩余字符,以避免后续输入影响程序的执行。该程序通过TURBO C环境进行调试,并成功通过。综上所述,此C语言程序可以实现输入100以内任意整数并计算其阶乘的功能,通过TURBO C环境调试验证。程序设计合理,逻辑清晰,可以满足需求。

谁有c语言的后缀表达式求值
if(c==')')return('=');if(c=='#')return(' ');else return('<');if(GetTop(OPTR)==')')if(c=='(')return(' ');else return('>');if(GetTop(OPTR)=='#')if(c=='#')return('=');if(c==')')return( );else return('<');} Status In(c,OP){ if(c=='+'...

C语言表达式求值
int precede(char op1,char op2)\/\/> 1,= 0,<-1 { switch(op1){ case '+':if(op2=='+' || op2=='-' || op2==')' || op2=='#')return 1;return -1;case '-':if(op2=='+' || op2=='-' || op2==')' || op2=='#')return 1;return -1;case '*':if(op2==...

相似回答
大家正在搜