前缀表达式在C语言中的实现
# includestdio.h
#includestdlib.h
#定义最大数量100
Typedef struct Node //定义存储中缀表达式的节点类型。
{int数据;
int data1
char data2
结构节点* next
} Lnode
Typedef struct Node2 //定义用于存储前缀表达式的节点类型。
{int数据;
int data1
char data2
struct Node2 * next
结构Node2 * prior
} Lnode2
typedef int selemtype1//定义操作数堆栈的节点。
Typedef struct //定义操作数堆栈的类型。
{ selemtype1 * base
selemtype1 * top
} sqstack1
Void InitStack1(sqstack1 s) //创建一个新的空运算术堆栈。
{ s . base =(selem type 1 *)malloc(MAXNUM * sizeof(selem type 1));
s . top = s . base;
如果(!S.base) printf("错误:申请空间失败!\ n ");
}
Voidpush1 (sqstack1s,selem type 1 e)//操作数stack,stack:插入元素e作为新的栈顶元素。
{ if(s.top-s.base=MAXNUM)
Printf("错误:表达式太长!1 \ n ");
* s . top = e;
}
Voidgettop1 (sqstack1s,selem type 1 e)//操作数堆栈,e用于返回顶层元素{ e = *(s . top-1);
}
Voidppopopnd1 (sqstack1s,selem type 1 e)//操作数栈,栈展开:删除栈顶元素,用e返回其值。
{ e = *-s . top;
}
intstackpy 1(sqstack 1s)//操作数栈,如果为空,返回1,否则返回0 {if(s.top==s.base)返回1;
否则返回0;
}
typedef char selemtype2//定义运算符堆栈的节点类型。
Typedef struct //定义运算符堆栈类型。
{ selemtype2 * base
selemtype2 * top
} sqstack2
Void InitStack2(sqstack2 s) //创建一个新的空运算符堆栈。
{ s . base =(selem type 2 *)malloc(MAXNUM * sizeof(selem type 2));
s . top = s . base;
如果(!S.base) printf("错误:申请空间失败!\ n ");
}
Voidpush2 (sqstack2s,selem type 2e)//运算符stack,stack:插入元素e作为新的栈顶元素。
{ if(s.top-s.base=MAXNUM)
Printf("错误:表达式太长!2 \ n ");
* s . top = e;
}
Void get top2 (sqstack2s,selem type 2e)//运算符栈,用e返回栈顶元素{ e = *(s . top-1);
}
Voidppopopnd2 (sqstack2s,selem type 2e)//运算符栈,栈展开:删除栈顶元素,用e返回其值。
{ e = *-s . top;
}
intstackpy 2(sqstack 2s)//运算符堆栈,如果为空则返回1,否则返回0 {if(s.top==s.base)返回1;
否则返回0;
}
如何用C语言编程寻找前缀表达式 是给你一个中缀还是
后缀表达式
让你乞讨
波兰表示法
什么?通过遍历数据结构中的树来实现。前缀表达式是先根顺序遍历,中缀表达式是
有序遍历
后缀表达式是
后序遍历
。用一个栈来实现就行了。
C语言:前缀表达式和后缀表达式的语法分别是前缀表达式E->*(E,E)| (E,E)|a。 # includestdio.h
#includeiostream
#includestring
#包含堆栈
使用命名空间std
int main() {
字符串str
stackcharmystack
while (getline(cin,str)) {
printf(" \ n ");
for(int I = 0;I str . size();i ) {
if (str[i] == 'a '或str[i] == ','){
cout str[I];
}
else if (str[i] == ' '或str[i] == '-'或str[i] == '* '或str[i] == '/' ) {
my stack . push(str[I]);
}
else if (str[i] == '(') {
cout str[I];
}
else if (str[i] == ')') {
cout str[I]my stack . top();
my stack . pop();
}
}
}
}
C语言中前缀表达式如何转化为中缀表达式 我只能告诉你用二叉树。遍历树的前、中、后根,分别输出前、中、后缀表达式。
如何计算C语言中常用的前缀和后缀 表达式是数据操作的基本形式。人的书写习惯是中缀,比如:11 22*(7-4)/3。前缀类型的计算基于运算符优先和括号优先的原则,从左到右计算同一级别。还有后缀表达式(如:22 7 4-* 3/11)和前缀表达式(如:11/* 22-7 4 3)。后缀表达式和前缀表达式都没有括号,给计算带来了方便。例如,当按后缀计算时,运算符按出现的顺序计算。本设计的主要任务是转换表达式形式,计算不同的表达式。
最后更新于 2023-10-07 18:11:23 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章