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

            常用鏈接

            留言簿

            隨筆檔案

            文章分類

            文章檔案

            收藏夾

            常去的壇子

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

            我的朋友

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

            搜索

            •  

            最新評論

            色噜噜狠狠先锋影音久久| 一本久久精品一区二区| 国产精品免费久久久久久久久| 精品久久久久久久久久中文字幕 | 人妻丰满?V无码久久不卡| 国产成年无码久久久免费| 久久精品国产69国产精品亚洲| 久久www免费人成看国产片| 亚洲精品乱码久久久久久按摩 | 午夜久久久久久禁播电影| 久久综合九色综合久99| 国产成人无码精品久久久性色| 久久99热精品| 无码人妻精品一区二区三区久久| 久久se精品一区精品二区国产| 久久久久99精品成人片直播| 久久亚洲国产精品五月天婷| 久久精品国产99国产电影网| 久久久久久人妻无码| 99久久国产宗和精品1上映| 久久综合久久鬼色| 国产精品99久久久久久猫咪 | 久久99精品久久久久久| 久久久久99精品成人片直播| 亚洲精品无码久久久久久| 7777精品伊人久久久大香线蕉| 精品无码人妻久久久久久| 999久久久国产精品| 国产精品熟女福利久久AV| 精品九九久久国内精品| 99久久国产热无码精品免费| 久久久久人妻一区二区三区vr | 国产精品美女久久久久久2018| 一本久久a久久精品vr综合| 久久精品亚洲AV久久久无码| 久久精品国产精品亚洲精品 | 久久久青草久久久青草| 久久成人影院精品777| 亚洲国产成人久久综合碰碰动漫3d | A狠狠久久蜜臀婷色中文网| 久久婷婷激情综合色综合俺也去 |