中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

做3D打印樣品用什么外貿(mào)網(wǎng)站好2345網(wǎng)址大全

做3D打印樣品用什么外貿(mào)網(wǎng)站好,2345網(wǎng)址大全,做網(wǎng)站和做系統(tǒng)的區(qū)別,shopex網(wǎng)站 css亂了今天我們來學(xué)習(xí)堆,它也是二叉樹的一種(我滴神樹!) 目錄 堆的介紹:堆的代碼實現(xiàn):堆的結(jié)構(gòu)體創(chuàng)建:堆的初始化:堆的銷毀:堆的push:堆的pop:判空 &am…

今天我們來學(xué)習(xí)堆,它也是二叉樹的一種(我滴神樹!)
在這里插入圖片描述

目錄

  • 堆的介紹:
  • 堆的代碼實現(xiàn):
    • 堆的結(jié)構(gòu)體創(chuàng)建:
    • 堆的初始化:
    • 堆的銷毀:
    • 堆的push:
    • 堆的pop:
    • 判空 && 求Top元素 && 求size:
  • 完整源碼:

堆的介紹:

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

堆的性質(zhì):

  • 堆中某個節(jié)點的值總是不大于或不小于其父節(jié)點的值;
  • 堆總是一棵完全二叉樹。

在這里插入圖片描述

堆的代碼實現(xiàn):

堆的結(jié)構(gòu)體創(chuàng)建:

typedef int HpDataType;typedef struct Heap
{int size;int capacity;HpDataType* a;
}Hp;

堆的初始化:

這里我們選擇先不給賦值,等push時再給賦值

void HpInit(Hp* php)
{assert(php);php->a = NULL;php->size = 0;php->capacity = 0;
}

堆的銷毀:

雖然與初始化相似,但是不能混用

void HpDestory(Hp* php)
{assert(php);free(php->a);php->a = NULL;php->size = 0;php->capacity = 0;
}

堆的push:

我們需要一個向上調(diào)整算法:
在這里插入圖片描述
這里我們選擇創(chuàng)建小堆

因為我們只有push需要創(chuàng)建newnode,故不需要重新封裝一個CreatNewnode函數(shù)調(diào)整算法時需要傳的參數(shù)是

void HpPush(Hp* php, HpDataType x)
{assert(php);if (php->capacity == php->size){int newcapacity = (php->capacity == 0 ? 4 : php->capacity * 2);HpDataType* tmp = (HpDataType*)realloc(php->a, sizeof(HpDataType)* newcapacity);if (tmp == NULL){perror("realloc fail");exit(-1);}php->a = tmp;php->capacity = newcapacity;}php->a[php->size] = x;php->size++;AdjustUp(php->a, php->size - 1);
}

向上調(diào)整算法:

注意:
我們在進(jìn)行向上傳參時,要傳入動態(tài)數(shù)組的地址和最后一個葉子節(jié)點的下標(biāo),為什么不是傳入結(jié)構(gòu)體的地址原因會在后來講解

Swap(HpDataType* e1, HpDataType* e2)
{HpDataType tmp = *e1;*e1 = *e2;*e2 = tmp;
}void AdjustUp(HpDataType* a, int child)
{int parent = (child - 1) / 2;//假設(shè)進(jìn)入循環(huán)時child > 0//這里選擇child = 0作為結(jié)束標(biāo)志是因為當(dāng)child = 0時//a[child] 與 a[parent]已經(jīng)交換過一次了,//他們兩現(xiàn)在同時指向下標(biāo)位0,不需要在交換了while (child > 0){if (a[child] < a[parent]){Swap(&a[child], &a[parent]);}else{break;}child = (child - 1) / 2;parent = (parent - 1) / 2;}
}

堆的pop:

注意:
我們在進(jìn)行pop時,并不是pop最后的葉子節(jié)點,這樣沒有實際意義,我們要pop的是根節(jié)點,這樣是有實際意義的,比如Top k問題,堆排序

pop主體部分:

void HpPop(Hp* php)
{assert(php);Swap(&php->a[php->size - 1], &php->a[0]);php->size--;AdjustDown(php->a, php->size, 0);
}

同理我們也需要一個向下調(diào)整算法
在這里插入圖片描述
注意:

傳參時仍然是傳動態(tài)數(shù)組a的地址,另外還需要size與根節(jié)點0的下標(biāo),
size用于判斷是否超出堆的范圍,0作為parent的初始值

向下調(diào)整時我們需要找出孩子節(jié)點中較大或較小的那個,在這種情況下我們可以使用假設(shè)法,假設(shè)后在進(jìn)行判斷是否正確,將兩段邏輯變成一段邏輯

AdjustDown(HpDataType* a, int size, int parent)
{//假設(shè)法int child = parent * 2 + 1;while (child < size){if (child + 1 < size && a[child] > a[child + 1]){child++;}if (a[parent] > a[child]){Swap(&a[parent], &a[child]);}else{break;}child = child * 2 + 1;parent = parent * 2 + 1;}
}

判空 && 求Top元素 && 求size:

bool HpEmpty(Hp* php)
{assert(php);return php->size == 0;
}int HpTop(Hp* php)
{assert(php);//注意為空assert(php->size);return php->a[0];
}int HpSize(Hp* php)
{assert(php);return php->size;
}

完整源碼:

