欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
把中綴表達式化為后綴表達式

//把中綴表達式化為后綴表達式
//基本解題思路
//使用棧的算法也很多,說(shuō)個(gè)好想的。
//假設表達式的字符來(lái)自輸入流in,建立棧A存放運算符,B存放結果,從in讀入一個(gè)操作數壓進(jìn)B,讀入一個(gè)運算符壓進(jìn)A,如此反復。
//1.讀入一個(gè)元素e
//2.如果e是操作數或者(,壓入B,跳轉到1
//3.如果e是運算符(不包含括號),跳轉到3.1
//4.如果e是),跳轉到4.1
//5.如果e是EOF,即輸入流結束,反復彈出A棧頂壓入B,直到A為空,算法結束,B從棧底到棧頂的符號即為后綴表達式(需要把B翻個(gè)個(gè)兒^_^)

//3.1.判斷A的棧定符號t,如果t不為(,且優(yōu)先級大于等于e,則彈出t壓入B,跳轉到4,如果t為空,即棧中為空,或其他情況直接把e壓入A,跳轉到1
//4.1.彈出A的棧頂壓入到B,如此反復直到彈出的符號為(,(和)不要壓入B,跳轉到1

#i nclude<stdio.h>
#i nclude<stdlib.h>
#define MAX 100
typedef struct         //存放結果
{
 char data[MAX];
 int top;
}Stack1;
typedef struct         //存放符號
{
 char data[MAX];
 int top;
}Stack2;


//對棧進(jìn)行初始化
void Init_Stack(Stack1 *SS1,Stack2 *SS2)
{
 SS1->top=SS2->top=-1;
 //SS1->data[SS1->top]=SS2->data[SS2->top]=0;
}


//判斷+ - * /
int Jadge(char ch,Stack1 *SS1,Stack2 *SS2)
{
 int i;
 switch(ch)
 {
    case ‘+‘:  //對‘+‘號的處理
       if(SS1->data[SS1->top]==‘-‘||SS1->data[SS1->top]==‘*‘||SS1->data[SS1->top]==‘/‘)
    {  
     SS2->data[++SS2->top]=SS1->data[SS1->top--];
     SS1->data[++SS1->top]=ch;
  }
    else
     SS1->data[++SS1->top]=ch;
    return 1;
       /////////////////////////////
    case ‘-‘: //對‘-‘號的處理
    if(SS1->data[SS1->top]==‘+‘||SS1->data[SS1->top]==‘*‘||SS1->data[SS1->top]==‘/‘)
  {
     SS2->data[++SS2->top]=SS1->data[SS1->top--];
     SS1->data[++SS1->top]=ch;
  }

    else
     SS1->data[++SS1->top]=ch;
    return 1;
    /////////////////////////////

    case ‘*‘:  //對‘*‘的處理
    if(SS1->data[SS1->top]==‘/‘)  
  {
     SS2->data[++SS2->top]=SS1->data[SS1->top--];
     SS1->data[++SS1->top]=ch;
     }
        else
   SS1->data[++SS1->top]=ch; 
  return 1;

    ////////////////////////////

    case ‘/‘:  //對‘/‘的處理
    if(SS1->data[SS1->top]==‘*‘) 
  {
     SS2->data[++SS2->top]=SS1->data[SS1->top--];
     SS1->data[++SS1->top]=ch;
     }
        else
   SS1->data[++SS1->top]=ch;
     return 1;

    /////////////////////////////
     case ‘)‘:   //對‘)‘的處理
  i=SS1->top;

  //判斷棧SS1中是否有與‘)‘匹配的‘(‘
  while(SS1->data[i]!=‘(‘ && i>=0)i--;
   if(i==-1)return 0;

        //遇到當‘)‘遇到‘(‘的操作
  while(SS1->data[SS1->top]!=‘(‘)
  {
   SS2->data[++SS2->top]=SS1->data[SS1->top--];
  }
  SS1->top--;
   
  return 1;
  //break;
       //3+4/(5-(6*5))*8
 }
}

void main()
{

 
 Stack1 *SS1=(Stack1 *)malloc(sizeof(Stack1));
 Stack2 *SS2=(Stack2 *)malloc(sizeof(Stack2));
 Init_Stack(SS1,SS2);
 //printf("%d %d",SS1->data[SS1->top],SS2->data[SS2->top]);
 int i,flag,k=0,sum1,sum2;
 char ch[MAX];
 printf("請輸入中綴表達式:");
 gets(ch);
 while(ch[k])
 {
  // printf("%c ",*(ch+i));
   //i++;
  if(ch[k]>=‘0‘&&ch[k]<=‘9‘)
   SS2->data[++SS2->top]=ch[k];
  else if(ch[k]==‘(‘)
   SS1->data[++SS1->top]=ch[k];
  else if(ch[k]==‘+‘ ||ch[k]==‘-‘||ch[k]==‘*‘ || ch[k]==‘/‘||ch[k]==‘)‘)
   flag=Jadge(ch[k],SS1,SS2);
   if(!flag) break;
   k++;
 }
 if(flag)
 {
  //判斷‘(‘與‘)‘的個(gè)數是否相同
  for(i=0;i<=SS1->top;i++)
  {
   if(ch[i]==‘(‘) sum1++;
   if(ch[i]==‘)‘) sum2++;
  }
  if(sum1!=sum2)
  {
   printf("表達式錯誤.\n");
   return;
  }
  //輸出后綴表達式
  printf("后綴表達式為:");
  for(i=0;i<=SS2->top;i++)
   printf("%c ",SS2->data[i]);
  for(i=SS1->top;i>=0;i--)
   printf("%c ",SS1->data[i]);
  printf("\n");
 }

 else
  printf("表達式錯誤.\n");

 
}

 
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
逆波蘭式
用凹入表輸出先序二叉樹(shù)
四則運算表達式求值(棧的應用)
數據結構-棧的應用:中綴表達式轉換為后綴表達式的算法、以及求后綴表達式值的算法
聊一聊棧(2)
簡(jiǎn)單的對0-9的四則運算(C語(yǔ)言)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久