• <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>
            posts - 101,  comments - 57,  trackbacks - 0
            看了數(shù)據(jù)結(jié)構(gòu)一書,果然有所提升。在講到堆棧的應(yīng)用時提到后綴表達(dá)式,令我茅塞頓開!

            想起poj的2269,正好書上又沒有給出代碼。于是乎自己寫了一遍。雖然還是沒有用編譯器的思想來得簡約明了。但個人認(rèn)為這種這也算是一種不錯的實現(xiàn)方法了。關(guān)于“中綴到后綴的部分”是為解題的關(guān)鍵,但是這個地方還是寫得比較垃圾,不過思想一致就行,其他的待以后提高了再做改進(jìn)吧,看官莫笑~

            #include "stdio.h"

            // DWORD  0 0 0 0  1  1 1 1 1  32bit
            //                    Z  D C B A
            //        1  ( * - +

            #define ADD  0x80000001
            #define SUB  0x80000002
            #define MUL  0x80000004
            #define LBC  0x80000008

            #define MAX_SIZE 255

            int  queue[MAX_SIZE];
            int  queue_pointer = 0;

            int  stack[MAX_SIZE];
            int  stack_pointer = 0;

            void deal_infix(char *pline)
            {
                
            int temp;

                stack_pointer 
            = 0;
                queue_pointer 
            = 0;

                
            do
                
            {
                    
            switch(*pline)
                    
            {
                    
            case '{':
                        temp 
            = 0;
                        
            break;
                    
            case '}':
                        queue[queue_pointer
            ++= temp;
                        
            break;
                    
            case '+':
                        
            while (stack_pointer && LBC != stack[stack_pointer - 1])
                        
            {
                            queue[queue_pointer
            ++= stack[--stack_pointer];
                        }

                        stack[stack_pointer
            ++= ADD;
                        
            break;
                    
            case '-':
                        
            while (stack_pointer && LBC != stack[stack_pointer - 1])
                        
            {
                            queue[queue_pointer
            ++= stack[--stack_pointer];
                        }

                        stack[stack_pointer
            ++= SUB;
                        
            break;
                    
            case '*':
                        
            if (stack_pointer && MUL == stack[stack_pointer - 1])
                        
            {
                            queue[queue_pointer
            ++= stack[--stack_pointer];
                        }

                        stack[stack_pointer
            ++= MUL;
                        
            break;
                    
            case '(':
                        stack[stack_pointer
            ++= LBC;
                        
            break;
                    
            case ')':
                        
            while (LBC != stack[stack_pointer - 1])
                        
            {
                            queue[queue_pointer
            ++= stack[--stack_pointer];
                        }

                        
            --stack_pointer;
                        
            break;
                    
            default:
                        temp 
            |= 1 << (*pline - 'A');
                        
            break;
                    }

                }
            while (*(++pline));

                
            while (stack_pointer)
                
            {
                    queue[queue_pointer
            ++= stack[--stack_pointer];
                }

            }


            void deal_postfix()
            {
               // 此處已被省略

            }


            void output()
            {
                
            int i;

                printf(
            "{");
                
            for (i = 0; i < 'Z' - 'A' + 1++i)
                
            {
                    
            if (stack[0& 1 << i)
                        printf(
            "%c", i + 'A');
                }

                printf(
            "}\n");
            }


            int main()
            {
                
            char line[MAX_SIZE];

                
            while (EOF != scanf("%s", line))
                
            {
                    deal_infix(line);                
                    deal_postfix();
                    output();
                }

                
            return 0;
            }
            posted on 2009-09-30 00:52 margin 閱讀(129) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2009年2月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            1234567

            常用鏈接

            留言簿

            隨筆檔案

            文章分類

            文章檔案

            收藏夾

            常去的壇子

            • CVC電腦病毒論壇
            • 很多人說我是AV,我告訴他們:別瞧不起人,我們也能創(chuàng)造價值
            • 安全焦點
            • 黑客聚集的地方,一般是好酒最多的地方...
            • 看雪論壇
            • 國內(nèi)最強(qiáng)的加密解密論壇,成醉其中經(jīng)常夜不歸宿
            • 驅(qū)動開發(fā)論壇
            • 厭倦了啤的朋友們,來我們來整點白的...痛痛快快的BSOD也好過隔鞋瘙癢!

            我的朋友

            • Sen的blog
            • IDE方面資深的受害者...經(jīng)常為一個變量的定義找不著北的痛苦程序員(深表同情)
            • 老羅的blog
            • 良師益友,千年水牛,引擎猛男,分析怪獸,墨鏡酷哥,臺球高手....

            搜索

            •  

            最新評論

            久久福利片| 欧美成a人片免费看久久| 国产精品久久久久久久午夜片 | 久久99国产综合精品女同| 久久这里只精品国产99热| 无码任你躁久久久久久| 久久久久久久人妻无码中文字幕爆| 久久久精品午夜免费不卡| 97香蕉久久夜色精品国产| 97精品国产91久久久久久| 久久99国产精品成人欧美| 亚洲综合精品香蕉久久网| 久久久久久av无码免费看大片| 久久国产免费观看精品3| 2021最新久久久视精品爱| 精品综合久久久久久88小说 | 久久中文字幕无码专区| 精品熟女少妇a∨免费久久| 亚洲国产精品成人久久蜜臀| segui久久国产精品| 国内精品九九久久久精品| 亚洲精品美女久久777777| 久久久久久久91精品免费观看| 久久精品视频免费| 久久国产乱子伦精品免费强| 久久99国内精品自在现线| 欧美日韩久久中文字幕| 亚洲欧美国产精品专区久久| 久久综合给合综合久久| 久久人妻少妇嫩草AV无码蜜桃| 国产欧美一区二区久久| 99久久久精品免费观看国产| 亚洲国产美女精品久久久久∴ | 国产精品久久永久免费| 久久久婷婷五月亚洲97号色 | 久久精品国产只有精品66| 国产L精品国产亚洲区久久 | 精品无码久久久久久午夜| 久久99亚洲网美利坚合众国| 2021精品国产综合久久| 热99re久久国超精品首页|