編程演算法 - 堆(heap) 代碼(C)

來源:互聯網
上載者:User

標籤:mystra   編程演算法   堆   優先順序隊列   二叉樹   

堆(heap) 代碼(C)


本文地址: http://blog.csdn.net/caroline_wendy


堆(heap)作為二叉樹的重要應用, 時間複雜度O(logn), 需要熟練的寫出其代碼, 基本代碼如下, 需要背寫.


代碼:

/* * main.cpp * *  Created on: 2014.7.20 *      Author: spike *//*eclipse cdt, gcc 4.8.1*/#include <stdio.h>class Heap {static const int MAX_N = 1000;int heap[MAX_N], sz=0;public:void push(int x) {int i=sz++;while (i>0) {int p = (i-1)/2;if (heap[p]<=x) break;heap[i] = heap[p];i = p;}heap[i]=x;}int pop() {int ret = heap[0];int x = heap[--sz];int i=0;while (i*2+1<sz) {int a=i*2+1, b=i*2+2;if (b<sz && heap[b]<heap[a]) a=b; //a始終代表最小值if (heap[a]>=x) break;heap[i] = heap[a];i = a;}heap[i] = x;return ret;}};int main(void){Heap h;h.push(3);h.push(5);h.push(4);h.push(1);for (int i=0; i<4; ++i) {printf("%d ", h.pop());}printf("\n");return 0;}

輸出:

1 3 4 5 


也可以使用庫函數(#include<queue>)優先順序隊列(priority_queue), 但是取值預設得到最大值

可以使用priority_queue<int, vector<int>, greater<int> > 輸出最小值.

代碼:

/* * main.cpp * *  Created on: 2014.7.20 *      Author: spike *//*eclipse cdt, gcc 4.8.1*/#include <stdio.h>#include <queue>#include <vector>#include <functional>using namespace std;int main(void){priority_queue<int, std::vector<int>, std::greater<int> > pque;pque.push(3);pque.push(5);pque.push(1);pque.push(4);while (!pque.empty()) {printf("%d ", pque.top());pque.pop();}printf("\n");return 0;}

輸出:

1 3 4 5 






編程演算法 - 堆(heap) 代碼(C)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.