1. 程式人生 > >基本資料結構——堆(Heap)的基本概念及其操作

基本資料結構——堆(Heap)的基本概念及其操作

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #define maxn 100010   //這部分可以自己定義堆記憶體多少個元素 
 6 using namespace std;
 7 struct Heap
 8 {
 9     int size,queue[maxn];
10     Heap()         //初始化 
11     {
12         size=0;
13         for
(int i=0;i<maxn;i++) 14 queue[i]=0; 15 } 16 void shift_up(int i) //上浮 17 { 18 while(i>1) 19 { 20 if(queue[i]<queue[i>>1]) 21 { 22 int temp=queue[i]; 23 queue[i]=queue[i>>1]; 24
queue[i>>1]=temp; 25 } 26 i>>=1; 27 } 28 } 29 void shift_down(int i) //下沉 30 { 31 while((i<<1)<=size) 32 { 33 int next=i<<1; 34 if(next<size && queue[next+1
]<queue[next]) 35 next++; 36 if(queue[i]>queue[next]) 37 { 38 int temp=queue[i]; 39 queue[i]=queue[next]; 40 queue[next]=temp; 41 i=next; 42 } 43 else return ; 44 } 45 } 46 void push(int x) //加入元素 47 { 48 queue[++size]=x; 49 shift_up(size); 50 } 51 void pop() //彈出操作 52 { 53 int temp=queue[1]; 54 queue[1]=queue[size]; 55 queue[size]=temp; 56 size--; 57 shift_down(1); 58 } 59 int top(){return queue[1];} 60 bool empty(){return size;} 61 void heap_sort() //另一種堆排方式,由於難以證明其正確性 62 { //我就沒有在部落格裡介紹了,可以自己測試 63 int m=size; 64 for(int i=1;i<=size;i++) 65 { 66 int temp=queue[m]; 67 queue[m]=queue[i]; 68 queue[i]=temp; 69 m--; 70 shift_down(i); 71 } 72 } 73 }; 74 int main() 75 { 76 Heap Q; 77 int n,a,i,j,k; 78 cin>>n; 79 for(i=1;i<=n;i++) 80 { 81 cin>>a; 82 Q.push(a); //放入堆內 83 } 84 85 for(i=1;i<=n;i++) 86 { 87 cout<<Q.top()<<" "; //輸出堆頂元素 88 Q.pop(); //彈出堆頂元素 89 } 90 return 0; 91 }

相關推薦

基本資料結構——(Heap)的基本概念及其操作

1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #define maxn 100010 //這部分可以自己定義堆記憶

基本資料結構――基本概念及其操作

     轉載自:https://www.cnblogs.com/JVxie/p/4859889.html,同時感謝大佬的分析       在我剛聽到堆這個名詞的時候,我認為它是一堆東西的集合       但其實吧它是利用

Redis基本資料結構及SpringBoot中使用redisTemplate操作Redis

文章目錄 一、Redis環境 1、環境:CentOS7.0,redis-4.0.2 2、首先啟動redis服務 二、Redis資料結構 1、string(字串) (1)鍵值對 (2)使用

資料結構&&heap&priority_queue&實現

目錄 什麼是堆? 大根堆 小根堆 堆的操作 什麼是堆? 堆是一種資料結構,可以用來實現優先佇列 大根堆 大根堆,顧名思義就是根節點最大。我們先用小根堆的建堆過程學習堆的思想。 小根堆 下圖為小根堆建堆過程 堆的操作 上浮 下沉 插入 彈出 取頂 堆排序 STL heap 所在庫 #include

資料結構與演算法——基本概念與術語

概述  資料、資料元素、資料物件 資料(data)是對客觀事物的符號表示,在電腦科學中是指所有能輸入到計算機中並被計算機程式處理的程式的總稱。 資料元素(data element)是資料的基本單位,在計算機程式中通常作為一個整體進行考慮和處理。一個數據元素可由若干個資料項(data ite

資料結構基礎01-基本概念和術語/線性表

本文系列 資料結構基礎01-基本概念和術語/線性表 資料結構基礎02-棧和佇列 基本概念和術語 資料(data): 所有能輸入到計算機中去的描述客觀事物的符號。 數值性資料 非數值性資料(多媒體資訊處理) 資料元素(data element): 資

資料結構知識整理 - 基本概念 + 線性表查詢演算法

主要內容 基本概念 線性表的查詢 順序查詢(Sequential Search) 折半查詢(Binary Search) 分塊查詢(Blocking Search) 基本概念 在介紹查詢演算法前我們先重溫幾個重要概念: 1)資料:客觀事物的符號表示

