資料結構 棧應用之逆波蘭表示式(字尾表示式)

2021-08-29 18:11:00 字數 2018 閱讀 6975

逆波蘭表示式含義我就不做贅述了,摘自百科上的一段話:

逆波蘭表示式又叫做字尾表示式。在通常的表示式中,二元運算子總是置於與之相關的兩個運算物件之間,這種表示法也稱為中綴表示。波蘭邏輯學家j.lukasiewicz於2023年提出了另一種表示表示式的方法,按此方法,每一運算子都置於其運算物件之後,故稱為字尾表示。

逆波蘭表示式,它的語法規定,表示式必須以逆波蘭表示式的方式給出。逆波蘭表示式又叫做字尾表示式。這個知識點在資料結構和編譯原理這兩門課程中都有介紹,下面是一些例子:

正常的表示式 逆波蘭表示式

a+b ---> a,b,+

a+(b-c) ---> a,b,c,-,+

a+(b-c)*d ---> a,b,c,-,d,*,+

a+d*(b-c)--->a,d,b,c,-,*,+

a=1+3 ---> a,1,3,+,=

用途逆波蘭表示式是一種十分有用的表示式,它將複雜表示式轉換為可以依靠簡單的操作得到計算結果的表示式。例如(a+b)*(c+d)轉換為ab+cd+*

優勢它的優勢在於只用兩種簡單操作,入棧和出棧就可以搞定任何普通表示式的運算。其運算方式如下:

如果當前字元為變數或者為數字,則壓棧,如果是運算子,則將棧頂兩個元素彈出作相應運算,結果再入棧,最後當表示式掃瞄完後,棧裡的就是結果。

以上紅線為劃重點,如果沒理解這句話的意思,那麼接下來的**就不用看了(無奈~~)

//

// created by administrator on 2018/5/28.

////逆波蘭表示式(字尾表示式)

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#define elementtype int

#define maxsize 20

//定義棧的結構體

typedef struct stack;

/** * 初始化棧

* @param s

*/void initstack(stack *s)

s->top = s->base;

s->stacksize = maxsize;

}/**

* 入棧

* @param s 棧

* @param e 入棧元素

*/void push(stack *s, elementtype e)

*(s->top) = e; //賦值

s->top++;

}/**

* 出棧

* @param s 棧

* @return

*/elementtype pop(stack *s)

s->top--;

elementtype e = *(s->top);//取值,並不是取位址

return e;

}/**

* 棧當前容量

* @param s

* @return

*/elementtype getlen(stack s)

int main() ;

stack stack;

initstack(&stack);

int len = strlen(exp);

int length = sizeof(exp) / sizeof(exp[0]);

for (int i = 0; i < length; i++)

temp = b / a;

push(&stack, temp);

break;

default:

temp = p - 48;

push(&stack, temp);

break;}}

char sum = pop(&stack);

printf("\n表示式計算結果 value=%d\n", sum);

資料結構之用棧實現逆波蘭表示式

逆波蘭表示式也稱為字尾表示式,它將乙個算數表示式不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行,如下圖所示 在這裡我們可以運用棧的特點來實現字尾表示式,思路如下 1.首先當遇到運算運算元時將其進行push操作 2.當遇到操作符是將此時的棧pop兩次,先取出的...

棧的應用 逆波蘭表示式

逆波蘭表示式又稱為 字尾表示式 例 4.99 1.06 5.99 6.99 1.06 的字尾表示式為 4.99 1.06 5.99 6.99 1.06 正常寫的表示式又稱為中綴表示式,如何將乙個中綴表示式表示式轉換成字尾表示式?這裡就要用到棧。但見到乙個數時就把他推入棧中,在遇到乙個運算子時就將該運...

棧的應用 逆波蘭表示式

逆波蘭表示式,它的語法規定,表示式必須以逆波蘭表示式的方式給出。逆波蘭表示式又叫做字尾表示式。這個知識點在資料結構和編譯原理這兩門課程中都有介紹,下面是一些例子 正常的表示式 逆波蘭表示式 a b a,b,a b c a,b,c,a b c d a,b,c,d,a d b c a,d,b,c,a 1...