123 #include 4
using
namespace std;
56 template class mystack
7 ;20
2122 template void mystack::init()
23 26
27 template bool mystack::empty()
28 31
32 template t mystack::gettop()
33 39
return
this->data[this->top-1];
40 }
4142 template void mystack::push(t x)
43 49
this->data[this->top] =x;
50this->top ++;
51 }
5253 template t mystack::pop()
54 60
61 t e =this->data[this->top-1];
62this->top --;
63return e;
64 }
//prefixtopostfix.h
#include using
namespace std;
bool isoperator(char op); //
判斷是否為運算子
int priority(char op); //
求運算子優先順序
void postfix(char pre , char post,int &n); //
把中綴表示式轉換為字尾表示式
double read_number(char str,int *i); //
將數字字串轉變成相應的數字
double postfix_value(char post); //
由字尾表示式字串計算相應的中值表示式的值
//prefixtopostfix.cpp
#include "
mystack.h
"#include "
prefixtopostfix.h
"#include using
namespace std;
void main()
bool isoperator(char op)
}int priority(char op)}//
把中綴表示式轉換為字尾表示式,返回字尾表示式的長度(包括空格)
void postfix(char pre ,char post,int &n)
else
if (pre[i]=='
(') //
遇到「(」不用比較直接入棧
stack.push(pre[i]);
else
if(pre[i] =='
)') //
遇到右括號將其對應左括號後的操作符(操作符棧中的)全部寫入字尾表示式
stack.pop(); //
將「(」出棧,字尾表示式中不含小括號
}else
if (isoperator(pre[i]))
stack.push(pre[i]); //
當前操作符優先順序大於棧頂操作符的優先順序,將該操作符入棧
}i++;
}while(stack.top) //
將所有的操作符加入字尾表示式
}double read_number(char str,int *i)
if(str[*i]=='
.') //
處理小數部分
字首 中綴 字尾表示式及中綴轉字尾表示式
字首表示式 不含括號的算術表示式,而且是將運算子寫在前面,運算元寫在後面的表示式。求法 首先從右往左掃瞄表示式,從右邊第乙個字元判斷,如果當前字元是數字,則一直到字串的末尾再記錄下來 如果是運算子,則將右邊最近的兩個數字串做相應的運算,以此作為乙個新串並記錄下來。一直掃瞄到最左端停止。例子 a b ...
中綴表示式轉字尾表示式
using system using system.collections.generic using system.text namespace 中綴表示式轉字尾表示式 class convert public void run top break case case while top 1 st...
中綴表示式轉字尾表示式
將乙個普通的中綴表示式轉換為字尾表示式的一般演算法是 首先需要分配2個棧,乙個作為臨時儲存運算子的棧s1 含乙個結束符號 乙個作為輸入字尾表示式的棧s2 空棧 s1棧可先放入優先順序最低的運算子 注意,中綴式應以此最低優先順序的運算子結束。可指定其他字元,不一定非 不可。從中綴式的左端開始取字元,逐...