資料結構 四則運算

2021-06-26 00:14:58 字數 1635 閱讀 9392

1.平時我們所接觸到的四則運算都是中序表示式,而要進行程式設計計算時要考慮符號優先順序神馬的很麻煩,故通常將其轉換為前序表示式或者後序表示式:

中序表示式:

2*3/(2-1)+3*(4-1)

前序表示式:

+/*23-21*3-41

後序表示式:23*21-/341-*+

2.中序轉前序:

1.將中序表示式逆**)1-

4(*3

+)1-

2(/3

*2

2.處理逆轉後的字串:

1.如果是運算元,直接輸出;

2.如果是運算子

1.如果是「)」,直接入棧;

2.如果是「(」,連續出棧,直至遇到「(」;

3.如果既不是「)」,也是不是「(」

1.棧空,則入棧;

2.棧頂為「)」,則入棧;

3.如果此時符號優先順序》=棧頂元素優先順序,則入棧;否則出棧,直到棧中的符號優先順序大於此時符號或者棧為空;

3.處理完字串後,如果棧不為空,將棧中的符號輸出;   //14-3*12-32*/+

4.然後將字元從左到右遍歷,不斷的將離符號最近的兩個數進行進行運算(比如:912-),直到結尾;(按理論是將該字串逆轉變成前序表示式,然後在從右到左進行處理,後序表示式是從左到右進行處理);

3.程式如下:

#include #include #include #include using namespace std;

int stringint(string &a)

double charint(vector&vec)

//1.反轉表示式

void reserve(char *p)

sta1.pop(); //刪除')'

p++;

} else if(*p<='9' && *p>='0') //表示數字

vec1.push_back(vec11);

} else if(*p!='(' && *p!=')') //表示其他符號

; for( ; iterrow!=vec1.end(); iterrow++)

else if(i>2) //表示三個數以上連續乙個符號的情況,易錯點

}else

}return a[0];

}void calculate() //測試

; vector> vec1;

reserve(str);

getresult(str, vec1);

double result = calculate(vec1);

coutreturn 0;

}

參考文獻:

資料結構 四則運算

1 c語言實現科學計算器 2 c語言實現四則運算 小型計算器 3 經典演算法 算術表示式求值 4 棧 的典型應用 表示式求值 c語言實現 5 利用c語言 easyx圖形設計 製作簡易計算器 6 從鍵盤上輸入乙個字尾表示式,試編寫演算法計算表示式的值。規定 逆波蘭表示式的長度不超過一行,以符作為 輸入...

python四則運算程式 四則運算(Python)

四則運算程式 一 資訊 二.題目要求 寫乙個能自動生成小學四則運算題目的程式,然後在此基礎上擴充套件 除了整數以外,還要支援真分數的四則運算,例如 1 6 1 8 7 24 程式要求能處理使用者的輸入,判斷對錯,累積分數 程式支援可以由使用者自行選擇加 減 乘 除運算 三 import random...

資料結構 棧的四則運算實現

請各位大佬們賜教,目前該程式支援非負整數的四則運算僅支援 和 可以疊加多層。include include using namespace std bool isdigit char a intfd char a else if a a else if a else if a else if a i...