鏈棧的應用 表示式運算

2021-10-11 02:04:26 字數 1991 閱讀 7584

//鏈棧的應用  表示式運算

#include

#include

using namespace std;

#define selemtype int

typedef

struct linknode

*linkstack;

//判空函式(鏈棧為空返回1;不為空返回0)

intisempty

(linkstack top)

//初始化鏈棧

void

initlinkstack

(linkstack &top)

//插入元素到鏈棧

void

push

(linkstack &top,selemtype val)

//刪除鏈棧的棧頂元素

void

pop(linkstack &top,selemtype &val)

val=top->data;

linkstack tempptr=top;

top=top->next;

delete tempptr;

}//跟之前的棧結構額外增加乙個gettop函式

selemtype gettop

(linkstack top)

//陣列左邊行:@,+,-,*,/,(,);

//陣列上邊列:@,+,-,*,/,(,);

//0表示上邊列的優先順序大於左邊行

//1表示上邊列的優先順序小於左邊行

int priority[7]

[7]=

,,,,

,,};

//返回操作符對應的行或列

intordofoptr

(char c)

return10;

}//判斷左邊與右邊的操作符的優先順序大小,如果左邊的操作符優先順序大於右邊,

//則返回1,否則,返回0

intpriofleftorright

(char left,

char right)

//判斷字元是運算元還是操作符,如果是運算元,返回1;如果是操作符,返回0

//弊端:只能處理一位數

intopndoroptr

(char c)

return0;

}//實現計算兩個運算元的加減乘除

intcalc

(char optr,

int left,

int right)if(

'-'==optr)if(

'*'==optr)if(

'/'==optr)

return0;

}//表示式運算

void

expeval

(char

*exp)

else

else

//如果右邊的操作符優先順序大於左邊時

// if(0==priofleftorright(optr,*exp))

// push(optr,*exp);}}

//字元右移

exp++;}

while

(isempty

(optr)==0

)}//輸出結果

cout<<

gettop

(opnd);}

intmain()

在這裡插入**片

執行結果截圖:

棧的應用 表示式運算

字首表示式 又稱波蘭表示法 polish notation,或波蘭記法 是一種邏輯 算術和代數表示方法,其特點是操作符置於運算元的前面,因此也稱做字首表示法。中綴表示式 通常將運算子寫在運算量之間,例如a b,這種表示法稱為中綴表示法。字尾表示式 字尾表示法又稱逆波蘭表示法,它是波蘭邏輯學家盧卡西維...

鏈棧(表示式求值)

include include includetypedef struct snode snode,linkstack int initstack linkstack s bool push linkstack s,char e 在棧頂插入元素e bool pop linkstack s,char ...

鏈棧以及順序棧應用 算數表示式

利用鏈棧將中綴表示式轉化為字尾表示式,然後利用順序棧進行掃瞄計算,返回結果 書上的 1 include 2 include 3 include 4 define size 50 5using namespace std 6 typedef struct node 7 linkstack,stackn...