源代码如下:
/*
<span style="color:#ff0000;">一棵二次幂堆</span>是一棵左有序的堆,由右子树为空左子树为完全二叉树构成的根组成
<span style="color:#ff0000;">二项队列</span>:是二次幂堆的一个集合。 其中不存在相等大小的堆。其结构由队列节点数目确定
对应整数的二进制表示。
*/
#include <stdlib.h>
#include <stdio.h>
#define maxBQsize 40
typedef struct PQnode* PQlink;
typedef struct pq* PQ;
struct Item{int data;char c;};
struct PQnode{Item key;PQlink l,r;};
struct pq{PQlink *bq;};
PQlink z = NULL;
//连接两个大小相等的二次幂堆
PQlink pair(PQlink p,PQlink q){
if(p->key.data<q->key.data){
p->r = q->l; q->l = p; return q;
} else{
q->r = p->l; p->l = q; return p;
}
}
//插入操作
PQlink PQinsert(PQ pq, Item v){
int i; PQlink c, t = (PQlink)malloc(sizeof *t);
c = t, c->l = z; c->r = z; c->key = v;
for(i=0;i<maxBQsize;i++){
if(c==z)break;
if(pq-&g