国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用

二叉樹的順序結(jié)構(gòu)

普通的二叉樹是不適合用數(shù)組來存儲(chǔ)的,因?yàn)榭赡軙?huì)存在大量的空間浪費(fèi)。而完全二叉樹更適合使用順序結(jié)構(gòu)存儲(chǔ)。現(xiàn)實(shí)中我們通常把堆(一種二叉樹)使用順序結(jié)構(gòu)的數(shù)組來存儲(chǔ),需要注意的是這里的堆和操作系統(tǒng)虛擬進(jìn)程地址空間中的堆是兩回事,一個(gè)是數(shù)據(jù)結(jié)構(gòu),一個(gè)是操作系統(tǒng)中管理內(nèi)存的一塊區(qū)域分段。

堆的概念及結(jié)構(gòu)

在這里我們先學(xué)習(xí)一下堆,堆是一種特殊的二叉樹形式
如果有一個(gè)關(guān)鍵碼的集合K = { N1,N2 ,N3 ,…, },把它的所有元素按完全二叉樹的順序存儲(chǔ)方式存儲(chǔ)在一個(gè)一維數(shù)組中,并滿足: Ni<= N(2i+1)且 Ni<= N(2i+2)( Ni>= N(2i+1)且Ni >=N(2i+2) ) i = 0,1,2…,則稱為小堆(或大堆)。將根節(jié)點(diǎn)最大的堆叫做最大堆或大根堆,根節(jié)點(diǎn)最小的堆叫做最小堆或小根堆。
堆的性質(zhì):
★堆中某個(gè)節(jié)點(diǎn)的值總是不大于或不小于其父節(jié)點(diǎn)的值;
★堆總是一棵完全二叉樹。
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用

堆的實(shí)現(xiàn)

1、堆向下調(diào)整算法

現(xiàn)在我們給出一個(gè)數(shù)組,邏輯上看做一顆完全二叉樹。我們通過從根節(jié)點(diǎn)開始的向下調(diào)整算法可以把它調(diào)整成一個(gè)小堆。向下調(diào)整算法有一個(gè)前提:左右子樹必須是一個(gè)堆,才能調(diào)整。

int arr[] = {27,15,19,18,28,34,65,49,25,37};

數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
后面在講到堆的插入接口函數(shù)時(shí),還會(huì)提到向上調(diào)整算法

2、堆的創(chuàng)建

