//鏈棧的應用 表示式運算
#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...