7 1堆 神奇的優先佇列

2021-07-28 13:29:58 字數 1446 閱讀 9491

#includeusing namespace std;

int h[101];//用來存放堆的陣列

int n;//用來儲存堆中元素的個數,也就是堆的大小

//交換函式,用來交換堆中的兩個元素的值

void swap(int x,int y)

//向下調整函式

void siftdown(int i)

else

t=i;

//如果它有右兒子,再對右兒子進行討論

//由於堆是完全二叉樹,所以堆中任意乙個結點的右孩子(存在的情況下)編號均滿足i*2+1<=n

if(i*2+1<=n)

} //如果發現最小的結點編號不是自己,說明子結點中有比父結點更小的

if(t!=i)

else

flag=1;//否則說明當前的父結點已經比兩個子結點都要小了,不需要再進行調整了 }

}//建立堆的函式

void creat()

}//刪除最大元素//其實這個函式的效果是得到堆頂的最小元素並返回

int deletemax()

int main()

n=num;

//建堆

creat();

//刪除堆頂元素,連續刪除n次,其實也就是從小到大把數輸出來

for(i=1;i<=num;i++)

} !!!!!!!!!!高能預警!!!!!!!!!!//

#includeusing namespace std;

int h[101];//用來存放堆的陣列

int n;//用來儲存堆中元素的個數,也就是堆的大小

//交換函式,用來交換堆中的兩個元素的值

void swap(int x,int y)

//向下調整函式

void siftdown(int i)

else

t=i;

//如果它有右兒子,再對右兒子進行討論

//由於堆是完全二叉樹,所以堆中任意乙個結點的右孩子(存在的情況下)編號均滿足i*2+1<=n

if(i*2+1<=n)

} //如果發現最小的結點編號不是自己,說明子結點中有比父結點更小的

if(t!=i)

else

flag=1;//否則說明當前的父結點已經比兩個子結點都要小了,不需要再進行調整了 }

}//建立堆的函式

void creat()

}//堆排序

void heapsort()

} int main()

n=num;

//建堆

creat();

//堆排序

heapsort();

//輸出

for(i=1;i<=num;i++)

return 0;

}*/

堆 神奇的優先佇列 上

堆是什麼?是一種特殊的完全二叉樹,就像下面這棵樹一樣。有沒有發現這棵二叉樹有乙個特點,就是所有父結點都比子結點要小 注意 圓圈裡面的數是值,圓圈上面的數是這個結點的編號,此規定僅適用於本節 符合這樣特點的完全二叉樹我們稱為最小堆。反之,如果所有父結點都比子結點要大,這樣的完全二叉樹稱為最大堆。那這一...

堆 神奇的優先佇列 上 經典

原文章 堆是什麼?是一種特殊的完全二叉樹,就像下面這棵樹一樣。有沒有發現這棵二叉樹有乙個特點,就是所有父結點都比子結點要小 注意 圓圈裡面的數是值,圓圈上面的數是這個結點的編號,此規定僅適用於本節 符合這樣特點的完全二叉樹我們稱為最小堆。反之,如果所有父結點都比子結點要大,這樣的完全二叉樹稱為最大堆...

啊哈!演算法 演算法11 堆 神奇的優先佇列(上)

堆是什麼?是一種特殊的完全二叉樹,就像下面這棵樹一樣。有沒有發現這棵二叉樹有乙個特點,就是所有父結點都比子結點要小 注意 圓圈裡面的數是值,圓圈上面的數是這個結點的編號,此規定僅適用於本節 符合這樣特點的完全二叉樹我們稱為最小堆。反之,如果所有父結點都比子結點要大,這樣的完全二叉樹稱為最大堆。那這一...