先擺上資源:
逆波蘭式求值
第一步、生成中綴表示式
第二步、中綴表示式轉換為字尾表示式
第三步、字尾表示式求值
本次實驗採用自主設計鏈式堆疊結構儲存資料
linkedstack儲存中綴及字尾表示式
#pragma once
#include using namespace std;
typedef struct sign ;
class linkedstack
;#include "linkedstack.h"
#include linkedstack::linkedstack()
linkedstack::~linkedstack()
void linkedstack::push(string str)
void linkedstack::pop()
string linkedstack::front()
int linkedstack::frontlevel()
bool linkedstack::isempty()
int linkedstack::compare(string str)
return level;
}void linkedstack::show()
cout << endl;
}
newstack儲存運算的中間結果
#pragma once
#include using namespace std;
struct sign
;class newstack
;#include "newstack.h"
newstack::newstack()
newstack::~newstack()
void newstack::push(double sign)
void newstack::pop()
double newstack::front()
第一步、由運算表示式生成中綴表示式
void rpn::generatenifix() //生成字首表示式
nifix->push(temp);
} else
}if(str != "")
nifix->push(str);
linkedstack * tempstack = new linkedstack();
//字首表示式儲存逆轉
while (!nifix->isempty())
nifix = tempstack;
cout << "中綴表示式:";
nifix->show();
}
第二步、中綴表示式轉換為字尾表示式
void rpn::generatepostfix() //生成字尾表示式
else
if (str == ")")
operatorstack.pop();
continue;
}if (operatorstack.isempty())
if (level <= operatorstack.frontlevel())
if (level > operatorstack.frontlevel())
}} while (!operatorstack.isempty())
//逆轉儲存
linkedstack * temp = new linkedstack();
while (!postfix->isempty())
postfix = temp;
cout << "字尾表示式:";
postfix->show();
}
第三步、計算字尾表示式
double rpn::calculate() //計算字尾表示式
else
}} return st.front();
}
逆波蘭式與表示式求值
波蘭式 逆波蘭式是資料結構和編譯原理裡面提到的知識點,我們平時的表示式都是這樣的2 3 5 1 10 中綴表示式 這樣表示式易於閱讀和計算,但是對於計算機這樣就有點懵逼了。字首表示式 比如2 3 5 1 這個表示式的字首表示式為 2 3 5 1來表示 波蘭表示式 中綴序表示式 比如 2 3 5 1 ...
逆波蘭式與表示式求值
波蘭式 逆波蘭式是資料結構和編譯原理裡面提到的知識點,我們平時的表示式都是這樣的2 3 5 1 10 中綴表示式 這樣表示式易於閱讀和計算,但是對於計算機這樣就有點懵逼了。字首表示式 比如2 3 5 1 這個表示式的字首表示式為 2 3 5 1來表示 波蘭表示式 中綴序表示式 比如 2 3 5 1 ...
棧的運用 6 逆波蘭式求值
問題描述 對以逆波蘭式的表示式求值。問題分析 上一題是把中綴表示式程式設計逆波蘭式,要對逆波蘭的表示式的求解就更簡單些了。view code 1 include2 include3 define stack init size 100 4 define stackincrement 10 5 typ...