C语言代码补全:前缀表达式求值
#includestdio.h
#includestdlib.h
#define MAXNUM 100
typedef struct Node //定义存储中缀表达式的结点类型
{int data;
int data1;
char data2;
struct Node *next;
}Lnode;
typedef struct Node2 //定义存储前缀表达式的结点类型
{int data;
int data1;
char data2;
struct Node2 *next;
struct Node2 *prior;
}Lnode2;
typedef int selemtype1; //定义运算数栈的结点
typedef struct //定义运算数栈的类型
{selemtype1 *base;
selemtype1 *top;
}sqstack1;
void InitStack1(sqstack1 s) //新建一个空运算数栈
{s.base=(selemtype1 *)malloc(MAXNUM*sizeof(selemtype1));
s.top=s.base;
if(!s.base) printf(“出错:申请空间失败!\n”);
}
void Push1(sqstack1 s,selemtype1 e) //运算数栈,入栈:插入元素e为新的栈顶元素
{ if(s.top-s.base=MAXNUM)
printf(“出错:表达式过长!1\n”);
*s.top++ =e;
}
void GetTop1(sqstack1 s,selemtype1 e) //运算数栈,用e返回栈顶元素 {e=*(s.top-1);
}
void Popopnd1(sqstack1 s,selemtype1 e) //运算数栈,退栈:删除栈顶元素,并用e返回其值
{e=*–s.top;
}
int stackempy1(sqstack1 s) //运算数栈,若为空栈返回1,否则返回0 {if(s.top==s.base) return 1;
else return 0;
}
typedef char selemtype2; //定义运算符栈的结点类型
typedef struct //定义运算符栈类型
{selemtype2 *base;
selemtype2 *top;
}sqstack2;
void InitStack2(sqstack2 s) //新建一个空运算符栈
{s.base=(selemtype2 *)malloc(MAXNUM*sizeof(selemtype2));
s.top=s.base;
if(!s.base) printf(“出错:申请空间失败!\n”);
}
void Push2(sqstack2 s,selemtype2 e) //运算符栈,入栈:插入元素e为新的栈顶元素
{ if(s.top-s.base=MAXNUM)
printf(“出错:表达式过长!2\n”);
*s.top++ =e;
}
void GetTop2(sqstack2 s,selemtype2 e) //运算符栈,用e返回栈顶元素 {e=*(s.top-1);
}
void Popopnd2(sqstack2 s,selemtype2 e) //运算符栈,退栈:删除栈顶元素,并用e返回其值
{e=*–s.top;
}
int stackempy2(sqstack2 s) //运算符栈,若为空栈返回1,否则返回0 {if(s.top==s.base) return 1;
else return 0;
}
怎么用c语言编程求前缀表达式
是给你一个中缀或者
后缀表达式
让你求
前缀表达式
么?用数据结构里树的遍历来实现。前缀表达式就是先根序遍历,中缀表达式就是
中序遍历
,后缀表达式就是
后序遍历
。用一个栈来实现就行
*(E,E)|+(E,E)|a’>C语言:前缀表达式和后缀表达式的文法分别为前缀表达式 E->*(E,E)|+(E,E)|a
#includestdio.h
#includeiostream
#includestring
#includestack
using namespace std;
int main() {
string str;
stackcharmystack;
while (getline(cin, str)) {
printf(“\n”);
for (int i = 0; i str.size(); i++) {
if (str[i] == ‘a’ or str[i]==’,’) {
cout str[i];
}
else if (str[i] == ‘+’ or str[i] == ‘-‘ or str[i] == ‘*’ or str[i] == ‘/’ ) {
mystack.push(str[i]);
}
else if (str[i] == ‘(‘) {
cout str[i];
}
else if (str[i] == ‘)’) {
cout str[i] mystack.top();
mystack.pop();
}
}
}
}
在C语言中前缀表达式怎么转化为中缀表达式
我只能告诉你用二叉树实现。树的前中后根遍历分别输出前中后缀表达式。
公共前后缀如何进行计算用c语言表达
表达式是数据运算的基本形式。人们的书写习惯是中缀式,如:11+22*(7-4)/3。前缀式的计算按运算符的优先级及括号优先的原则,相同级别从左到右进行计算。表达式还有后缀式(如:22 7 4 – * 3 / 11 +)和前缀式(如:+ 11 / * 22 – 7 4 3)。后缀表达式和前缀表达式中没有括号,给计算带来方便。如后缀式计算时按运算符出现的先后进行计算。本设计的主要任务是进行表达式形式的转换及不同形式的表达式计算