• <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>

            兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列 和 兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)棧

               兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列
               要求:只能使用棧的pop和push,以及測(cè)試棧是否為空三個(gè)操作。
               實(shí)現(xiàn)思路:
                  隊(duì)列里面使用stack one 和 stack two。
                  進(jìn)隊(duì)列時(shí),直接進(jìn)入棧one即可。
                  出隊(duì)列時(shí),從two彈出一個(gè)元素,如果two里面的元素為空,則將one里面的元素依次彈出并壓入two中,再?gòu)膖wo彈出一個(gè)元素返回。
               
               用STL里面的stack模擬實(shí)現(xiàn)queue的代碼如下:
               1 #include <stdio.h>
              2 #include <stdlib.h>
              3 #include <time.h>
              4 #include <stack>
              5 using std::stack;
              6 
              7 template<class T> class CQueue
              8 {
              9 public:
             10     CQueue()
             11     {
             12         nSize = 0;
             13     }
             14     
             15     void clear()
             16     {
             17         while (!one.empty())
             18         {
             19             one.pop();
             20         }
             21         while (!two.empty())
             22         {
             23             two.pop();
             24         }
             25     }
             26 
             27     void push(const T& t)
             28     {
             29         one.push(t);
             30         ++nSize;
             31     }
             32 
             33     void pop()
             34     {
             35         if (two.empty())
             36         {
             37             while (!one.empty())
             38             {
             39                 two.push(one.top());
             40                 one.pop();
             41             }
             42         }
             43         two.pop();
             44         --nSize;
             45     }
             46     
             47     T& front()
             48     {
             49         if (two.empty())
             50         {
             51             while (!one.empty())
             52             {
             53                 two.push(one.top());
             54                 one.pop();
             55             }
             56         }
             57         return two.top();
             58     }
             59     
             60     T& back()
             61     {
             62         return one.top();
             63     }
             64     
             65     bool empty()
             66     {
             67         return nSize == 0;
             68     }
             69     
             70 private:
             71     stack<T> one;
             72     stack<T> two;
             73     int nSize;
             74 };
             75 
             76 #define MAX 20
             77 
             78 int main()
             79 {
             80     CQueue<int> q;
             81     
             82     srand(time(NULL));
             83     for (int i = 0; i < MAX; ++i)
             84     {
             85         q.push(i);
             86         
             87         if (rand() % 2)
             88         {
             89             printf("front: %d\n", q.front());
             90             q.pop();
             91         }
             92     }
             93     
             94     while (!q.empty())
             95     {
             96         printf("front: %d\n", q.front());
             97         q.pop();
             98     }
             99     
            100     return 0;
            101 }
            102 
               
            兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)棧
               要求:只能使用從隊(duì)列的尾部入和頭部出,以及測(cè)試隊(duì)列是否為空三個(gè)操作。
               實(shí)現(xiàn)思路:
                  隊(duì)列里面使用queue one 和 stack two。
                  進(jìn)棧時(shí),根據(jù)當(dāng)前元素是全部存儲(chǔ)在哪個(gè)隊(duì)列而選擇從one或者two的尾部進(jìn)入。
                  出棧時(shí),假設(shè)當(dāng)前元素都存儲(chǔ)在one里面,則不斷出隊(duì)列,直到隊(duì)列為空之前的所有元素一次進(jìn)入隊(duì)列two,而one里面的最后一個(gè)元素
                  作為棧彈出的值返回。
                  對(duì)于當(dāng)前元素是存儲(chǔ)在哪個(gè)隊(duì)列里面,可以設(shè)置變量標(biāo)記,初始化時(shí)候存儲(chǔ)在one里面,操作一次,由于元素要倒轉(zhuǎn),則存儲(chǔ)位置會(huì)變
                  一次。
                  
                  用STL里面的queue模擬實(shí)現(xiàn)的stack代碼如下:
               1 #include <stdio.h>
              2 #include <queue>
              3 using std::queue;
              4 
              5 template<class T> class CStack
              6 {
              7 public:
              8     CStack()
              9     {
             10         nSize = 0;
             11         nTime = 1;
             12     }
             13 
             14     void clear()
             15     {
             16         while (!one.empty())
             17         {
             18             one.pop();
             19         }
             20         while (!two.empty())
             21         {
             22             two.pop();
             23         }
             24     }
             25 
             26     void push(const T& t)
             27     {
             28         if (nTime % 2)
             29         {
             30             one.push(t);
             31         }
             32         else
             33         {
             34             two.push(t);
             35         }
             36         ++nSize;
             37     }
             38 
             39     void pop()
             40     {
             41         if (nTime % 2)
             42         {
             43             while (!one.empty())
             44             {
             45                 T t = one.front();
             46                 one.pop();
             47                 if (!one.empty())
             48                 {
             49                     two.push(t);
             50                 }
             51             }
             52         }
             53         else
             54         {
             55             while (!two.empty())
             56             {
             57                 T t = two.front();
             58                 two.pop();
             59                 if (!two.empty())
             60                 {
             61                     one.push(t);
             62                 }
             63             }
             64         }
             65 
             66         nTime = (nTime + 1) % 2;
             67         --nSize;
             68     }
             69 
             70     T& top()
             71     {
             72         if (nTime % 2)
             73         {
             74             while (!one.empty())
             75             {
             76                 T t = one.front();
             77                 one.pop();
             78                 if (!one.empty())
             79                 {
             80                     two.push(t);
             81                 }
             82                 else
             83                 {
             84                     two.push(t);
             85                     nTime = (nTime + 1) % 2;
             86                     return two.back();
             87                 }
             88             }
             89         }
             90         else
             91         {
             92             while (!two.empty())
             93             {
             94                 T t = two.front();
             95                 two.pop();
             96                 if (!two.empty())
             97                 {
             98                     one.push(t);
             99                 }
            100                 else
            101                 {
            102                     one.push(t);
            103                     nTime = (nTime + 1) % 2;
            104                     return one.back();
            105                 }
            106             }
            107         }
            108     }
            109 
            110     bool empty()
            111     {
            112         return nSize == 0;
            113     }
            114 
            115 private:
            116     queue<T> one;
            117     queue<T> two;
            118     int nSize;
            119     int nTime;
            120 };
            121 
            122 #define MAX 20
            123 
            124 int main()
            125 {
            126     CStack<int> stack;
            127 
            128     for (int i = 0; i < MAX; ++i)
            129     {
            130         stack.push(i);
            131     }
            132 
            133     while (!stack.empty())
            134     {
            135         printf("top: %d\n", stack.top());
            136         stack.pop();
            137     }
            138     
            139     return 0;
            140 }
            141 

            posted on 2012-03-11 20:30 yx 閱讀(3334) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)

            <2012年7月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            me

            好友

            同學(xué)

            網(wǎng)友

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久嫩草影院免费看夜色| 久久精品亚洲AV久久久无码| 国产精品99久久久久久董美香| 久久久久久久久久免免费精品| 久久国产免费直播| 91精品国产综合久久香蕉| 欧美日韩精品久久久免费观看| 蜜臀av性久久久久蜜臀aⅴ| 精品国产91久久久久久久a| 亚洲中文字幕无码久久2017| 一级做a爰片久久毛片人呢| 亚洲综合伊人久久大杳蕉| 国産精品久久久久久久| 久久久久久久97| 一本久久综合亚洲鲁鲁五月天| 97久久精品无码一区二区| 久久综合视频网站| 亚洲国产精品久久久久婷婷老年| 久久成人国产精品免费软件| 婷婷久久综合九色综合九七| 日韩精品国产自在久久现线拍 | 丁香五月网久久综合| 欧美日韩精品久久久久 | 狠狠色丁香久久婷婷综合| 99久久精品免费观看国产| 97r久久精品国产99国产精| 久久99久久99精品免视看动漫 | 精品国产VA久久久久久久冰| 久久久久精品国产亚洲AV无码| 久久久久一本毛久久久| 99久久精品免费看国产一区二区三区 | 久久电影网一区| 91精品国产高清久久久久久io| 久久香综合精品久久伊人| 亚洲午夜久久久久久久久电影网 | 精品乱码久久久久久夜夜嗨| 欧美精品一区二区精品久久 | 蜜臀久久99精品久久久久久小说 | 伊人久久大香线蕉AV一区二区| 久久久久亚洲AV无码专区网站 | 久久久久久综合一区中文字幕|