青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

編譯原理實驗:后綴式求值(c++)

/* 將中綴表達式(a+b)轉換為后綴表達式(ab+)的算法思想:  
   ·
當讀到數字直接送至輸出隊列中  
   ·
當讀到運算符t時,  
      a.
將棧中所有優先級高于或等于t的運算符彈出,送到輸出隊列中;    
      b.t
進棧  
   ·
讀到左括號時總是將它壓入棧中  
   ·
讀到右括號時,將靠近棧頂的第一個左括號上面的運算符全部依次彈出,送至輸出隊列后,再丟棄左括號。  
  
     
運用后綴表達式進行計算的具體做法:  
   ·
建立一個棧S  
   ·
從左到右讀后綴表達式,讀到數字就將它轉換為數值壓入棧S中,讀到運算符則從棧中依次彈出兩個數分別到YX,然后以“X   運算符   Y”的形式計算機出結果,再壓加棧S  
   ·
如果后綴表達式未讀完,就重復上面過程,最后輸出棧頂的數值則為結束 */

#include <iostream>
#include <string>
using namespace std;

char ex[100];//存儲后綴表達式
char str[100];//
存儲算術表達式
char stack[100];//
作為棧使用
char ch;//
當前判斷的字符
int i=0;//i
為算術表達式str的下標
int t;//t
為后綴式ex的下標
int top=0;//top
為棧頂
void trans();//
轉換函數
void compute();//
計算后綴式的值

