利用鏈棧將中綴表示式轉化為字尾表示式,然後利用順序棧進行掃瞄計算,返回結果
書上的**
1 #include 2 #include 3 #include 4#define size 50
5using
namespace
std;
6 typedef struct
node
7*linkstack,stacknode;
11 typedef struct
//運算元棧
12opstack;
16void initstack(linkstack *top)
1721
bool
isempty(linkstack top)
2227
void pushstack(linkstack top,char
e)28
35bool popstack(linkstack top,char *e)
3645
int getstack(linkstack top,char *e)
4654
/********************關於棧的一些操作*******************
*/55
void translate(char str,char exp)//
掃瞄的元素優先順序高於棧頂元素,則入棧,低於則將棧頂元素放置於字尾表示式中,其中)優先順序最低
5678 popstack(s,&e); //
將左括號出棧
79break;80
case'+
':81case'-
':82while(!isempty(s)&&getstack(s,&e)&&e!='('
)8388pushstack(s,ch);
89break;90
case'/
':91case'*
':92while(!isempty&&getstack(s,&e)&&(e=='
*'||e=='
/'))//
先對同等級的出棧
9398
pushstack(s,ch);
99break
;100
default
:101
while(ch>='
0'&&ch<='
9') //
此方法可以計算多位數,乙個多位整數結束後以空格隔開
102107 i--;
108 exp[j]='';
109 j++;
110}
111 ch=str[i];
112 i++;
113}
114while(!isempty(s)) //
將字串結束符送入陣列中
115120 exp[j]='\0'
;121
}122
float compute(char
a)123
139 s->top++;
140 s->data[s->top]=value;
141}
142else
143177 i++;
178}
179}
180return
result;
181}
182int
main()
183
Dijkstra的雙棧算數表示式求值演算法
說明 這個演算法的輸入要求是必須補全所有括號,否則演算法會出錯,數字和符號之間應該留有乙個空格。import edu.princeton.cs.algs4.stack import edu.princeton.cs.algs4.stdin import edu.princeton.cs.algs4....
利用棧計算算數表示式的值
先將中綴表示式利用棧轉換為字尾表示式,然後再利用棧由字尾表示式計算算數表示式的值,具體 如下 include using namespace std include include include enum type enum operat struct cell input 1 2 3 4 5 中...
順序棧的應用 表示式求值
順序棧的應用 表示式求值 允許使用者輸入空格 系統自動刪除 只能進行整數的四則運算,支援小括號 對不能整除的將按兩個整數除法規則進行取整 include include define ok 1 define error 0 define true 1 define false 0 define st...