課上資料結構作業,可以處理多位數輸入,負數輸入,小數輸入,必須合法輸入,無任何健壯性。。。
#include #include #include using namespace std;
templateclass stack ;
templateclass arraystack : public stack
arraystack()
void clear()
bool push(const t item)
else
}bool pop(t &item)
else
}void pop()
bool showtop(t &item)
else
}bool isempty()
};templatet stringtonum(const string &str)
//優先順序編碼
int priority(char c)
}}bool isoperator(char c) ;
int i;
for (i = 0; i < 5; ++i)
return false;
}bool isnumber(char c)
return false;
}void addspace(string &str)
//新增0,解決負數錯誤問題
void format(string &str)
//中綴轉字尾
int convert(string infixexp, string &postfixexp)
break;
case 4: //左括號直接入棧
s->push('(');
break;
case 3: //右括號,判空,依次彈出直到左括號
if (s->isempty())
else
}s->pop();
break;
case 2: //當輸入運算子
case 1:
char top;
s->showtop(top);
while (!s->isempty() && top != '(' && (priority(top) >= priority(infixexp[i])))
s->push(infixexp[i]);
break;}}
//輸出剩餘棧中的元素
while (!s->isempty())
return 0;
}void calculate(string postfixexp)
//如果是空格,則數字結束(多位處理)
else if (postfixexp[i] == ' ' && !temp.empty() && !isoperator(postfixexp[i]))
//如果是運算子
else if (isoperator(postfixexp[i]))
s->push(result);
}i++;
}s->showtop(top);
cout << "運算結果為: " << top << endl;
}int main()
資料結構 中綴表示式轉字尾表示式
話不多說上例子 1 2 3 4 5 1 2 3 4 5 中綴表示式轉字尾表示式思路分析 1.首先需要兩個棧運算子棧 s1和儲存中間結果的棧 s2 2.從左至右掃瞄中綴表示式 2.1當前為運算元,將其壓棧至s2 2.2當前為運算子 2.2.1如果s1為空或者棧頂運算子為左括號 則將此運算子直接入s1棧...
中綴表示式轉字尾表示式並計算字尾表示式的值
中綴表示式轉字尾表示式思路 首先給用到的每個操作符如 等按照他們原本的計算優先順序定義兩個代表優先順序的數值,如instackpri代表入棧之後的優先順序,outstackpri代表入棧之前的優先順序.然後掃瞄表示式,如果是數字,直接輸出,如果是 則將棧頂操作符依次出棧,直到遇到 如果是其他操作符,...
c 中綴表示式轉字尾表示式並計算
include include using namespace std 棧內優先順序 int isp char a 棧外優先順序 int icp char a 計算函式 int cal int a,int b,char c char in order expression 1000 中綴表示式 ch...