最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)堆的簡單操作的示例代碼

 更新時間:2022年11月06日 14:35:54   作者:Fug_Lee  
堆(heap)是計算機科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱。堆通常是一個可以被看做一棵樹的數(shù)組對象。本文介紹了C語言中堆的一些簡單操作,需要的可以參考一下

一、堆的概念

(1)定義

如果有一個關(guān)鍵碼的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉樹的順序存儲方式存儲在一個一維數(shù)組中,并滿足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,則稱為小堆(或大堆)。將根節(jié)點最大的堆叫做最大堆或大根堆,根節(jié)點最小的堆叫做最小堆或小根堆。

(2)性質(zhì)

1.堆中某個節(jié)點的值總是不大于或不小于其父節(jié)點的值;

2.堆總是一棵完全二叉樹。

(3)小根堆示例圖

二、堆的實現(xiàn)

(1)堆的創(chuàng)建

例如:int a[ ] = {1,5,3,8,7,6};

a.初始化堆

b.交換3 和 6

c.交換5 和 8

d.交換1 和 8

調(diào)整1和8的位置,8的左子樹構(gòu)成的結(jié)構(gòu)被破壞,每一次調(diào)整元素的時候都有可能破壞其子堆的結(jié)構(gòu)。

(2)堆的插入

先將數(shù)字插入到數(shù)組的尾部,然后進行向上調(diào)整算法,直到滿足堆。

例如:在一個堆中插入80

(3)堆的刪除

刪除堆是刪除堆頂?shù)臄?shù)據(jù),將堆頂?shù)臄?shù)據(jù)根最后一個數(shù)據(jù)一換,然后刪除數(shù)組最后一個數(shù)據(jù),再進行向下調(diào)整算法。

三、堆的代碼實現(xiàn)

#include"common.h"
#define HeapDataType int
typedef struct Heap
{
	HeapDataType *base;
	int  capacity;
	int  size;
}Heap;
void HeapInit(Heap *php, int n);
void MinHeapInsert(Heap *php, HeapDataType x);
HeapDataType MinHeapRemove(Heap *php);
bool HeapEmpty(Heap *php);
void HeapPrint(Heap *php);
void HeapSort(Heap *php);
void AdjustUp(HeapDataType *base, int start);
void AdjustDown(HeapDataType *base, int start, int n);
void HeapInit(Heap *php, int n)
{
	assert(php != NULL);
	php->base = (HeapDataType*)malloc(sizeof(HeapDataType) * n);
	assert(php->base != NULL);
	php->capacity = n;
	php->size = 0;
}
bool HeapEmpty(Heap *php)
{
	assert(php != NULL);
	return php->size == 0;
}
void MinHeapInsert(Heap *php, HeapDataType x)
{
	assert(php != NULL);
	if(php->size < php->capacity)
	{
		php->base[php->size] = x;
		AdjustUp(php->base, php->size);
		php->size++;
	}
}

HeapDataType MinHeapRemove(Heap *php)
{
	assert(php != NULL);
	assert(php->size > 0);
	int heaptop_val = php->base[0];
	php->size--;
	php->base[0] = php->base[php->size];
	AdjustDown(php->base, 0, php->size);
	return heaptop_val;
}

void HeapPrint(Heap *php)
{
	for(int i=0; i<php->size; ++i)
		printf("%d ", php->base[i]);
	printf("\n");
}

void AdjustUp(HeapDataType *base, int start)
{
	int j = start;
	int i = (j-1)/2;


	HeapDataType tmp = base[j];


	while(j > 0)
	{
		if(tmp < base[i])
		{
			base[j] = base[i]; 
			j = i;
			i = (j-1)/2;
		}
		else
			break;
	}
	base[j] = tmp;
}

void AdjustDown(HeapDataType *base, int start, int n)
{
	int i = start;
	int j = 2*i + 1;
	while(j < n)
	{
		if(j+1<n && base[j]>base[j+1]) 
			j++;
		if(base[i] > base[j])
		{
			Swap(&base[i], &base[j]);
			i = j;
			j = 2*i + 1;
		}
		else
			break;
	}
}
void HeapSort(Heap *php, int ar[], int n)
{
	for(int i=0; i<n; ++i)
		php->base[i] = ar[i];
	php->size = n;
	int curpos = n/2 - 1; 
	while(curpos >= 0)
	{
		AdjustDown(php->base, curpos, n);
		curpos--;
	}

	int end = n-1;
	while(end > 0)
	{
		Swap(&php->base[0], &php->base[end]);
		AdjustDown(php->base, 0, end);
		end--;
	}

	int k = php->size - 1;
	for(int i=0; i<n; ++i)
	{
		ar[i] = php->base[k--];
	}
}

