C語言中綴表示式轉化為字尾表示式

2021-09-03 01:20:08 字數 3874 閱讀 3873

#include

#include

#include

#include

//別靠空想!!!及其浪費時間!!!多謝謝偽**分析一下!!!

//字尾表示法計算時候的思路!!!先把元素推到棧中,每碰到乙個

char stack[50]

;char output[50]

;char nouse[50]

;int flag=0;

char sz[50]

;char laji[50]

;int szz[50]

;int jieguo[50]

;int wuyong[50]

;int laji1[50]

;int shangpinshu;

//我把提貨分成了兩種,完全提光的直接刪除鍊錶,不完全提光的修改一下就好了

//我在208行的main函式中對輸入是否合法進行了檢驗,附加功能,選單欄輸入是否合法的檢驗

typedef

struct goods //在此定義了鍊錶型別的結構體goods

linklist;

linklist *

creat

(int n)

//該函式的功能是初始化鍊錶,因為返回值linklist是乙個指標所以在creat前面加了個*

end->next =

null

;//結束建立

return head;

}// 定義鍊錶插入函式

// 在鍊錶位置第pos節點前插入包含資料val的節點

void

insertlist

(linklist *list,

int val,

int va2,

char zi1,

char zi2)

linklist *tmp =

(linklist*

)malloc

(sizeof

(linklist));

// 分配乙個臨時節點用來儲存要插入的資料

if(tmp ==

null

)// 插入節點

strcpy

(tmp->goodsname,zi1)

; tmp->next = p->next;

p->next = tmp;

}void

writetofile

(linklist *head,

int n)

if(flag==1)

fclose

(fp);}

}linklist *

readfromfile

(linklist *head,

int n)

if(flag==1)

fclose

(fp);}

return head;

}int ce[3]

=;int ce1[3]

=;void

push

(char stack3,

char push1)

;int

change

(char aa)

;void

pop(

char stack1,

char stack2)

//從第乙個棧彈出給第二個,必須堆疊中用東西才可以彈出

break;}

}push

(stack2,tmppop);}

void

push

(char stack3,

char push1)

else

stack3[0]

=push1;

break;}

}}}void

push1

(int stack31,

int push11)

else

stack31[0]

=push11;

break;}

}}}void

pop1

(int stack11,

int stack21)

//從第乙個棧彈出給第二個,必須堆疊中用東西才可以彈出

else

break;}

}}push1

(stack21,tmppop1);}

intchange

(char aa)

if(flag==0)

else

printf

("彈出從算符堆疊到nouse%c\n"

,stack[0]

);pop(stack,nouse)

;break;}

}break

;case

'+':

if(stack[0]

=='\0'

)else

else

}else

else}}

break

;case

'-':

if(stack[0]

=='\0'

)else

else

}else

else}}

break

;case

'*':

if(stack[0]

=='\0'

)else

else

else}}

break

;case

'/':

if(stack[0]

=='\0'

)else

else

else}}

break

;default:if

(aa==

'#')

else

break;}

}else}}

intmain()

printf

("請輸入表示式,開始需要輸入#\n");

scanf

("%s"

,zh)

;printf

("\n");

strcpy

(zzbsf,zh)

;for

(i=0

; i<

50; i++

)else}}

for(j=

0; j<=

50; j++

)else

}pop

(output,nouse)

;for

(i=0

; i<

50; i++)}

strcpy

(dz,output)

;for

(i=0

; i<

50; i++

)break;}

} k=0;

tmp6=0;

l=-1

;printf

("\n");

pop(zzbsf,nouse)

;printf

("中綴表示法為%s\n"

,zzbsf)

;printf

("\n");

printf

("字尾表示法為%s\n"

,output)

;getchar()

;for

(i=0

; i<

50; i++

)else

else}}

}for

(j=0

; j<

50; j++

)else

}else}}

printf

("中綴表示式的計算結果為%d\n"

,jieguo[0]

);return0;

}

中綴表示式轉化為字尾表示式

注意 中綴表示式需要空格隔開運算元或者操作符 關鍵有 判斷是否操作符,操作符優先順序 public class profixexpression 計算排好的字尾操作計算式 param prostr return public static intprofixcalculate string pros...

中綴表示式轉化為字尾表示式

中綴表示式轉化為字尾表示式有兩種方法,一種是利用棧,一種是把表示式轉化為樹再進一步求解,今天我們來深入了解一下這兩種方法 給出下面乙個例子 我們把中綴表示式 9 3 1 3 10 2 轉化為字尾表示式 1.首先初始化乙個空棧,用來對符號進出棧使用 2.第乙個字元是數字9,輸出9,將後面的符號 進棧 ...

中綴表示式轉化為字尾表示式

中綴表示式轉化為字尾表示式 例如 1 2 3 4 7 5 123 4 75 1 遇到數字輸出,否則進棧。2 遇到有右括號匹配棧裡的左括號,輸出棧裡的內容 3 遇到比自己比棧裡的運算子優先順序高,入棧 4 遇到比自己比棧裡的運算子優先順序低,將棧裡的運算子出棧 include include incl...