表达式求值:
表达式求值是程序设计语言编译中的一个基本问题,任何一个表达式都有操作数、运算法则和界限符组成。其中操作数可以是常量、变量或常量标识符。运算符可以分为算术运算符、关系运算符和逻辑运算符。
对于表达式的记法主要有三种:前缀表达式(波兰式)、中缀表达式和后缀表达式(逆波兰式),它们之间的区别在于运算符相对于操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前,中缀表达式的运算符位于与其相关的操作数中间,而后缀表达式的运算符位于与其相关的操作数之后。例如给定表达式: ( a + b ) * ( c - d / e ) - f ;
前缀表达式: - * + a b - c / d e f
中缀表达式: a + b * c - d / e - f
后缀表达式:a b + c d e / - * f -
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#include<iostream>
#define SElemType int
#define inf 0x3f3f3f3f
using namespace std;
typedef struct LNode{
SElemType data;
struct LNode *next;
LNode (SElemType Data=0,struct LNode * Next=NULL){
data=Data;
next=Next;
}
}LNode ,*LinkList ;
void InitStack(LinkList &LS){
LS=NULL;
}
bool StackEmpty(LinkList LS){
return LS?false:true;
}
int StackLength(LinkList Ls){
int cnt=0;
LinkList p=Ls;
while(p){
cnt++;p=p->next;
}
return cnt;
}
void Push(LinkList &LS,SElemType e){
LinkList s;
s=new LNode(e,LS);
LS=s;
}
void Pop(LinkList &LS,SElemType &e){
if(LS==NULL){
printf("error !!! Stack is empty !\n");
return ;
}
e=LS->data;
LinkList s=LS;
LS=LS->next;
delete s;
}
void GetTo