前缀表达式在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)。后缀表达式和前缀表达式都没有括号,给计算带来了方便。例如,当按后缀计算时,运算符按出现的顺序计算。本设计的主要任务是转换表达式形式,计算不同的表达式。

相关文章

发表新评论