• <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 閱讀(129) 評論(0)  編輯 收藏 引用
            <2008年12月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            常用鏈接

            留言簿

            隨筆檔案

            文章分類

            文章檔案

            收藏夾

            常去的壇子

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

            我的朋友

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

            搜索

            •  

            最新評論

            Xx性欧美肥妇精品久久久久久| 国产亚洲色婷婷久久99精品91| 久久久受www免费人成| 久久久久免费精品国产| 99久久婷婷免费国产综合精品| 色婷婷综合久久久中文字幕| 伊人久久综合成人网| 亚洲AV日韩精品久久久久久久| 久久精品国产AV一区二区三区| 狠狠色婷婷久久综合频道日韩 | 美女写真久久影院| 青青草国产精品久久| 一级做a爰片久久毛片16| 91精品国产综合久久香蕉| 国产AⅤ精品一区二区三区久久| 曰曰摸天天摸人人看久久久| 国产精品成人无码久久久久久| 久久天天躁狠狠躁夜夜不卡| 武侠古典久久婷婷狼人伊人| 久久午夜福利无码1000合集| 久久久久亚洲av无码专区导航| 久久亚洲高清观看| 一本大道久久香蕉成人网| 天堂久久天堂AV色综合| 久久精品一区二区| 亚洲国产成人精品无码久久久久久综合 | 2020最新久久久视精品爱| 国内精品久久久久久不卡影院| 亚洲乱码日产精品a级毛片久久| 国产A三级久久精品| 99久久婷婷国产一区二区| A级毛片无码久久精品免费| 亚洲午夜无码久久久久| 99国产欧美久久久精品蜜芽| 精品久久久久久无码中文字幕| 久久久亚洲欧洲日产国码是AV| 久久精品人成免费| 亚洲欧美日韩精品久久亚洲区| 久久综合88熟人妻| 亚洲欧洲中文日韩久久AV乱码| 久久久无码精品亚洲日韩蜜臀浪潮|