-
大小: 5KB文件類型: .c金幣: 1下載: 0 次發(fā)布日期: 2021-05-12
- 語言: 其他
- 標(biāo)簽:
資源簡介
問題描述
中綴表達(dá)式就是我們通常所書寫的數(shù)學(xué)表達(dá)式,后綴表達(dá)式也稱為逆波蘭表達(dá)式,在編譯程序?qū)ξ覀儠鴮懙某绦蛑械谋磉_(dá)式進行語法檢查時,往往就可以通過逆波蘭表達(dá)式進行。我們所要設(shè)計并實現(xiàn)的程序就是將中綴表示的算術(shù)表達(dá)式轉(zhuǎn)換成后綴表示,例如,將中綴表達(dá)式
(A 一 (B*C 十 D)*E) / (F 十 G )
轉(zhuǎn)換為后綴表示為:
ABC*D十E*—FG十/
注意:為了簡化編程實現(xiàn),假定變量名均為單個字母,運算符只有+,-,*,/ 和^(指數(shù)運算),可以處理圓括號(),并假定輸入的算術(shù)表達(dá)式正確。
要求:使用棧數(shù)據(jù)結(jié)構(gòu)實現(xiàn) ,輸入的中綴表達(dá)式以#號結(jié)束
輸入
整數(shù)N。表示下面有N個中綴表達(dá)式
N個由單個字母和運算符構(gòu)成的表達(dá)式
輸出
N個后綴表達(dá)式。
代碼片段和文件信息
#include
#include?
#include?
#define?Error(?Str?)????????FatalError(?Str?)
#define?FatalError(?Str?)???fprintf(?stderr?“%s\n“?Str?)?exit(?1?)
/*?START:?fig3_39.txt?*/
????????#ifndef?_Stack_h
????????#define?_Stack_h
typedef?int?ElementType;
struct?Node;
????????typedef?struct?Node?*PtrToNode;
????????typedef?PtrToNode?Stack;
????????int?IsEmpty(?Stack?S?);
????????Stack?CreateStack(?int?MaxElements?);
????????void?DisposeStack(?Stack?S?);
????????void?MakeEmpty(?Stack?S?);
????????void?Push(?ElementType?X?Stack?S?);
????????ElementType?Top(?Stack?S?);
????????void?Pop(?Stack?S?);
????????#endif??/*?_Stack_h?*/
/*?END?*/
????????struct?Node
????????{
????????????ElementType?Element;
????????????PtrToNode???Next;
????????};
????????int
????????IsEmpty(?Stack?S?)
????????{
????????????return?S->Next?==?NULL;
????????}
????????Stack
????????CreateStack(?int?MaxElements?)
????????{
????????????Stack?S;
S?=?(Stack)malloc(sizeof(struct?Node));
????????????if(?S?==?NULL?)
????????????????FatalError(?“Out?of?space!!!“?);
????????????S->Next?=?NULL;
????????????return?S;
????????}
????????void
????????MakeEmpty(?Stack?S?)
????????{
????????????if(?S?==?NULL?)
????????????????Error(?“Must?use?CreateStack?first“?);
????????????else
????????????????while(?!IsEmpty(?S?)?)
????????????????????Pop(?S?);
????????}
????????void
????????DisposeStack(?Stack?S?)
????????{
????????????MakeEmpty(?S?);
????????????free(?S?);
????????}
????????void
????????Push(?ElementType?X?Stack?S?)
????????{
????????????PtrToNode?TmpCell;
????????????TmpCell?=?(PtrToNode)malloc(?sizeof(?struct?Node?)?);
????????????if(?TmpCell?==?NULL?)
????????????????FatalError(?“Out?of?space!!!“?);
????????????else
????????????{
????????????????TmpCell->Element?=?X;
????????????????TmpCell->Next?=?S->Next;
????????????????S->Next?=?TmpCell;
????????????}
????????}
????????ElementType
????????Top(?Stack?S?)
????????{
????????????if(?!IsEmpty(?S?)?)
????????????????return?S->Next->Element;
????????????Error(?“Empty?stack“?);
????????????return?0;??/*?Return?value?used?to?avoid?warning?*/
????????}
????????void
????????Pop(?Stack?S?)
????????{
????????????PtrToNode?FirstCell;
????????????if(?IsEmpty(?S?)?)
????????????????Error(?“Empty?stack“?);
????????????else
????????????{
????????????????FirstCell?=?S->Next;
????????????
評論
共有 條評論