資料結構之棧的應用
先實現求值這一步吧,已知字尾表示式
轉換這一環節待更新…
上**:
/* 中綴表示式轉字尾表示式(seqstack)以及求值
* version: 1.0(求值,需要自己輸入字尾表示式)
* 2.0(加上轉化功能)
* 演算法: 建立乙個運算元棧,自左向右遍歷字尾表示式,遇到乙個運算元就入棧,
* 遇到乙個操作符就從棧中取出兩個運算元進行當前計算,載把結果入棧,
* 直到表示式末尾, 最後乙個入棧的就是最終結果
*/#include #include #define maxsize 100
#define datatype int
typedef struct seqstack, *pseqstack;
// 初始化順序棧
pseqstack init_seqstack()
// 判斷棧空
int empty_seqstack(pseqstack s)
// 入棧
void push_seqstack(pseqstack s, datatype x)
else
}// 出棧,儲存棧頂元素於*x中,並刪除
void pop_seqstack(pseqstack s, datatype *x)
else
}// 取棧頂元素,只是獲取他的值並存入*x,並沒有取出來(刪除),注意區別
int gettop_seqstack(pseqstack s, datatype *x)
else
}// 銷毀棧,引數為待銷毀順序棧的指標位址
void destory_seqstack(pseqstack *s)
/* 判斷是否是運算元 */
int isnum(char c)
return 0;
}char transfer()
/* 核心函式 */
int calculate(char *a)
else
/* 臨時結果入棧 */
push_seqstack(s, c);
}ch = *a ++;
}gettop_seqstack(s, &result);
destory_seqstack(&s);
return result;
}int main();
printf("計算結果: %d\n",calculate(num));
return 0;
}
輸入:
char num[12] = ;
執行結果:
qian@qian-asus:~/vs code/data_structure/.vscode/examples$ cd "/home/qian/vs code/data_structure/.vscode/examples/" && gcc -g mid_2_suffix.c -o mid_2_suffix && "/home/qian/vs code/data_structure/.vscode/examples/"mid_2_suffix
5
中綴表示式轉字尾表示式求值
1.開始在棧中壓入乙個 然後從中綴表示式的左邊開始遍歷,如果遇到數字直接放入佇列。如果是操作符則和棧頂比較,如果優先順序大於棧頂則入棧,否則將棧頂壓入佇列並將當前操作符入棧。2.如果遇到 則無條件入棧不用和棧頂進行比較。3.如果遇到 不用入棧,從棧頂開始將棧內元素彈出並壓入佇列中,直到遇到 將 彈出...
中綴表示式轉字尾表示式 以及 字尾表示式求值
字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 6 5 2 3 8 3 則其求值過程如下 1 遍歷表示式,遇到的數字首先放入棧中,此時棧如下所示 2 接著讀到 則彈出3和2,執行3 2,計算結果等於5,並將5壓入到棧中。3 讀到8,將其直接放入棧中。4 讀到 彈...
C 實現中綴表示式轉字尾表示式並求值
中綴表示式 中綴記法 中綴表示式是一種通用的算術或邏輯公式表示方法,操作符以中綴形式處於運算元的中間。中綴表示式是人們常用的算術表示方法。雖然人的大腦很容易理解與分析中綴表示式,但對計算機來說中綴表示式卻是很複雜的,因此計算表示式的值時,通常需要先將中綴表示式轉換為字首或字尾表示式,然後再進行求值。...