void trans()//將中綴式轉換為后綴式
{
cout<<"
輸入一個算術表達式,以#號結束:"<<endl;
while(str[i]!='#')//
中綴式以#號結束
{
   i++;//
因為i的初值設為0
   cin>>str[i];
}

//
開始掃描
t=1;
i=1;
ch=str[i];
i++;//i
指向當前掃描字符的下一位
while(ch!='#')//
逐個掃描,直至遇到#號結束
{
   switch(ch)
   {
   case'('://
遇到(,進棧
    top++;
    stack[top]=ch;
    break;
   case')'://
遇到),將靠近棧頂的第一個左括號上面的運算符全部依次彈出,送至后綴式隊列后,再丟棄左括號。
    while(stack[top]!='(')
    {
     ex[t]=stack[top];
     top--;
     t++;
    }
    top--;//
丟棄(
    break;
   case'+':
   case'-':
    while(top!=0 && stack[top]!='(')
    {
     ex[t]=stack[top];
     top--;
     t++;
    }
    top++;//
因為top的初值為0
    stack[top]=ch;
    break;
   case'*':
   case'/':
    while(stack[top]=='*'|| stack[top]=='/')
   {
    ex[t]=stack[top];
    top--;
    t++;
   }
   top++;
   stack[top]=ch;
   break;
 
   /*
注意!除操作數外,其它符號都要用到棧*/
   default:while(ch>='0' && ch<='9')//
遇到操作數直接送至后綴式隊列
     {
      ex[t]=ch;
      t++;
      ch=str[i];
      i++;//
此時i指向操作數之后的運算符的后一位??!
     }
    i--;//
要在操作數之后,運算符之前添加空格符
    ex[t]=' ';//
用空格符隔開
    t++;

   }//switch結束

   ch=str[i];//仿照default中的,返回添加空格符之前的操作
   i++;
}//
結束while


while(top!=0)//
仍有運算符在棧中
{
   ex[t]=stack[top];
   t++;
   top--;
}
ex[t]=' ';//
不能省,若省掉則無法進入compute函數??

for(int j=1;j<i-1;j++)
   cout<<str[j];
cout<<"
的后綴式為:";
for(j=1;j<t;j++)
cout<<ex[j];

}

void compute()
{
float stack[100];//
作為棧使用
int d;//
用于存放當前的計算結果
char ch;
int t=1;
int top =0;
ch=ex[t];
t++;

while(ch!=' ')//此空格符為后綴式中的最后一個字符,與上文中的" ex[t]=' '; "相對應
{
   switch(ch)
   {
   case'+':
    stack[top-1]=stack[top-1]+stack[top];
    top--;
    break;
   case'-':
    stack[top-1]=stack[top-1]-stack[top];
    top--;
    break;
   case'*':
    stack[top-1]=stack[top-1]*stack[top];
    top--;
    break;
   case'/':
    if(stack[top]!=0)
     stack[top-1]=stack[top-1]/stack[top];
    else
    {
     cout<<"\n
除零錯誤!"<<endl;
     exit(0);//
異常退出
    }
    top--;//
兩個操作數算出一個結果存放到棧頂,那兩操作數便可丟棄,故top-1
    break;
   default:
    d=0;
    while(ch>='0' && ch<='9')
    {
     d=10*d+ch-'0';//
將數字字符轉化為對應的數值,*10是與大于10的數值時要進位
     ch=ex[t];
     t++;
    }
    top++;
    stack[top]=d;//
棧頂存放當前計算結果
 
   }//switch
結束
   ch=ex[t];//
跳過空格符,掃描下一個運算符或操作數
   t++;
}
cout<<"\n
計算結果為:"<<stack[top]<<endl;
}

void main()
{
trans();
compute();
}

結果如圖所示:

clip_image001

 

posted on 2010-03-05 16:15 肥仔 閱讀(1359) 評論(0)  編輯 收藏 引用 所屬分類: 狀態機 & 自動機 & 形式語言

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            黄色精品一二区| 亚洲最新色图| 免费久久精品视频| 久久久久久香蕉网| 免费欧美视频| 欧美激情一区二区三区成人| 久久色在线播放| 欧美日韩国产bt| 欧美午夜无遮挡| 国产欧美一区二区三区国产幕精品| 国产有码在线一区二区视频| 在线观看亚洲视频| 亚洲视频在线观看视频| 麻豆免费精品视频| 亚洲网在线观看| 免费在线观看一区二区| 国产一级久久| 亚洲一区二区三区免费观看| 久久亚洲综合| 午夜精品www| 国产精品女人久久久久久| 亚洲精品视频在线| 欧美黄在线观看| 久久精品人人做人人综合| 国产精品日韩精品欧美在线| 亚洲一区二区动漫| 亚洲精选久久| 欧美在线观看视频在线| 亚洲精品日韩在线| 欧美成黄导航| 亚洲深夜激情| 亚洲深夜福利网站| 欧美午夜精品| 欧美一区亚洲一区| 欧美一区二区三区免费看| 国产婷婷色一区二区三区| 欧美淫片网站| 欧美一站二站| 亚洲日本欧美| 亚洲欧美高清| 亚洲精品国产拍免费91在线| 模特精品在线| 国产精品毛片在线| 免费欧美电影| 欧美性久久久| 欧美1区2区3区| 国产精品久久91| 久久一二三国产| 欧美视频一区二区三区在线观看| 欧美在线观看你懂的| 免费在线亚洲| 久久性天堂网| 国产日韩欧美一区二区| 欧美国产精品劲爆| 国产一级揄自揄精品视频| 亚洲精品久久久久中文字幕欢迎你| 欧美激情在线| 欧美不卡一卡二卡免费版| 国产精品日韩| 亚洲免费在线| 亚洲欧美中文字幕| 欧美调教视频| 一本久道久久综合婷婷鲸鱼| 亚洲电影下载| 亚洲精品免费在线播放| 国产一区二区三区视频在线观看 | 美玉足脚交一区二区三区图片| 欧美77777| 亚洲激情在线激情| 亚洲韩国日本中文字幕| 欧美sm重口味系列视频在线观看| 久久午夜视频| 亚洲日本国产| 欧美无砖砖区免费| 亚洲一区二区三区高清不卡| 亚洲最新在线视频| 国产乱码精品一区二区三区av| 夜夜嗨av一区二区三区网站四季av| 一区二区三区视频观看| 国产精品美女久久久免费 | 亚洲一区二区三区免费观看| 欧美亚男人的天堂| 久久人人97超碰国产公开结果| 麻豆久久久9性大片| av72成人在线| 在线观看亚洲精品视频| 欧美日韩成人一区| 欧美中文在线观看| 日韩亚洲欧美中文三级| 久久久www成人免费无遮挡大片| 日韩香蕉视频| 国内伊人久久久久久网站视频| 欧美高清在线一区| 欧美一级淫片aaaaaaa视频| 亚洲精品一品区二品区三品区| 香蕉成人久久| 一本色道久久综合狠狠躁篇的优点 | 国产精品五月天| 老司机一区二区三区| 亚洲伊人久久综合| 欧美日韩综合久久| 欧美日精品一区视频| 亚洲一区二区三区四区五区黄| 免费日韩精品中文字幕视频在线| 99re热这里只有精品免费视频| 国产精品久久999| 欧美国产日韩在线| 香蕉视频成人在线观看| 亚洲天堂偷拍| 久久国产视频网| 老司机免费视频一区二区| 麻豆国产va免费精品高清在线| 欧美成人精品1314www| 国产欧美一级| 久久精品九九| 亚洲综合色在线| 欧美理论电影在线播放| 国产精品国产三级国产aⅴ无密码| 欧美视频中文一区二区三区在线观看 | 久久先锋影音av| 中文一区二区| 亚洲一区二区综合| 久久精品99国产精品日本| 欧美精品成人一区二区在线观看 | 夜夜嗨网站十八久久| 欧美在线免费播放| 欧美精品在线一区二区| 欧美日韩一区二| 一本久久综合亚洲鲁鲁五月天| 猛干欧美女孩| 亚洲精品影视| 久久久国产91| 国产日韩精品视频一区| 亚洲日本黄色| 欧美一区二区三区播放老司机| 欧美 亚欧 日韩视频在线| 国产精品日韩在线播放| 一区二区欧美激情| 亚洲福利在线看| 久久蜜桃精品| 亚洲国产高清在线观看视频| 欧美一区二区在线播放| 欧美午夜剧场| 日韩视频免费观看高清在线视频| 久久亚洲综合| 欧美一级午夜免费电影| 国产精品女主播在线观看| 亚洲影视在线播放| 一区二区国产日产| 国产精品免费aⅴ片在线观看| 一区二区三区蜜桃网| 99精品国产一区二区青青牛奶| 欧美成人国产| 午夜亚洲性色福利视频| 亚洲制服丝袜在线| 国产亚洲毛片在线| 欧美**字幕| 欧美午夜性色大片在线观看| 亚洲欧美日韩国产成人| 亚洲综合导航| 亚洲人成人77777线观看| 亚洲精品在线三区| 国产日韩在线看片| 欧美www视频| 欧美色欧美亚洲另类二区| 欧美一级视频免费在线观看| 久久久免费精品视频| 99精品热视频| 久久精品人人| 亚洲影院免费| 亚洲天堂成人| 欧美激情女人20p| 免播放器亚洲一区| 国产一区二区三区四区| 夜夜爽夜夜爽精品视频| 亚洲国产毛片完整版| 亚洲影院在线| 亚洲欧美日产图| 蜜桃av一区| 国产精品一区二区欧美| 亚洲成色www8888| 亚洲国产导航| 久久精品欧美日韩| 久久久午夜视频| 国产日韩欧美不卡| 一区二区三区四区国产| 国产精品99久久久久久久女警| 久久亚洲捆绑美女| 欧美成人a视频| 亚洲精品美女在线观看播放| 久久久久免费视频| 欧美韩日亚洲| 一区二区欧美国产| 国产精品久久久久久户外露出 | 欧美一区影院| 一区二区自拍| 欧美日韩的一区二区| 亚洲专区一区二区三区| 久久麻豆一区二区| 99在线精品观看|