資源簡介
將一個表達式先轉化為后綴式,然后利用后綴式求表達式的值,可計算多位數、小數、負數。
代碼片段和文件信息
#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++實現的歐拉放大代碼
評論
共有 條評論