資源簡介
中綴表達式轉化成后綴表達式并計算C++實現(xiàn)
代碼片段和文件信息
/*通過棧的方式實現(xiàn)中綴表達式轉化成后綴表達式
??通過棧的方式實現(xiàn)后綴表達式的計算
??計算表達式數(shù)字可以為正整數(shù)和正小數(shù)*/
#include?
#define?Max?100000
using?namespace?std;
struct?node1
{
????char?val;
????node1?*?next;
};
typedef?node1?*?STACK1;
typedef?char?Elementtype1;
void?MakeNull1?(STACK1?&S)
{
????S=new?node1;
????S->next=NULL;
}
void?Push1?(?Elementtype1?x?STACK1?&S)
{
????STACK1?stk;
????stk=new?node1;
????stk->val=x;
????stk->next=S->next;
????S->next=stk;
}
void?Pop1?(?STACK1?&S)
{
????STACK1?stk;
????if?(?S->next?)
????{
????????stk=S->next;
????????S->next=stk->next;
????????delete?stk;
????}
}
char?Top1?(STACK1?S)
{
????if?(S->next)
????????return(S->next->val);
????else
????????return?NULL;
}
bool?Empty1(STACK1?S)
{
????if?(S->next)
????????return?false;
????else
????????return?true;
}
struct?node2
{
????float?val;
????node2?*?next;
};
typedef?node2?*?STACK2;
typedef?float?Elementtype2;
void?MakeNull2?(STACK2?&S)
{
????S=new?node2;
????S->next=NULL;
}
void?Push2?(?Elementtype2?x?STACK2?&S)
{
????STACK2?stk;
????stk=new?node2;
????stk->val=x;
????stk->next=S->next;
????S->next=stk;
}
void?Pop2?(?STACK2?&S)
{
????STACK2?stk;
????if?(?S->next?)
????{
????????stk=S->next;
????????S->next=stk->next;
????????delete?stk;
????}
}
float?Top2?(STACK2?S)
{
????if?(S->next)
????????return(S->next->val);
????else
????????return?NULL;
}
bool?Empty2(STACK2?S)
{
????if?(S->next)
????????return?false;
????else
????????return?true;
}
void?change?(char?a[]?char?b[])//將中綴表達式轉化成后綴表達式
{
????STACK1?s;
????MakeNull1?(s);
????int?i=0?j=0;
????while?(a[i]!=‘\0‘)
????{
????????if?((a[i]>=‘0‘&&a[i]<=‘9‘)||a[i]==‘.‘)
????????{
????????????b[j]=a[i];
????????????j++;
????????}
????????else
????????{
????????????b[j]=‘?‘;
????????????j++;
????????????if?(a[i]==‘(‘)
????????????{
????????????????Push1(a[i]?s);
????????????}
????????????else?if?(a[i]==‘)‘)
????????????{
????????????????while?(Top1(s)!=‘(‘)
????????????????{
????????????????????b[j]=Top1(s);
????????????????????Pop1(s);
????????????????????j++;
????????????????}
????????????????Pop1(s);
????????????}
????????????else?if?(a[i]==‘*‘||a[i]==‘/‘)
????????????{
????????????????while?(Top1(s)!=‘(‘&&!Empty1(s)&&To
- 上一篇:編譯器前兩步
- 下一篇:C++打印PDF文件分頁打印等功能 具體請看博客
評論
共有 條評論