• <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
            看了數據結構一書,果然有所提升。在講到堆棧的應用時提到后綴表達式,令我茅塞頓開!

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

            #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 閱讀(122) 評論(0)  編輯 收藏 引用
            <2009年9月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            常用鏈接

            留言簿

            隨筆檔案

            文章分類

            文章檔案

            收藏夾

            常去的壇子

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

            我的朋友

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

            搜索

            •  

            最新評論

            国产69精品久久久久99| 精品免费tv久久久久久久| 伊人 久久 精品| 国产精品久久久久久吹潮| 久久狠狠高潮亚洲精品| 久久久久久国产精品无码下载| 午夜视频久久久久一区 | 久久久精品一区二区三区| 久久免费观看视频| 国产精品久久久久影院嫩草| 久久人妻少妇嫩草AV无码蜜桃| 国产情侣久久久久aⅴ免费| 久久夜色精品国产亚洲av| 久久综合亚洲欧美成人| 亚洲国产成人精品无码久久久久久综合 | 久久国产精品久久精品国产| 日日狠狠久久偷偷色综合96蜜桃| 77777亚洲午夜久久多喷| 狠狠色综合久久久久尤物| 久久精品国产亚洲av高清漫画 | 久久人人青草97香蕉| 色偷偷888欧美精品久久久| 久久精品一本到99热免费| 久久精品国产亚洲AV影院| 国产日韩欧美久久| 四虎国产精品免费久久5151 | 久久精品国产亚洲一区二区| 亚洲中文久久精品无码ww16| 亚洲性久久久影院| 免费一级做a爰片久久毛片潮| 日韩一区二区久久久久久 | 国产精品久久久久久久人人看| 久久播电影网| 久久久久无码中| 午夜精品久久久久久影视riav| 久久人妻少妇嫩草AV蜜桃| 久久亚洲国产成人影院网站 | 精品久久久久中文字幕日本 | 伊人久久大香线蕉成人| 波多野结衣久久精品| 人妻无码久久一区二区三区免费 |