資料結構 棧的應用

2021-10-14 12:00:01 字數 2175 閱讀 9435

stack.h

#include

#include

typedef

char elemtype;

typedef

struct stackstack,

*stackptr;

//初始化棧

void

initstack

(stackptr &s)

//判空

bool stackempty

(stackptr s)

//入棧

void

push

(stackptr &s,elemtype e)

//出棧

void

pop(stackptr &s,elemtype &e)

//獲得棧頂元素

elemtype gettop

(stackptr s)

#include

#include

#include

"stack.h"

/*-------------------------

|中綴表示式 轉 字首表示式|

-------------------------*/

void

infix_to_prefix

(char str)

else

if(str[i]

=='('

)pop

(optr,e)

;//右括號出棧

}else

if(str[i]

=='+'

|| str[i]

=='-'

)push

(optr,str[i]);

//將'+'或'-'入棧

}else

}// 將剩餘運算元入result棧

while(!

stackempty

(optr)

)//輸出

printf

("\n字首表示式:");

while(!

stackempty

(result))}

/*-------------------------

|中綴表示式 轉 字尾表示式|

-------------------------*/

void

infix_to_suffix

(char str)

// 是符號

else

if(str[i]

=='+'

|| str[i]

=='-'

)push

(optr,str[i]);

//將'+'或'-'入棧

}else

if(str[i]

==')'

)pop

(optr,e)

;//左括號出站

}else

}// 將剩餘運算元輸出

while(!

stackempty

(optr))}

//中綴表示式求值

char op=

;char prior[

100]

[100]=

;int

locate

(char op,

char c)

}char

compare

(char theta1,

char theta2)

intoperate

(int a,

char theta,

int b)

}int

evaluateexpression

(char str)

push

(opnd,num);}

else

switch

(compare

(gettop

(optr)

,*p))}

return

gettop

(opnd)

;int

main()

測試結構:

資料結構 棧應用

一 算術表示式的中綴表示 把運算子放在參與運算的兩個運算元中間的算術表示式稱為中綴表示式。例如 2 3 4 6 9 算術表示式中包含了算術運算子和算術量 常量 變數 函式 而運算子之間又存在著優先順序,不能簡單地進行從左到右運算,編譯程式在求值時,不能簡單從左到右運算,必須先算運算級別高的,再算運算...

資料結構 棧的應用

要求 首先將運算元棧opnd設為空棧,而將 作為運算子棧opter的棧底元素,這樣的目的是判斷表示式是否求值完畢 2 依次讀入表示式的每個字元,表示式須以 結尾,若是運算元則入棧opnd,若是運算子,則將此運算子c與opter的棧頂元素top比較優先順序後執行相應的操作,具體操作如下 i 若top的...

資料結構 棧的應用

棧是限制插入和刪除只能在乙個位置上進行的表,該位置是表的末端,也叫做棧頂。對棧的操作有進棧和出棧,進棧也叫做插入,出棧也就是刪除最後插入的元素。因此棧也被稱作lifo 後進先出 表。棧通常有兩種實現方式,陣列實現和鍊錶實現。下面是棧的兩個小應用demo 字串逆序 由於棧後進先出的特性,所以棧可以用於...