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