91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 8KB
    文件類型: .c
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-29
  • 語言: 其他
  • 標簽: 數據結構??

資源簡介

采用棧將中綴表達式轉為后綴表達式并求出數值。包含的運算符有'+', '-' ,'*','/','%'。支持整數,小數,正負數

資源截圖

代碼片段和文件信息

#include
#include
#include
#define?Maxlenth?100

typedef?struct?Stack{
int?top;
char?s[Maxlenth];
}Stack;

char?Pop(Stack?*S);
char?top(Stack?*S);
int?Isempty(Stack?*S);
double?Calculate(char?*Arrayint?len);
void?stackToArray(Stack?*Schar?*chint?len);
void?Push(Stack?*Schar?pu);
void?Print(Stack?*S);
void?clean(char?*A);
void?check(char?*ch);


int?main()
{
????Stack?num;
????num.top=Maxlenth;/*定義存儲操作數的棧的空棧底位置*/
????Stack?sign;
????sign.top=Maxlenth;/*定義存儲操作符的棧的空棧底位置*/
????Stack?*N=#
????Stack?*S=&sign;

????char?c=‘?‘;
????int?i=0;
????char?mid[Maxlenth]={‘\0‘};
????gets(mid);/*讀入中綴表達式*/
????check(mid);/*判斷是否為合法輸入,非法輸入時程序退出*/
????int?j=0;
????/*將負數的負號用A表示,以區別減號和負號*/
????if(mid[0]==‘-‘)
????{
???????mid[0]=‘A‘;
????}
????for(j=1;j????{
????????if(mid[j-1]==‘(‘&&mid[j]==‘-‘)
????????{
????????????mid[j]=‘A‘;
????????}
????}
????/*按照優先級規則將操作符進棧出棧,操作數入棧時相鄰操作數用空格間隔開。
??????最終的后綴表達式保存在操作數棧中。
????*/
????for(i=0;i????{??//判斷mid[i]是否為操作數的一部分,如果是則直接壓入操作數棧
????????if(?(mid[i]>=‘0‘&&mid[i]<=‘9‘)||mid[i]==‘A‘||mid[i]==‘.‘)
????????{
????????????if(mid[i]==‘A‘)
????????????{
????????????????Push(N‘-‘);
????????????}
???????????else{
????????????????????Push(Nmid[i]);
???????????}
????????}
????????else
????????{
????????????if(mid[i]==‘(‘)
????????????{
????????????????Push(Smid[i]);
????????????}
????????????else
????????????{
????????????????if(mid[i]==‘+‘||mid[i]==‘-‘)
????????????????{
????????????????????while(top(S)!=‘(‘&&(!Isempty(S)))
????????????????????{
????????????????????????Push(Nc);?//將空格壓入操作數棧以區分相鄰的兩個操作數
????????????????????????Push(NPop(S));
????????????????????}
????????????????????Push(Nc);
????????????????????Push(Smid[i]);
????????????????}
????????????????else
????????????????{
????????????????????if(mid[i]==‘*‘||mid[i]==‘/‘||mid[i]==‘%‘)
????????????????????{
????????????????????????while((top(S)==‘*‘||top(S)==‘/‘||top(S)==‘%‘)&&(!Isempty(S))?)
????????????????????????{?//彈出優先級大于或等于mid[i]的操作符到操作數棧,
??????????????????????????//直到棧頂元素優先級比mid[i]小或者棧空為止
????????????????????????????Push(Nc);
????????????????????????????Push(NPop(S));
????????????????????????}
????????????????????????Push(Nc);
????????????????????????Push(Smid[i]);
????????????????????}
????????????????????else
????????????????????{
????????????????????????if(mid[i]==‘)‘)//遇到左括號時彈操作符棧到操作數棧,直到彈出左括號為止
????????????????????????{
????????????????????????????while(top(S)!=‘(‘?)
????????????????????????????{
????????????????????????????????Push(Nc);
????????????????????????????????Push(NPop(S));
????????????????????????????}
????????????????????????????Push(Nc);
????????????????????????????Pop(S);
????????????????????????}
????????????????????}
????????????????}
????????????}
????????}
????}
????//把操作符棧的元素彈出到操作數棧
????while(!Isempty(S))
????{
????????Push(Nc);
????????Push(NPop(S));

評論

共有 條評論