到此這篇關(guān)于C語言實現(xiàn)堆的簡單操作的示例代碼的文章就介紹到這了,更多相關(guān)C語言 堆內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt 智能指針的具體使用

    Qt 智能指針的具體使用

    本文主要介紹了Qt 智能指針的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • Qt音視頻開發(fā)之音頻播放QAudioOutput的實現(xiàn)

    Qt音視頻開發(fā)之音頻播放QAudioOutput的實現(xiàn)

    這篇文章主要為大家詳細介紹了如何利用Qt實現(xiàn)音頻播放QAudioOutput功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)Qt開發(fā)有一定的幫助,需要的可以參考一下
    2023-03-03
  • 關(guān)于C++中的友元函數(shù)的一些總結(jié)

    關(guān)于C++中的友元函數(shù)的一些總結(jié)

    以下是對C++中的友元函數(shù)進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下
    2013-09-09
  • QT中QTableWidget加載大量數(shù)據(jù)不卡頓的解決

    QT中QTableWidget加載大量數(shù)據(jù)不卡頓的解決

    本文主要介紹了QT中QTableWidget加載大量數(shù)據(jù)不卡頓的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C語言的基本語法詳解

    C語言的基本語法詳解

    本篇文章主要講解C語言 基本語法,這里提供簡單的示例和代碼來詳細講解C語言的基本語法,開始學(xué)習(xí)C語言的朋友可以看一下,希望能夠給你帶來幫助
    2021-09-09
  • C語言編程實例之輸出指定圖形問題

    C語言編程實例之輸出指定圖形問題

    這篇文章主要介紹了C語言編程實例之輸出指定圖形問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C++深入分析內(nèi)聯(lián)函數(shù)的使用

    C++深入分析內(nèi)聯(lián)函數(shù)的使用

    為了消除函數(shù)調(diào)用的時空開銷,C++ 提供一種提高效率的方法,即在編譯時將函數(shù)調(diào)用處用函數(shù)體替換,類似于C語言中的宏展開。這種在函數(shù)調(diào)用處直接嵌入函數(shù)體的函數(shù)稱為內(nèi)聯(lián)函數(shù)(Inline Function),又稱內(nèi)嵌函數(shù)或者內(nèi)置函數(shù)
    2022-04-04
  • C++ 簡單實現(xiàn)MFC ListControl 點擊列頭排序

    C++ 簡單實現(xiàn)MFC ListControl 點擊列頭排序

    這篇文章主要介紹了C++ 簡單實現(xiàn)MFC ListControl 點擊列頭排序的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • 淺談頭文件algorithm中的常用函數(shù)

    淺談頭文件algorithm中的常用函數(shù)

    下面小編就為大家?guī)硪黄獪\談頭文件algorithm中的常用函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • C++ cin不同狀態(tài)詳細講解

    C++ cin不同狀態(tài)詳細講解

    cin是C++編程語言中的標(biāo)準(zhǔn)輸入流對象,即istream類的對象。cin主要用于從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),這里的標(biāo)準(zhǔn)輸入,指的是終端的鍵盤。此外,cout是流的對象,即ostream類的對象,cerr是標(biāo)準(zhǔn)錯誤輸出流的對象,也是ostream類的對象
    2022-10-10

最新評論

元谋县| 独山县| 琼中| 肥城市| 苏尼特左旗| 武平县| 蒲江县| 三明市| 礼泉县| 射洪县| 英山县| 长治县| 哈巴河县| 阜平县| 乐陵市| 杭锦旗| 怀远县| 济南市| 德令哈市| 光山县| 怀化市| 什邡市| 波密县| 抚顺县| 集贤县| 罗平县| 基隆市| 吴桥县| 木兰县| 绩溪县| 澎湖县| 昆山市| 昌黎县| 汉阴县| 黄龙县| 惠东县| 淅川县| 浦东新区| 玛沁县| 溆浦县| 翁牛特旗|