资源简介
将一个表达式先转化为后缀式,然后利用后缀式求表达式的值,可计算多位数、小数、负数。
代码片段和文件信息
#include
#include
#include
#include
typedef struct exp{
char data;
struct exp *next;
}Enode*linkStack;
typedef struct num{
float data;
struct num *next;
}Nnode*linkNum;
linkStack initStack(linkStack *LS);
void Push(linkStack *LSchar x);
char Pop(linkStack *LS);
char gettop(linkStack S);
linkNum initNum(linkNum LS);
void NumPush(linkNum *LSfloat x);
float NumPop(linkNum *LS);
float gettop(linkNum LS);
int pre(char a);
void Negativechange(char a[]);
void Trans(char a[]char suff[]);
void suffix(char suff[]char a[]);
void main()
{
char f[80]a[80]suff[80];
int i=0;
puts(“please input your expression:“);
gets(a);
strcpy(fa);
Negativechange(a);
Trans(asuff);
suffix(sufff);
}
/////////////////////////////////////////////////////////////
linkStack initStack(linkStack LS)
{
return LS=NULL;
}
void Push(linkStack *LSchar x)
{
linkStack p=(linkStack)malloc(sizeof(Enode));
p->data=x;p->next=*LS;*LS=p;
}
char Pop(linkStack *LS)
{
linkStack p=*LS;
if(!(*LS))return NULL;
(*LS)=(*LS)->next;
return p->data;
free(p);
}
char gettop(linkStack LS)
{
if(!LS)return NULL;
return LS->data;
}
/////////////////////////////////////////////////////////////
linkNum initNum(linkNum LS)
{
return LS=NULL;
}
void NumPush(linkNum *LSfloat x)
{
linkNum p=(linkNum)malloc(sizeof(Nnode));
p->data=x;p->next=*LS;*LS=p;
}
float NumPop(linkNum *LS)
{
linkNum p=*LS;
if(!(*LS))return NULL;
(*LS)=(*LS)->next;
return p->data;
free(p);
}
float gettop(linkNum LS)
{
if(!LS)return NULL;
return LS->data;
}
/////////////////////////////////////////////////////////////
int pre(char a)
{
if(a==‘*‘||a==‘/‘)return 4;
else if(a==‘+‘||a==‘-‘)return 3;
else if(a==‘(‘)return 2;
else if(a==‘#‘)return 1;
else return 0;
}
void Negativechange(char a[])
- 上一篇:Harris角点检测算法实现C++
- 下一篇:C++实现的欧拉放大代码
评论
共有 条评论