日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

最大堆实现优先队列

發布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最大堆实现优先队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最大堆實現優先隊列

頭文件

#include "heap_sort.h" #include "stdexcept" #include <iostream> class MaxHeapPriorityQueue { public:int heap_size; private:int capacity;int *array;void increase_key(int key,int index); public:void insert(int key);int maximum();int extract_max();void heap_delete(int index);const int* get_array();MaxHeapPriorityQueue(int capacity = 50);MaxHeapPriorityQueue(const int *array,const int length);virtual ~MaxHeapPriorityQueue(); };

cpp文件

#include "MaxHeapPriorityQueue.h" MaxHeapPriorityQueue::MaxHeapPriorityQueue(int capacity):capacity(capacity) {array = new int [capacity];heap_size = 0; } MaxHeapPriorityQueue::MaxHeapPriorityQueue(const int *array,const int length) {capacity = length;this->array = new int [capacity];heap_size = capacity;for (int i = 0; i < heap_size; ++i) {this->array[i] = array[i];}build_heap(this->array,heap_size); } void MaxHeapPriorityQueue::increase_key(int key,int index){if(index >= heap_size || key < array[index]){perror("new key error");return;}array[index] = key;while (index>0 && array[parent(index)] < key){array[index] = array[parent(index)];array[parent(index)] = key;index = parent(index);}} void MaxHeapPriorityQueue::insert(int key){heap_size ++;if(heap_size>capacity){int *temp_array = new int [capacity*2];for (int i = 0; i < heap_size; ++i) {temp_array[i] = array[i];}delete[] array;array = temp_array;capacity *= 2;}array[heap_size - 1] = INT_MIN;increase_key(key,heap_size-1);} int MaxHeapPriorityQueue::maximum(){return array[0]; } int MaxHeapPriorityQueue::extract_max(){int max = array[0];array[0] = array[heap_size-1];heap_size --;max_heapify(array,heap_size,0);return max; }void MaxHeapPriorityQueue::heap_delete(int index){if(index>=heap_size || index < 0 || heap_size<=0){perror("index overflow");return;}if(array[index] > array[heap_size-1]){array[index] = array[heap_size-1];max_heapify(array,heap_size-1,index);}else{increase_key(array[heap_size-1],index);}heap_size --; } const int* MaxHeapPriorityQueue::get_array(){return array; } MaxHeapPriorityQueue::~MaxHeapPriorityQueue() {if(array!= nullptr)delete [] array; }

內置的堆排序代碼鏈接:堆排序

總結

以上是生活随笔為你收集整理的最大堆实现优先队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。