下面我們給出一個(gè)數(shù)組,這個(gè)數(shù)組邏輯上可以看做一顆完全二叉樹,但是還不是一個(gè)堆,現(xiàn)在我們通過算法,把它構(gòu)建成一個(gè)堆。根節(jié)點(diǎn)左右子樹不是堆,我們?cè)趺凑{(diào)整呢?這里我們從倒數(shù)的第一個(gè)非葉子節(jié)點(diǎn)的子樹開始調(diào)整,一直調(diào)整到根節(jié)點(diǎn)的樹,就可以調(diào)整成堆。

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

數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
此時(shí)調(diào)換1和8的位置時(shí),8的左子樹堆結(jié)構(gòu)被破壞,所以在每一次發(fā)生元素交換的時(shí)候,都需要遞歸調(diào)用重新構(gòu)造堆的結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
最后構(gòu)造的大堆:8,7,6,5,1,3

3、堆的插入

刪除堆是刪除堆頂?shù)臄?shù)據(jù),將堆頂?shù)臄?shù)據(jù)根最后一個(gè)數(shù)據(jù)一換,然后刪除數(shù)組最后一個(gè)數(shù)據(jù),再進(jìn)行向下調(diào)整算法。
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用
★將堆頂元素和堆中最后一個(gè)元素進(jìn)行交換
★刪除最后一個(gè)元素
★將堆頂?shù)脑叵蛳抡{(diào)整,直到滿足堆特性為止

4、堆的實(shí)現(xiàn)

這里堆的實(shí)現(xiàn)我們使用的是順序表結(jié)構(gòu)
堆的結(jié)構(gòu)體及接口定義

// 大堆
typedef int HPDataType;
typedef struct Heap
{
	HPDataType* a;
	int size;
	int capacity;
}HP;

void AdjustUp(int* a, int child);//向上調(diào)整
void AdjustDown(int* a, int n, int parent);//向下調(diào)整

void Swap(HPDataType* px, HPDataType* py);//交換函數(shù)
void HeapInit(HP* hp);//堆的初始化
void HeapDestroy(HP* hp);// 堆的銷毀
void HeapPush(HP* hp, HPDataType x);// 堆的插入
void HeapPop(HP* hp);// 堆的刪除
HPDataType HeapTop(HP* hp);// 取堆頂?shù)臄?shù)據(jù)
void HeapPrint(HP* hp);//堆的打印
bool HeapEmpty(HP* hp);// 堆的判空
int HeapSize(HP* hp);// 堆的數(shù)據(jù)個(gè)數(shù)

堆的接口實(shí)現(xiàn)

交換函數(shù)(Swap)
代碼如下:

void Swap(HPDataType* px, HPDataType* py)
{
	HPDataType tmp = *px;
	*px = *py;
	*py = tmp;
}

這里的交換函數(shù)不是接口函數(shù),僅為了方便其他接口函數(shù)調(diào)用

向上調(diào)整(AdjustUp)

代碼如下:

void AdjustUp(int* a, int child)
{
	assert(a);

	int parent = (child - 1) / 2;
	while (child > 0)
	{
		if (a[child] < a[parent])
		{
			Swap(&a[child], &a[parent]);

			child = parent;
			parent = (child - 1) / 2;
		}
		else
		{
			break;
		}
	}
}

這里的向上調(diào)整函數(shù)就是指定一個(gè)元素與其父親比較,如果孩子小于父親,就交換
常用于小堆的插入與堆排序。

向下調(diào)整(AdjustDown)

代碼如下:

void AdjustDown(int* a, int n, int parent)
{
	int child = parent * 2 + 1;
	while (child < n)
	{
		// 選出左右孩子中小的那一個(gè)
		if (child + 1 < n && a[child + 1] < a[child])
		{
			++child;
		}

		// 如果小的孩子小于父親,則交換,并繼續(xù)向下調(diào)整
		if (a[child] < a[parent])
		{
			Swap(&a[child], &a[parent]);
			parent = child;
			child = parent * 2 + 1;
		}
		else
		{
			break;
		}
	}
}

這里的向下調(diào)整函數(shù)就是指定一個(gè)元素與其父親比較,如果孩子小于父親,就交換
同樣常用于小堆的插入與堆排序,和向上調(diào)整的不同的就是方向。

堆的初始化(HeapInit)

代碼如下:

void HeapInit(HP* hp)
{
	assert(hp);
	hp->a = NULL;
	hp->size = hp->capacity = 0;
}

堆的銷毀(HeapDestroy)

代碼如下:

void HeapDestroy(HP* hp)
{
	assert(hp);
	free(hp->a);
	hp->capacity = hp->size = 0;
}

堆的插入(HeapPush)

代碼如下:

void HeapPush(HP* hp, HPDataType x)
{
	assert(hp);
	if (hp->size == hp->capacity)
	{
		size_t newCapacity = hp->capacity == 0 ? 4 : hp->capacity * 2;
		HPDataType* tmp = realloc(hp->a, sizeof(HPDataType)*newCapacity);
		if (tmp == NULL)
		{
			printf("realloc fail\n");
			exit(-1);
		}

		hp->a = tmp;
		hp->capacity = newCapacity;
	}

	hp->a[hp->size] = x;
	hp->size++;
	AdjustUp(hp->a, hp->size - 1);
}

堆的插入,首先創(chuàng)建內(nèi)存空間,然后插入元素,size++就不說了;
重點(diǎn)講一下這里的向上調(diào)整,因?yàn)槭切?shù)往上調(diào),所以這里的調(diào)用是用于小堆的建立;
如果要改成大堆,那么就要將向上調(diào)整函數(shù)的判斷改為大于;
修改后代碼如下:

if (a[child] >  a[parent])

堆的刪除(HeapPop)

代碼如下:

void HeapPop(HP* hp)
{
	assert(hp);
	assert(!HeapEmpty(hp));

	Swap(&hp->a[0], &hp->a[hp->size - 1]);
	hp->size--;

	AdjustDown(hp->a, hp->size, 0);
}

