优先级队列 待我称王封你为后i 2021-12-16 10:25 403阅读 0赞 #include <iostream> using namespace std; int parent(int i) { return i/2; } int left(int i) { return 2*i; } int right(int i) { return 2*i+1; } void exchange(int &a,int &b) { int temp; temp=a; a=b; b=temp; } //但就算法来看,heap_size(堆的大小)设为全局变量也许会好一些 void max_heapify(int *a,int i,int heap_size) { int l=left(i); int r=right(i); int largest; if (l<=heap_size&&a[l]>a[i]) { largest=l; } else { largest=i; } if (r<=heap_size&&a[r]>a[largest]) { largest=r; } if (largest!=i) { exchange(a[i],a[largest]); max_heapify(a,largest,heap_size); } } void build_max_heap(int *a,int heap_size) { for (int i=heap_size/2;i>=0;i--) { max_heapify(a,i,heap_size); } } int heap_maximum(int *a) { return a[0]; } int heap_extract_max(int *a,int heap_size) { if (heap_size<0) { cout<<"heap_underflow"<<endl; return 0; } int Max=a[0]; a[0]=a[heap_size]; heap_size=heap_size-1; max_heapify(a,0,heap_size); return Max; } void heap_increase_key(int *a,int i,int key) { if (key<a[i]) { cout<<"new key is small than current key"<<endl; return; } a[i]=key; while (i>0&&a[parent(i)]<a[i]) { exchange(a[i],a[parent(i)]); i=parent(i); } } void max_heap_insert(int *a,int key,int heap_size) { heap_size=heap_size+1; a=(int*)realloc(a,sizeof(int)*(heap_size+1)); a[heap_size]=-10000; heap_increase_key(a,heap_size,key); } int main() { int b[]={ 4,1,3,2,16,30,10,14}; int *a; int heap_size=sizeof(b)/sizeof(int)-1; a=(int*)malloc(sizeof(int)*(heap_size+1)); memcpy(a,b,sizeof(int)*(heap_size+1)); build_max_heap(a,heap_size); max_heap_insert(a,11,heap_size); for (int i=0;i<=heap_size+1;i++) cout<<a[i]<<""; cout<<endl; cout<<heap_maximum(a)<<endl; cout<<heap_extract_max(a,heap_size+1)<<endl; for (int i=0;i<=heap_size;i++) cout<<a[i]<<""; cout<<endl; system("pause"); free(a); return 0; } 转载于:https://www.cnblogs.com/tiandsp/archive/2012/02/17/2356471.html
相关 PriorityQueue优先级队列 文章目录 1.概念 2.优先级队列的模拟实现 2.1 堆的概念 2.2堆的创建 2.2.1堆的向下调整 偏执的太偏执、/ 2024年04月03日 11:19/ 0 赞/ 101 阅读
相关 优先级队列 1. 优先级队列 1.1 概念 前面介绍过队列, 队列是一种先进先出 (FIFO) 的数据结构 ,但有些情况下, 操作的数据可能带有优先级,一般出队 列时,可能需要优先级 喜欢ヅ旅行/ 2024年04月01日 15:34/ 0 赞/ 106 阅读
相关 优先级队列 目录 1.优先级队列 2.优先级队列的模拟实现 2.1堆的概念 2.2堆的创建 2.2.1堆向下调整 2.2.2堆的创建 2.2.3堆的时间复杂度 2.3堆的插 £神魔★判官ぃ/ 2024年03月27日 15:46/ 0 赞/ 97 阅读
相关 优先级队列(堆) 优先级队列 概念 > 我们知道,队列是一种先进先出的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,该中场景下,使用 灰太狼/ 2024年02月22日 09:32/ 0 赞/ 90 阅读
相关 Java 优先级队列 文章目录 Java 优先级队列 PriorityQueue简介 继承关系 PriorityQueue示例 Co 刺骨的言语ヽ痛彻心扉/ 2023年10月09日 13:55/ 0 赞/ 63 阅读
相关 优先级队列 前面说过普通队列以及循环队列的使用。关于队列还有一种常用的数据结构:优先级队列。先来看一下下面实际背景: 在办公的时候,桌面上会有一堆需要处理的文件。但是事有轻重缓急, 心已赠人/ 2022年07月18日 00:26/ 0 赞/ 289 阅读
相关 优先级队列PriorityQueue PriorityQueue 概述: PriorityQueue是优先级队列,底层采用最小堆原理进行排序。优先级队列声明下一个弹出的元素都是优先级最高的元素。 P 爱被打了一巴掌/ 2022年06月06日 10:05/ 0 赞/ 302 阅读
相关 优先级队列 链接:[https://www.cnblogs.com/Anker/archive/2013/01/23/2873951.html][https_www.cnblogs.com 柔光的暖阳◎/ 2022年01月16日 22:13/ 0 赞/ 577 阅读
相关 优先级队列 include <iostream> using namespace std; int parent(int i) { 待我称王封你为后i/ 2021年12月16日 10:25/ 0 赞/ 404 阅读
相关 优先级队列 / @auther: 巨未 @DATE: 2019/1/6 0006 10:11 @Description: 川长思鸟来/ 2021年09月23日 07:04/ 0 赞/ 464 阅读
还没有评论,来说两句吧...