左高树

数据结构(C语言版)第九章:堆结构

不想你离开。 提交于 2020-04-06 21:31:42
9.1 最小-最大堆 双端优先队列是一种支持如下操作的数据结构: 1. 插入一个具有任意关键字值的元素. 2. 删除关键字值最大的元素. 3. 删除关键字值最小的元素. 当仅支持插入和其中的一种删除操作时,可以采用最大堆或者最小堆.而最小-最大堆可以同时支持上述全部操作. 定义:最小-最大堆是一个满足如下条件的完全二叉树:该二叉树不为空,其上的每个元素都有一个称为关键字的域.二叉树的各层交替为最小层和最大层,且根结点位于最小层.设x是最小-最大堆的任意一个节点,如果x位于最小层,那么x就是以x为根结点的二叉树中关键字最小的结点,称该结点为最小结点.类似地,如果x位于最大层,那么x就是以x为根结点的二叉树中关键字值最大的结点,称该结点为最大结点. 9.1.2 最小-最大堆插入 #include <stdio.h> #include <math.h> #include <string.h> #define MAX_SIZE 100 //备注:这里下标从1开始 void swap( int *px, int *py ); /*最小-最大堆的插入*/ void min_max_insert( int heap[], int len, int item ); /*判断父结点是在最小堆还是最大堆,若是最小堆返回0,最大堆返回1*/ int level( int parent ); /