最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于堆的基本操作的介紹

 更新時間:2013年05月07日 11:23:03   作者:  
本篇文章對堆的基本操作進行了詳細的分析介紹。需要的朋友參考下

  我們期望的數(shù)據(jù)結(jié)構(gòu)能支持插入操作,并能方便地從中取出具有最小或最大關(guān)鍵碼的記錄,這樣的數(shù)據(jù)結(jié)構(gòu)即為優(yōu)先級隊列。在優(yōu)先級隊列的各種實現(xiàn)中,堆是最高效的一種數(shù)據(jù)結(jié)構(gòu)。
  最小堆:任一結(jié)點的關(guān)鍵碼均小于或等于它的左右子女的關(guān)鍵碼,位于堆頂?shù)慕Y(jié)點的關(guān)鍵碼是整個元素集合的最小的,所以稱它為最小堆。最大堆類似定義。

  創(chuàng)建堆:采用從下向上逐步調(diào)整形成堆得方法來創(chuàng)建堆。為下面的分支結(jié)點調(diào)用下調(diào)算法siftDown,將以它們?yōu)楦淖訕湔{(diào)整為最小堆。從局部到整體,將最小堆逐步擴大,直到將整個樹調(diào)整為最小堆。

  插入一個元素:最小堆的插入算法調(diào)用了另一種堆得調(diào)整方法siftUp,實現(xiàn)自下而上的上滑調(diào)整。因為每次新結(jié)點總是插在已經(jīng)建成的最小堆后面,這時必須遵守與sift相反的比較路徑,從下向上,與父結(jié)點的關(guān)鍵碼進行比較,對調(diào)。

  刪除一個元素:從最小堆刪除具有最小關(guān)鍵碼記錄的操作時將最小堆的堆頂元素,即其完全二叉樹的順序表示的第0號元素刪去,去把這個元素取走后,一般以堆得最后一個結(jié)點填補取走的堆頂元素,并將堆的實際元素個數(shù)減1.但是用最后一個元素取代堆頂元素將破壞堆,需要調(diào)用siftDown算法進行調(diào)整堆。

本文代碼均以最小堆的實現(xiàn)為例。

復制代碼 代碼如下:

#include<iostream>
#include<assert.h>
usingnamespace std;

constint maxheapsize=100;
staticint currentsize=0;

//從上到下調(diào)整堆
void siftDown(int* heap,int currentPos,int m)
{
    int i=currentPos;
    int j=currentPos*2+1;//i's leftChild
int temp=heap[i];
    while(j<=m)
    {
        if(j<m&&heap[j]>heap[j+1]) j++;// j points to minChild
if(temp<=heap[j]) break;
        else
        {
            heap[i]=heap[j];
            i=j;
            j=2*i+1;
        }
    }
    heap[i]=temp;
}

//從下向上調(diào)整堆
void siftUp(int* heap, int start)
{
    int i=start,j=(i-1)/2;
    int temp=heap[i];

    while(i>0)
    {
        if(heap[j]>temp)
        {
            heap[i]=heap[j];
            i=j;
            j=(i-1)/2;
        }
        elsebreak;
    }
    heap[i]=temp;
}

//構(gòu)建堆
int* Heap(int*arr, int size)
{
    int i;
    currentsize=size;
    int* heap =newint[maxheapsize];
    assert(heap!=NULL);
    for(i=0;i<currentsize;i++) heap[i]=arr[i];
    int currentPos=(currentsize-2)/2;
    while(currentPos>=0)
    {
        siftDown(heap,currentPos,currentsize-1);
        currentPos--;
    }
    return heap;
}


//增加一個元素
void insert(int* heap,int value)
{
    if(currentsize>=maxheapsize)
    {
        cout<<"Heap is full!"<<endl;
        return ;
    }
    heap[currentsize]=value;
    siftUp(heap,currentsize);
    currentsize++;
}

//刪除一個元素,并返回刪除前的堆頂元素
int removemin(int* heap)
{
    assert(currentsize>=0);
    int removeValue=heap[0];
    heap[0]=heap[currentsize-1];
    currentsize--;
    siftDown(heap,0,currentsize-1);
    return removeValue;
}

int main()
{
    constint size=10;
    int arr[size]={2,1,3,0,8,1,6,9,7,10};
    int* heap=Heap(arr,size);
    //堆排序
for(int i=0;i<size;i++)
    {
        arr[i]=removemin(heap);
        cout<<arr[i]<<endl;
    }
    delete []heap;
    return0;

 
 

}

相關(guān)文章

  • C++設(shè)計模式迪米特法則實例

    C++設(shè)計模式迪米特法則實例

    這篇文章主要為大家詳細介紹了C++設(shè)計模式迪米特法則實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C、C++線性表基本操作的詳細介紹

    C、C++線性表基本操作的詳細介紹

    這篇文章主要給大家介紹了關(guān)于C、C++線性表基本操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • C/C++利用原生套接字抓取FTP數(shù)據(jù)包

    C/C++利用原生套接字抓取FTP數(shù)據(jù)包

    這篇文章主要為大家詳細介紹了如何基于原始套接字的網(wǎng)絡(luò)數(shù)據(jù)包捕獲與分析工具,通過實時監(jiān)控網(wǎng)絡(luò)流量,實現(xiàn)抓取流量包內(nèi)的FTP通信數(shù)據(jù),需要的小伙伴可以參考下
    2023-12-12
  • 基于C語言實現(xiàn)簡易三子棋游戲

    基于C語言實現(xiàn)簡易三子棋游戲

    這篇文章主要為大家詳細介紹了基于C語言實現(xiàn)簡易三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下<BR>
    2022-01-01
  • Qt中QSettings配置文件的讀寫和應用場景詳解

    Qt中QSettings配置文件的讀寫和應用場景詳解

    這篇文章主要給大家介紹了關(guān)于Qt中QSettings配置文件的讀寫和應用場景的相關(guān)資料,QSettings能讀寫配置文件,當配置文件不存在時,可生成配置文件,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • 給C語言初學者的學習建議

    給C語言初學者的學習建議

    在本篇文章里小編給大家分享的是關(guān)于C語言學習建議的相關(guān)內(nèi)容,有興趣的朋友們可以學習參考下。
    2020-06-06
  • C語言函數(shù)棧幀的創(chuàng)建與銷毀詳解

    C語言函數(shù)棧幀的創(chuàng)建與銷毀詳解

    函數(shù)棧幀(stack frame)就是函數(shù)調(diào)用過程中在程序的調(diào)用棧(call stack)所開辟的空間,下面這篇文章主要給大家介紹了關(guān)于C語言函數(shù)棧幀的創(chuàng)建與銷毀的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • 純C語言:貪心Prim算法生成樹問題源碼分享

    純C語言:貪心Prim算法生成樹問題源碼分享

    這篇文章主要介紹了貪心Prim算法生成樹問題源碼,有需要的朋友可以參考一下
    2014-01-01
  • C語言中strcmp的實現(xiàn)原型

    C語言中strcmp的實現(xiàn)原型

    這篇文章主要介紹了C語言中strcmp的實現(xiàn)原型的相關(guān)資料,這里提供實例幫助大家理解這部分內(nèi)容,希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • C語言操作符超詳細講解上篇

    C語言操作符超詳細講解上篇

    C?語言提供了豐富的操作符,有:算術(shù)操作符,移位操作符,位操作符,賦值操作符,單目操作符,關(guān)系操作符,邏輯操作符,條件操作符等。因為篇幅過大將分兩篇講解,讓我們通讀本篇來詳細了解吧
    2022-04-04

最新評論

岳池县| 虞城县| 灵山县| 那曲县| 徐水县| 白银市| 镇康县| 蕉岭县| 成安县| 宣威市| 南通市| 宿迁市| 高邮市| 勐海县| 临漳县| 闻喜县| 客服| 二手房| 墨玉县| 甘孜县| 达日县| 游戏| 宜宾市| 齐河县| 桂林市| 洛隆县| 偃师市| 柳林县| 甘孜县| 定远县| 嘉鱼县| 神木县| 清涧县| 太湖县| 巫溪县| 崇义县| 黎平县| 鄂州市| 平湖市| 凤庆县| 卢龙县|