堆的刪除是刪除堆頂?shù)脑兀切枰⒁獾氖遣⒉皇侵苯訉⒍秧斣刂苯觿h除
而是將堆頂元素和最后一個(gè)元素交換,再進(jìn)行size–
再將換上去的最后的元素重新向下調(diào)整到相應(yīng)位置
這樣做的目的是為了保持堆的基本結(jié)構(gòu),否則可能堆結(jié)構(gòu)可能不成立。

取堆頂?shù)臄?shù)據(jù)(HeapTop)

代碼如下:

HPDataType HeapTop(HP* hp)
{
	assert(hp);
	assert(!HeapEmpty(hp));

	return hp->a[0];
}

直接返回第一個(gè)元素即可

堆的打印(HeapPrint)

代碼如下:

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

常用的for循環(huán)對(duì)順序表進(jìn)行元素遍歷逐個(gè)打印

堆的判空(HeapEmpty)

代碼如下:

bool HeapEmpty(HP* hp)
{
	assert(hp);

	return hp->size == 0;
}

這里使用的是bool值,當(dāng)然你也可以使用int類型

堆的數(shù)據(jù)個(gè)數(shù)(HeapSize)

代碼如下:

int HeapSize(HP* hp)
{
	assert(hp);
	return hp->size;
}

堆排序的簡(jiǎn)易例子

代碼如下:

void HeapSort(int* a, int n)
{
	for (int i = (n - 1 - 1) / 2; i >= 0; --i)
	{
		AdjustDown(a, n, i);
	}
	for (int end = n - 1; end > 0; --end)
	{
		Swap(&a[end], &a[0]);
		AdjustDown(a, end, 0);
	}
}
int main()
{
	int a[] = { 70, 56, 30, 25, 15, 10, 75, 33, 50, 69 };
	HeapSort(a, sizeof(a) / sizeof(a[0]));
	for (int i = 0; i < sizeof(a) / sizeof(a[0]); ++i)
	{
		printf("%d ", a[i]);
	}
	printf("\n");

	return 0;
}

這里我們主要使用向下調(diào)整的方法來實(shí)現(xiàn),因?yàn)樯厦鎸?duì)堆的刪除是用于小堆
所以這里調(diào)用向下調(diào)整后,該數(shù)組為降序,排序后打印如下:

75 70 69 56 50 33 30 25 15 10

如果要進(jìn)行升序排序,我們只需將向下調(diào)整函數(shù)的部分符號(hào)修改即可
修改如下:

void AdjustDown(int* a, int n, int parent)
{
	int child = parent * 2 + 1;
	while (child < n)
	{
		if (child + 1 < n && a[child + 1] > a[child])
		{
			++child;
		}
		if (a[child] > a[parent])
		{
			Swap(&a[child], &a[parent]);
			parent = child;
			child = parent * 2 + 1;
		}
		else
		{
			break;
		}
	}
}

排序后打印如下:

10 15 25 30 33 50 56 69 70 75

結(jié)語