MOOC浙江大學 資料結構 第一講 基本概念

1.2 什麼是演算法? 1.1 例3 double f(int n,double a[],double x) { int i; double p=a[0]; for(i=1;i<=n;i++)  p += (a[i]*pow(x,i)); return p

Python資料結構——樹的基本概念

我們已經學過了像棧和佇列這樣的線性資料結構,同時我們對遞迴也有了一定的瞭解,現在讓我們來看看另一種常見的資料結構——樹(Tree)。樹在計算機科學裡應用廣泛,包括作業系統,圖形學,資料庫和計算機網路。樹和真正的樹有許多相似的地方,也包括根、樹枝和葉子,它們的不同在於計算機中的樹的根在頂層而它的葉子在底部。

資料結構-樹(基本概念整合)

樹是最優美的形狀(世間萬物皆有其樹結構) ①樹的基本概念 樹(Tree)是n(n>=0)個結點的有限集。 在任意一棵非空樹中: (1)有且僅有一個特定的稱為根(Root)的結點; (2)當n>1時,其餘結點可分為m(m>0)個互不相交的有限集T1,T2,

基本概念及其操作

怎麽 iostream .com 基本介紹 define top break 不難 概念 轉:https://www.cnblogs.com/JVxie/p/4859889.html 堆是利用完全二叉樹的結構來維護一組數據,然後進行相關操作,一般的操作進行一次的

R語言-基本資料結構的用法

關鍵詞:向量、矩陣、陣列、資料框、因子、列表 近期開始上手R語言,可能是出於對機器學習的興趣吧從而瞭解到這門語言; 之前也看過人生苦短的Python,當然這兩門語言都是人工智慧技術中很好的工具; 二者也存在一些相同之處,當然是除了開源之外的一些相同之處; 本人蔘考的書籍是R語言實戰[

基本資料結構第一篇——位運算

在所有現代cpu中都是以二進位制方式表示資料,所以使用位掩碼來計算的優點 1、更快的執行速度、 2、更簡潔的程式碼、 3、更少的佔用記憶體量 4、用陣列代替關聯陣列 首先是按位與 按位與(&) 對兩個數進行操作,然後返回一個新的數,這個數的每個位都需要兩個輸

Nginx基本資料結構之ngx_hash_keys_arrays_t

大家看到在構建一個ngx_hash_wildcard_t的時候,需要對萬用字元的哪些key進行預處理。這個處理起來比較麻煩。而當有一組key,這些裡面既有無萬用字元的key,也有包含萬用字元的key的時候。我們就需要構建三個hash表,一個包含普通的key的hash表,一個包含前向萬用字元的hash

Objective-C runtime機制(1)——基本資料結構:objc_object & objc_class

前言 從本篇文章開始,就進入runtime的正篇。 什麼是runtime? OC是一門動態語言,與C++這種靜態語言不同,靜態語言的各種資料結構在編譯期已經決定了,不能夠被修改。而動態語言卻可以使我們在程式執行期,動態的修改一個類的結構,如修改方法實現,繫結例項變數等。

易學筆記-Go語言-第4章:基本結構基本資料型別/4.5 基本型別/4.5.2 整形

 整形 固定位元組數整形:與作業系統無關 int 和 uint 在 32 位作業系統上,它們均使用 32 位(4 個位元組),在 64 位作業系統上,它們均使用 64 位(8 個位元組)。 uintptr 存放指標 指定位元組

易學筆記-Go語言-第4章:基本結構基本資料型別/4.5 基本型別/4.5.1 bool型別

 bool型別 關鍵字:bool,兩個結果:true 或者 false 何時回產生bool型別 ==:相等性筆記 !=:不相等性筆記 >、>=、<、<=:比較 可以進行的邏輯運算

資料結構一(資料結構與演算法基本含義)

1.1 基礎概念 ● 資料元素       ● 是組成資料的,有一定意義的單位       ● 在計算機中通常作為整體處理       ● 也叫做結點或記

python學習之路-基本資料型別1 變數的概念、數字、字串

1 什麼是資料型別? 每種程式語言都有自己的資料型別,用於標識計算機可以認識的資料,Python中主要的資料型別為字串,整數,浮點數,列表,元祖,字典,集合七種主要的資料型別,其中以列表,字典為最主要的資料型別。 2 什麼是變數? 在說資料型別之前,首先說一下變數,那什麼是變數?簡單講,變數就是一個容器

資料結構--基本資料結構

1.基本資料型別區分如下: 2.線性表: 2.1順序表:         元素在記憶體之中,是連續順序儲存的,在記憶體中劃分的是一塊連續的區域      &n