小根堆的調整

2021-06-01 02:30:30 字數 1203 閱讀 2205

#include "stdio.h"

#include "stack.h"

#define maxheapsize 20     //小根堆中最多允許元素

///---------------堆的型別跟操作的定義-----------------------------------

//小根堆的資料結構型別定義

typedef int datatype;

typedef struct minnodeminheap;

//小根堆自上向下篩選演算法

void siftdown(minheap *minheap,int i,int m)        //向下移       

}minheap->key[i]=tmp;}

void  siftup(minheap *minheap,int start)      //繼續跟上一層的父結點比較       

}minheap->key[j]=tmp;

}void creatheap(minheap *minheap,datatype key,int n)}

int insertheap(minheap *minheap,datatype data)

int removeheap(minheap *minheap,datatype *data)

void initminheap(minheap *minheap)

void inorderheap(minheap minheap)

if(!isempty(s))

}while((i<=minheap.currentsize-1)||!isempty(s));  //若p不為空或棧不為空則繼續迴圈}

//-----------------------------堆的定義結束-------------------------

/*main(); 

initminheap(&minheap);

creatheap(&minheap,a,8);

printf("\n中序非遞迴遍歷小根堆:\n");

inorderheap(minheap);

printf("\n層次遍歷小根堆:\n");

for( i=0;i<8;i++)

printf("%5d",minheap.key[i]);

printf("\n%5d\n",minheap.currentsize);

}*/

堆(大根堆 小根堆)

堆又可稱之為完全二叉堆。這是乙個邏輯上基於完全二叉樹 物理上一般基於線性資料結構 如陣列 向量 鍊錶等 的一種資料結構。學習過完全二叉樹的同學們都應該了解,完全二叉樹在物理上可以用線性資料結構進行表示 或者儲存 例如陣列int a 5 就可以用來描述乙個擁有5個結點的完全二叉樹。那麼基於完全二叉樹的...

堆(Heap)大根堆 小根堆

具有以下的特點 1 完全二叉樹 2 heap中儲存的值是偏序 min heap 父節點的值小於或等於子節點的值 max heap 父節點的值大於或等於子節點的值 一般都用陣列來表示堆,i結點的父結點下標就為 i 1 2。它的左右子結點下標分別為2 i 1和2 i 2。如第0個結點左右子結點下標分別為...

堆(Heap)大根堆 小根堆

目錄一般都用陣列來表示堆,i結點的父結點下標就為 i 1 2。它的左右子結點下標分別為2 i 1和2 i 2。如第0個結點左右子結點下標分別為1和2。插入乙個元素 新元素被加入到heap的末尾,然後更新樹以恢復堆的次序。每次插入都是將新資料放在陣列最後。可以發現從這個新資料的父結點到根結點必然為乙個...