資料結構之優先佇列 二叉堆

2021-06-27 19:40:09 字數 1574 閱讀 9499

簡單的實現了一下二叉堆的建立,初始化,以及取最大,最小元素(大根堆,小根堆)。

**如下:

#include#include#include#define father(i) ((i) >> 1)  // 父節點

#define lchild(i) ((i) << 1) // 左結點

#define rchild(i) (((i) << 1) +1 ) // 右結點

#define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)>(b)?(b):(a))

typedef int elemtype;

typedef struct heapstruct

heapstruct, *heap;

void swap(void *a, void *b)

void initializeheap(heap *pheap,int size)

void destoryheap(heap *pheap)

// 建立小根堆

void insert_num_use_min(heap pheap, elemtype ndata)

pheap->ndata[npos] = ndata;

}// 建立大根堆

void insert_num_use_max(heap pheap, elemtype ndata)

else

break; }}

// 彈出大根堆中最大元素

elemtype popmax(heap pheap)

else

}else

break;

} pheap->nsize--;

return nvalue;

}// 彈出小根堆中最小元素

elemtype popmin(heap pheap)

else

}else

break;

} pheap->nsize--;

return nvalue;

}int main()

printf("小根堆中的元素為:\n");

for (int i = 1; i <= myheap_1->nsize; i++)

printf("%d ", myheap_1->ndata[i]);

printf("\n\n大根堆中的元素為:\n");

for (int i = 1; i <= myheap_1->nsize; i++)

printf("%d ", myheap_2->ndata[i]);

printf("\n\n依次彈出小根堆:\n");

while (myheap_1->nsize > 0)

printf("\n\n依次彈出大根堆:\n");

while (myheap_2->nsize > 0)

destoryheap(&myheap_1);

destoryheap(&myheap_2);

printf("\n\n");

system("pause");

return 0;

}

優先佇列 二叉堆

優先佇列 二叉堆 二叉堆是一棵完全二叉樹,最大堆 最小堆 中,所有根節點的鍵值都要比對應的子樹要大 小 由於是完全二叉樹,所以儲存結構可以採用陣列。最大堆的建立 include include include include include include define inf 0x3f3f3f3f...

二叉堆 優先佇列

堆 堆常見的二叉堆,這種資料結構有大根堆和小根堆。對於大根堆來說,每個父節點是大於他的兩個孩子節點的。也就是最大值在根節點。小根堆與之相反。如果堆用陣列實現的話,如果從1開始計數 因為0的位置可以在上慮或者下慮的時候做個暫存的位置 那麼乙個孩子的父節點是i 2 如果知道了父節點,而左孩子的節點位置為...

二叉堆(優先佇列)

0.1 本文總結於 資料結構與演算法分析,但源 均為原創 旨在理清二叉堆 優先佇列 堆的其他操作及其應用,以便讓朋友些知道為什麼要學習優先佇列 二叉堆 1.0 優先佇列定義 優先佇列是允許至少下列兩種操作的資料結構,insert 插入 它的工作時顯而易見的,以及 deletemin 刪除最小者 它的...