• <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 - 183,  comments - 10,  trackbacks - 0
            一個簡單的堆的實現(xiàn),大根堆。
              1 #include <iostream>
              2 #include <ctime>
              3 using namespace std;
              4 
              5 class Heap
              6 {
              7 private:
              8     int* data;
              9     int  _size;
             10     int  _capacity;
             11 public:
             12     Heap()
             13     {
             14         _size = 0;
             15         _capacity = 2 * _size;
             16         data = new int[_capacity];
             17         if (data == 0)
             18         {
             19             exit(1);
             20         }
             21     }
             22     Heap(const Heap& h)
             23     {
             24         _size = h._size;
             25         _capacity = h._capacity;
             26         data = new int[_capacity];
             27         if (data == 0)
             28         {
             29             exit(1);
             30         }
             31         memcpy(data, h.data, sizeof (int* h._size);
             32     }
             33     Heap& operator =(const Heap& h)
             34     {
             35         delete [] data;
             36         _size = h._size;
             37         _capacity = h._capacity;
             38         data = new int[_capacity];
             39         if (data == 0)
             40         {
             41             exit(1);
             42         }
             43         memcpy(data, h.data, sizeof (int* h._size);
             44     }
             45     ~Heap()
             46     {
             47         delete [] data;
             48     }
             49     void insert(int item)
             50     {
             51         if (_size >= _capacity - 1)
             52         {
             53             _capacity = (_capacity + 1* 2;
             54             int * tmp = new int[_capacity];
             55             if (tmp == 0)
             56             {
             57                 exit(1);
             58             }
             59             // 1
             60             memcpy(tmp, data, sizeof (int* _capacity / 2 - 1);
             61             delete [] data;
             62             data = tmp;
             63         }
             64         data[++_size] = item;
             65         int pos1 = _size;
             66         int pos2 = pos1 / 2;
             67         while (pos2 >= 1 && data[pos1] > data[pos2])
             68         {
             69             data[pos1] ^= data[pos2];
             70             data[pos2] ^= data[pos1];
             71             data[pos1] ^= data[pos2];
             72             pos1 = pos2;
             73             pos2 = pos1 / 2;
             74         }
             75     }
             76     int max()
             77     {
             78         return data[1];
             79     }
             80     int erase()
             81     {
             82         int tmp = data[1];
             83         data[1= data[_size];
             84         --_size;
             85         int pos1 = 1, pos2;
             86         pos2 = pos1 * 2;
             87         
             88         while (pos2 <= _size)
             89         {
             90             if (pos2 < _size && data[pos2 + 1> data[pos2])
             91             {
             92                 ++pos2;
             93             }
             94             if (data[pos1] < data[pos2])
             95             {
             96                 data[pos1] ^= data[pos2];
             97                 data[pos2] ^= data[pos1];
             98                 data[pos1] ^= data[pos2];
             99             }
            100             pos1 = pos2;
            101             pos2 = pos1 * 2;
            102         }
            103         return tmp;
            104     }
            105     int size()
            106     {
            107         return _size;
            108     }
            109     int capacity()
            110     {
            111         return _capacity;
            112     }
            113     void test()
            114     {
            115         for (int i = 1; i <= _size; ++i)
            116         {
            117             cout << data[i] << ' ';
            118         }
            119         cout << endl;
            120     }
            121 };
            122 
            123 int main()
            124 {
            125     int n = 10;
            126     Heap h;
            127     srand(time(0));
            128     while (n--)
            129     // for (int i = 0; i < 10; ++i)
            130     {
            131         h.insert(rand());
            132         // h.insert(i);
            133         // cout << h.size() << ' ' << h.capacity() << endl;
            134     }
            135     h.test();
            136     for (int i = 0; i < 10++i)
            137     {
            138         cout << h.erase() << endl;
            139     }
            140     h.test();
            141     return 0;
            142 }
            posted on 2011-04-26 23:54 unixfy 閱讀(156) 評論(0)  編輯 收藏 引用
            亚洲一区中文字幕久久| 无码国内精品久久人妻| 精品久久国产一区二区三区香蕉| 久久综合久久综合久久综合| 久久国产视屏| 亚洲精品无码久久久影院相关影片 | 热久久国产精品| 欧美精品丝袜久久久中文字幕 | 囯产极品美女高潮无套久久久| 欧美牲交A欧牲交aⅴ久久 | 久久99国产精品久久99| 伊人久久大香线蕉综合5g| 国产精品国色综合久久| 欧洲国产伦久久久久久久| 久久香蕉国产线看观看99| 久久久久亚洲精品日久生情| 91精品无码久久久久久五月天 | 久久99精品国产99久久6男男| 亚洲国产小视频精品久久久三级| 国产成人久久精品一区二区三区| 久久精品无码一区二区app| 91精品国产乱码久久久久久| 久久综合偷偷噜噜噜色| 久久久久久亚洲精品无码| 国产 亚洲 欧美 另类 久久| 久久99精品国产自在现线小黄鸭| 亚洲欧美国产精品专区久久| 国产高清美女一级a毛片久久w| 精品永久久福利一区二区 | 天天做夜夜做久久做狠狠| 国产成人久久精品麻豆一区| 精品国产乱码久久久久久郑州公司 | 久久精品亚洲AV久久久无码| 亚洲欧美国产精品专区久久| 久久久久久av无码免费看大片| 99久久国产免费福利| 久久国产精品久久国产精品| 久久91亚洲人成电影网站| 久久精品一区二区国产| 天天久久狠狠色综合| 国产99久久九九精品无码|