heap.c

#define _CRT_SECURE_NO_WARNINGS 1#include"heap.h"void HpInit(Hp* php)
{assert(php);php->a = NULL;php->size = 0;php->capacity = 0;
}void HpDestory(Hp* php)
{assert(php);free(php->a);php->a = NULL;php->size = 0;
}Swap(HpDataType* e1, HpDataType* e2)
{HpDataType tmp = *e1;*e1 = *e2;*e2 = tmp;
}void AdjustUp(HpDataType* a, int child)
{int parent = (child - 1) / 2;while (child > 0){if (a[child] < a[parent]){Swap(&a[child], &a[parent]);}else{break;}child = (child - 1) / 2;parent = (parent - 1) / 2;}
}
//小堆
void HpPush(Hp* php, HpDataType x)
{assert(php);if (php->capacity == php->size){int newcapacity = (php->capacity == 0 ? 4 : php->capacity * 2);HpDataType* tmp = (HpDataType*)realloc(php->a, sizeof(HpDataType)* newcapacity);if (tmp == NULL){perror("realloc fail");exit(-1);}php->a = tmp;php->capacity = newcapacity;}php->a[php->size] = x;php->size++;AdjustUp(php->a, php->size - 1);
}AdjustDown(HpDataType* a, int size, int parent)
{//假設(shè)法int child = parent * 2 + 1;while (child < size){if (child + 1 < size && a[child] > a[child + 1]){child++;}if (a[parent] > a[child]){Swap(&a[parent], &a[child]);}else{break;}child = child * 2 + 1;parent = parent * 2 + 1;}
}void HpPop(Hp* php)
{assert(php);Swap(&php->a[php->size - 1], &php->a[0]);php->size--;AdjustDown(php->a, php->size, 0);
}bool HpEmpty(Hp* php)
{assert(php);return php->size == 0;
}int HpTop(Hp* php)
{assert(php);assert(php->size);return php->a[0];
}int HpSize(Hp* php)
{assert(php);return php->size;
}

heap.h

#pragma once#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<assert.h>typedef int HpDataType;typedef struct Heap
{int size;int capacity;HpDataType* a;
}Hp;void HpInit(Hp* php);void HpDestory(Hp* php);void HpPush(Hp* php, HpDataType x);void HpPop(Hp* php);bool HpEmpty(Hp* php);int HpSize(Hp* php);int HpTop(Hp* php);

有疑問可以及時找博主交流

http://www.risenshineclean.com/news/46140.html

相關(guān)文章:

  • wordpress 登陸后查看seo引擎優(yōu)化
  • 長沙手機(jī)網(wǎng)站開發(fā)百度seo推廣計劃類型包括
  • 建設(shè)網(wǎng)站合同2021百度熱搜年度榜
  • wordpress 中英文網(wǎng)站模板軟文寫手接單平臺
  • 網(wǎng)站安全建設(shè)必要性seo搜索引擎專員
  • 昆山做網(wǎng)站找哪家好線上平臺推廣方式
  • 江蘇建設(shè)局的資質(zhì)辦理網(wǎng)站培訓(xùn)機(jī)構(gòu)最新消息
  • 素材網(wǎng)站建設(shè)需要多少費用seo項目
  • win7下用iis搭建網(wǎng)站百度網(wǎng)盤客服電話
  • 上海定制網(wǎng)站建設(shè)費用代寫企業(yè)軟文
  • 做盜版網(wǎng)站違法嗎湖南網(wǎng)站設(shè)計
  • 模板做圖 網(wǎng)站有哪些友情鏈接平臺
  • 做餐飲在環(huán)保局網(wǎng)站備案手機(jī)網(wǎng)頁制作軟件
  • seo網(wǎng)站做推廣的公司輔導(dǎo)班培訓(xùn)機(jī)構(gòu)
  • 相冊管理網(wǎng)站模板外鏈怎么打開
  • 做京東網(wǎng)站的摘要百度seo搜索引擎優(yōu)化方案
  • 找個公司做網(wǎng)站需要注意什么百家號seo怎么做
  • 163域名注冊屬于seo網(wǎng)站優(yōu)化
  • 企業(yè)營銷網(wǎng)站建設(shè)規(guī)劃百度網(wǎng)站優(yōu)化公司
  • 怎么在網(wǎng)站上做視頻百度電腦版網(wǎng)頁
  • 設(shè)計一個網(wǎng)頁的策劃書怎么優(yōu)化網(wǎng)站排名才能起來
  • 做30個精品網(wǎng)站北京做網(wǎng)站的公司有哪些
  • 網(wǎng)站開發(fā)教育培訓(xùn)百度排名點擊器
  • 假的建設(shè)銀行網(wǎng)站國際時事新聞2022最新
  • 制作書簽簡單又漂亮seo網(wǎng)站優(yōu)化怎么做
  • 設(shè)計公司調(diào)研報告怎么學(xué)seo基礎(chǔ)
  • 做網(wǎng)站開源互聯(lián)網(wǎng)推廣運營
  • meetsh網(wǎng)站建設(shè)營銷策劃公司介紹
  • 扒下來的網(wǎng)站怎么做修改seo教學(xué)視頻教程
  • 網(wǎng)站后臺出現(xiàn)亂碼網(wǎng)絡(luò)營銷推廣的方式