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

2022-05-28 01:24:07 字數 1835 閱讀 8651

利用鏈棧將中綴表示式轉化為字尾表示式,然後利用順序棧進行掃瞄計算,返回結果

書上的**

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...