有興趣的小伙伴可以關(guān)注作者,如果覺得內(nèi)容不錯(cuò),請(qǐng)給個(gè)一鍵三連吧,蟹蟹你喲?。。?br> 制作不易,如有不正之處敬請(qǐng)指出
感謝大家的來訪,UU們的觀看是我堅(jiān)持下去的動(dòng)力
在時(shí)間的催化劑下,讓我們彼此都成為更優(yōu)秀的人吧?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-418078.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹的順序結(jié)構(gòu)及堆的概念及結(jié)構(gòu)實(shí)現(xiàn)應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)入門】二叉樹的遍歷(前序、中序、后序、層序)

    【數(shù)據(jù)結(jié)構(gòu)入門】二叉樹的遍歷(前序、中序、后序、層序)

    個(gè)人主頁:平行線也會(huì)相交 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會(huì)相交 原創(chuàng) 收錄于專欄【數(shù)據(jù)結(jié)構(gòu)初階(C實(shí)現(xiàn))】 什么是二叉樹遍歷: 二叉樹遍歷就是按照某種特定的規(guī)則,依次堆二叉樹中的結(jié)點(diǎn)進(jìn)行相應(yīng)的操作,并且 每個(gè)結(jié)點(diǎn)只操作一次 。訪問結(jié)點(diǎn)

    2023年04月09日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】八、非線性表里的二叉樹(二叉樹的實(shí)現(xiàn) -- C語言鏈?zhǔn)浇Y(jié)構(gòu))

    【數(shù)據(jù)結(jié)構(gòu)初階】八、非線性表里的二叉樹(二叉樹的實(shí)現(xiàn) -- C語言鏈?zhǔn)浇Y(jié)構(gòu))

    ========================================================================= 相關(guān)代碼gitee自取 : C語言學(xué)習(xí)日記: 加油努力 (gitee.com) ?========================================================================= 接上期 : 【數(shù)據(jù)結(jié)構(gòu)初階】七、非線性表里的二叉樹(堆的實(shí)現(xiàn) -- C語言順序結(jié)構(gòu))-CSDN博客 ?==========

    2024年02月08日
    瀏覽(31)
  • C語言數(shù)據(jù)結(jié)構(gòu)初階(10)----二叉樹的實(shí)現(xiàn)

    C語言數(shù)據(jù)結(jié)構(gòu)初階(10)----二叉樹的實(shí)現(xiàn)

    · CSDN的uu們,大家好。這里是C語言數(shù)據(jù)結(jié)構(gòu)的第十講。 · 目標(biāo):前路坎坷,披荊斬棘,扶搖直上。 · 博客主頁:?@姬如祎 · 收錄專欄:?數(shù)據(jù)結(jié)構(gòu)與算法 ? ? 目錄 1.?函數(shù)接口一覽 2.?函數(shù)接口的實(shí)現(xiàn) 2.1 BTNode* BuyNode(BTDataType x)?的實(shí)現(xiàn) 2.2?BTNode* CreateTree()?的實(shí)現(xiàn) ?2.3?void

    2023年04月08日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的前中后序遍歷(C語言)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的前中后序遍歷(C語言)

    [二叉樹] 顧名思義就是有 兩個(gè)分支節(jié)點(diǎn)的樹,不僅如此,除了葉子外的所有節(jié)點(diǎn)都具有兩個(gè)分支節(jié)點(diǎn); 由于結(jié)構(gòu)像一棵倒立的樹,顧名思義為二叉樹 ; 如下圖所示,該圖即為一棵 野生的二叉樹 ; 既然二叉樹為樹,固然有著和樹一樣的部分( 葉子、根、分支… ) 這些也成為

    2024年02月17日
    瀏覽(26)
  • 二叉樹的基本操作-C語言實(shí)現(xiàn)-數(shù)據(jù)結(jié)構(gòu)作業(yè)

    二叉樹的基本操作-C語言實(shí)現(xiàn)-數(shù)據(jù)結(jié)構(gòu)作業(yè)

    目錄 ?(1)二叉樹的創(chuàng)建; (2)二叉樹的先序、中序和后序遍歷輸出; (3)輸出二叉樹的葉子節(jié)點(diǎn)和度為2的節(jié)點(diǎn)的數(shù)量; (4)輸出二叉樹的深度; (5)將二叉樹所有節(jié)點(diǎn)的左右子樹互換(左子樹變右子樹,右子樹變左子樹); (6)參考書上,二叉樹按層次輸出(一行輸出一層); (7)刪除二

    2024年02月04日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告,二叉樹的基本操作(C語言)

    數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告,二叉樹的基本操作(C語言)

    作者:命運(yùn)之光 專欄:數(shù)據(jù)結(jié)構(gòu) 實(shí)驗(yàn)六 二叉樹的基本操作 實(shí)驗(yàn)環(huán)境:Visual C++或Dev C++ 實(shí)驗(yàn)?zāi)康模?1、掌握二叉樹創(chuàng)建; 2、掌握二叉樹的遍歷及常用算法。 實(shí)驗(yàn)內(nèi)容: 通過完全前序序列創(chuàng)建一棵二叉樹,完成如下功能: 1)輸出二叉樹的前序遍歷序列; 2)輸出二叉樹的中序遍

    2024年02月09日
    瀏覽(24)
  • 數(shù)據(jù)結(jié)構(gòu)(C語言實(shí)現(xiàn))——二叉樹的概念及二叉樹順序結(jié)構(gòu)和鏈?zhǔn)浇Y(jié)構(gòu)的實(shí)現(xiàn)(堆排序+TOP-K問題+鏈?zhǔn)蕉鏄湎嚓P(guān)操作)

    數(shù)據(jù)結(jié)構(gòu)(C語言實(shí)現(xiàn))——二叉樹的概念及二叉樹順序結(jié)構(gòu)和鏈?zhǔn)浇Y(jié)構(gòu)的實(shí)現(xiàn)(堆排序+TOP-K問題+鏈?zhǔn)蕉鏄湎嚓P(guān)操作)

    前面學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)中線性結(jié)構(gòu)的幾種結(jié)構(gòu),順序表,鏈表,棧和隊(duì)列等,今天我們來學(xué)習(xí)一種非線性的數(shù)據(jù)結(jié)構(gòu)——樹。由于二叉樹是數(shù)據(jù)結(jié)構(gòu)中的一個(gè)重點(diǎn)和難點(diǎn),所以本文著重介紹二叉樹的相關(guān)概念和性質(zhì),以及二叉樹的應(yīng)用。 樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(

    2023年04月21日
    瀏覽(23)
  • 《數(shù)據(jù)結(jié)構(gòu)C語言版》——樹、森林與二叉樹的轉(zhuǎn)換(超詳圖解)

    《數(shù)據(jù)結(jié)構(gòu)C語言版》——樹、森林與二叉樹的轉(zhuǎn)換(超詳圖解)

    哈嘍!這里是一只派大鑫,不是派大星。本著基礎(chǔ)不牢,地動(dòng)山搖的學(xué)習(xí)態(tài)度,從基礎(chǔ)的C語言語法講到算法再到更高級(jí)的語法及框架的學(xué)習(xí)。更好地讓同樣熱愛編程(或是應(yīng)付期末考試 狗頭.jpg)的大家能夠在學(xué)習(xí)階段找到好的方法、路線,讓天下沒有難學(xué)的程序(只有禿頭的程

    2024年02月10日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹概念及結(jié)構(gòu)(入門)

    數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹概念及結(jié)構(gòu)(入門)

    1.1 樹的概念 樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n=0)個(gè)有限結(jié)點(diǎn)組成一個(gè)具有層次關(guān)系的集合。把它叫做樹是因?yàn)樗雌饋硐褚豢玫箳斓臉洌簿褪钦f它是根朝上,而葉朝下的。 ☆有一個(gè)特殊的結(jié)點(diǎn),稱為根結(jié)點(diǎn),根節(jié)點(diǎn)沒有前驅(qū)結(jié)點(diǎn) ☆除根節(jié)點(diǎn)外,其余結(jié)點(diǎn)被分成M

    2023年04月14日
    瀏覽(22)
  • 14-數(shù)據(jù)結(jié)構(gòu)-二叉樹的創(chuàng)建以及前中后遍歷,以及結(jié)點(diǎn)和葉子節(jié)點(diǎn)的計(jì)算(C語言)

    14-數(shù)據(jù)結(jié)構(gòu)-二叉樹的創(chuàng)建以及前中后遍歷,以及結(jié)點(diǎn)和葉子節(jié)點(diǎn)的計(jì)算(C語言)

    概述: ? ? ? ? 二叉樹,這里采用孩子鏈表存儲(chǔ)法,即一個(gè)數(shù)據(jù)域和兩個(gè)左右孩子指針域。隨后遞歸進(jìn)行遍歷即可。在創(chuàng)建二叉樹的時(shí)候,先創(chuàng)建各個(gè)二叉樹結(jié)點(diǎn)(這里的結(jié)點(diǎn)采用動(dòng)態(tài)分配,因此結(jié)點(diǎn)為指針變量),隨后,再根據(jù)邏輯結(jié)構(gòu)圖,手動(dòng)通過左右指針域,鏈接到對(duì)

    2024年02月11日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包