欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言實(shí)現(xiàn)二叉樹(shù)鏈?zhǔn)浇Y(jié)構(gòu)的示例詳解

 更新時(shí)間:2022年11月30日 15:02:15   作者:小小涵兒  
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)二叉樹(shù)鏈?zhǔn)浇Y(jié)構(gòu)的相關(guān)資料,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語(yǔ)言有一定的幫助,需要的可以參考一下

前言

前面我們已經(jīng)對(duì)堆進(jìn)行學(xué)習(xí),堆就是一個(gè)順序結(jié)構(gòu)的二叉樹(shù),把數(shù)組看成二叉樹(shù),下面一起學(xué)習(xí)一下鏈?zhǔn)浇Y(jié)構(gòu)的二叉樹(shù),這里是用遞歸實(shí)現(xiàn)功能

1. 鏈?zhǔn)蕉鏄?shù)結(jié)構(gòu)

typedef char BTDataType;
typedef struct BinaryTreeNode
{
	BTDataType data;
	struct BinaryTreeNode* left;
	struct BinaryTreeNode* right;
}BTNode;

2. 二叉樹(shù)的遍歷

首先,我要說(shuō)明一下遞歸實(shí)現(xiàn);遞歸實(shí)現(xiàn)一般分為三個(gè)步驟(遞歸三要素):初步明確函數(shù)功能,限制條件,找到實(shí)現(xiàn)此功能的等式

單項(xiàng)遞歸和二叉樹(shù)遞歸(多項(xiàng)遞歸)的區(qū)別?

單項(xiàng)遞歸并沒(méi)有分支,多項(xiàng)遞歸是有分支的,這就意味著二叉樹(shù)更看中整體,單項(xiàng)遞歸更看重分治。

單項(xiàng)遞歸和二叉樹(shù)遞歸的共同點(diǎn)?

都是分治思想,子問(wèn)題再分子問(wèn)題再分子問(wèn)題的思想

2.1 前序遍歷

思想:把樹(shù)看成整體:根、左子樹(shù)、右子樹(shù),先遍歷根再走左子樹(shù)再走右子樹(shù)

void BinaryTreePrevOrder(BTNode* root)
{
    //根的情況(到底的限制條件)
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}

	printf("%c ", root->data);
	BinaryTreePrevOrder(root->left);
	BinaryTreePrevOrder(root->right);
}

2.2 中序遍歷

思想:把樹(shù)看成整體:根、左子樹(shù)、右子樹(shù),先遍歷左子樹(shù)再走根再走右子樹(shù)

void BinaryTreeInOrder(BTNode* root)
{
    //根的情況(到底的限制條件)
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}

	BinaryTreeInOrder(root->left);
	printf("%c ", root->data);
	BinaryTreeInOrder(root->right);
}

2.3 后序遍歷

void BinaryTreePostOrder(BTNode* root)
{
    //根的情況(到底的限制條件)
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}

	BinaryTreePostOrder(root->left);
	BinaryTreePostOrder(root->right);
	printf("%c ", root->data);
}

2.4 層序遍歷

思想:出上一層的同時(shí)帶著下一層入隊(duì)列

//鏈?zhǔn)疥?duì)列的結(jié)構(gòu)
typedef struct BinaryTreeNode* QueueDataType;
typedef struct QueueNode
{
	QueueDataType data;
	struct QueueNode* next;
}QueueNode;
//因?yàn)橐苯拥玫疥?duì)頭的元素和隊(duì)尾的元素
typedef struct QueueLinkList
{
	QueueNode* head; //隊(duì)頭
	QueueNode* tail; //隊(duì)尾
	int size; //元素總數(shù)
}QLL;
//隊(duì)列初始化
void QLLInit(QLL* queue)
{
	assert(queue);

	queue->head = NULL;
	queue->tail = NULL;
	queue->size = 0;
}
//進(jìn)隊(duì)
void QLLPush(QLL* queue, QueueDataType x)
{
	assert(queue);

	QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));
	if (newnode == NULL)
	{
		perror("QLLPush:malloc is failed!\n");
		exit(-1);
	}

	newnode->data = x;
	newnode->next = NULL;

	if (queue->head == NULL)
	{
		queue->head = queue->tail = newnode;
	}
	else
	{
		queue->tail->next = newnode;
		queue->tail = newnode;
	}

	queue->size++;
}
//出隊(duì)
void QLLPop(QLL* queue)
{
	assert(queue != NULL);
	assert(QLLEmpty(queue) != true);
		
	//只有一個(gè)結(jié)點(diǎn)時(shí)
	if (queue->head->next == NULL)
	{
		free(queue->head); //free的是這個(gè)結(jié)點(diǎn)的空間,并不是指針
		queue->head = queue->tail = NULL;
	}
	else
	{
		//通常情況
		QueueNode* del = queue->head;
		queue->head = queue->head->next;
		free(del);
		//無(wú)需置空
	}

	queue->size--;
}
//拿取隊(duì)頭數(shù)據(jù)
QueueDataType QLLFront(QLL* queue)
{
	assert(queue != NULL);
	assert(QLLEmpty(queue) != true);

	return queue->head->data;
}
//判空
bool QLLEmpty(QLL* queue)
{
	assert(queue);

	//return queue->size == 0;
	return queue->head == NULL && queue->tail == NULL;
}
//銷(xiāo)毀
void QLLDestroy(QLL* queue)
{
	assert(queue);

	QueueNode* cur = queue->head;
	while (cur != NULL)
	{
		QueueNode* del = cur;
		cur = cur->next;
		free(del);
		del = NULL;
	}

	queue->head = queue->tail = NULL;
	queue->size = 0;
}

//層序遍歷實(shí)現(xiàn)
void BinaryTreeLevelOrder(BTNode* root)
{
	QLL queue;
	QLLInit(&queue);
    //根先入隊(duì)列
	if (root != NULL) {
		QLLPush(&queue, root);
	}
	//隊(duì)列不為NULL的時(shí)候進(jìn)行出隊(duì)頭帶下層數(shù)據(jù)入隊(duì)操作
	while (QLLEmpty(&queue) != true)
	{
        //出隊(duì)頭操作
		BTNode* front = QLLFront(&queue);
		printf("%c ", front->data);
		QLLPop(&queue);
        //帶下一層進(jìn)隊(duì)
		if (front->left != NULL)
		{
			QLLPush(&queue, front->left);
		}
		if (front->right != NULL)
		{
			QLLPush(&queue, front->right);
		}
	}
	printf("\n");
	QLLDestroy(&queue);
}

說(shuō)明:為什么遞歸不畫(huà)圖來(lái)解決呢?

多項(xiàng)遞歸畫(huà)圖是很難理解的,因?yàn)樗皇俏覀冞壿嬌舷氲?,就拿前序遍歷來(lái)說(shuō),首先是根,再遍歷左子樹(shù)再遍歷右子樹(shù)這樣循環(huán)來(lái)走,但是在實(shí)際遞歸中邏輯是左子樹(shù)走到底,直到NULL時(shí)返回訪問(wèn)右子樹(shù),如果說(shuō)是畫(huà)圖是理解不了二叉樹(shù)遞歸的,這里我們就要扣住樹(shù)的結(jié)構(gòu):根、左子樹(shù)、右子樹(shù),這樣是我們邏輯上的實(shí)現(xiàn),并不是實(shí)際中的過(guò)程實(shí)現(xiàn),這里我需要說(shuō)明一下,畫(huà)圖是為了在原有基礎(chǔ)上來(lái)進(jìn)行糾錯(cuò),這里糾正的錯(cuò)也是和根的限制條件有關(guān),這里我還會(huì)出幾期二叉樹(shù)的相關(guān)練習(xí),到時(shí)候希望大佬們看看就能理解了二叉樹(shù)遞歸!

3. 常見(jiàn)功能

3.1 二叉樹(shù)結(jié)點(diǎn)個(gè)數(shù)

遞歸三要素解決問(wèn)題

  • 首先二叉樹(shù)想到整體結(jié)構(gòu):根、左子樹(shù)、右子樹(shù)
  • 函數(shù)功能:求二叉樹(shù)結(jié)點(diǎn)的個(gè)數(shù)
  • 限制條件:根為NULL的時(shí)候就不是一個(gè)結(jié)點(diǎn)(起初的結(jié)束條件:針對(duì)根來(lái)說(shuō))
  • 等式:計(jì)算左子樹(shù)中的結(jié)點(diǎn)個(gè)數(shù)和右子樹(shù)的結(jié)點(diǎn)個(gè)數(shù),最后加上根這個(gè)結(jié)點(diǎn)
int BinaryTreeSize(BTNode* root)
{
	if (root == NULL) {
		return 0;
	}

	return BinaryTreeSize(root->left) + BinaryTreeSize(root->right) + 1;
}

代碼分析

上述列出來(lái)的思路就是實(shí)現(xiàn)思路,這里注意的是樹(shù)的整體結(jié)構(gòu),我一直扣的就是整體結(jié)構(gòu),等式中寫(xiě)的也是整體結(jié)構(gòu)的邏輯;這里來(lái)看代碼很簡(jiǎn)單就是根和左子樹(shù)和右子樹(shù)結(jié)構(gòu)

為什么不寫(xiě)子結(jié)構(gòu):根、左孩子、右孩子?

原因就是如果寫(xiě)成子結(jié)構(gòu)的話就不是整體,而是把整體分為多個(gè)相同的結(jié)構(gòu)來(lái)討論,這里就不是整體觀念就很容易陷進(jìn)去,為什么二叉樹(shù)遞歸難,難就難在你沒(méi)扣住整體,而是扣住的是子結(jié)構(gòu),如果扣住子結(jié)構(gòu)那就很容易陷進(jìn)去,只要陷進(jìn)去了就不是我們自己想的邏輯,而是實(shí)際遞歸的過(guò)程邏輯,實(shí)際遞歸的過(guò)程邏輯和我們想的邏輯有很大的區(qū)別

為什么首先要有個(gè)前提:樹(shù)的結(jié)構(gòu):根、左子樹(shù)、右子樹(shù)?

原因很簡(jiǎn)單,我們考慮整體就少不了這個(gè)結(jié)構(gòu),這是我們首先要考慮的問(wèn)題;另外也是因?yàn)檫@里三要素中的實(shí)現(xiàn)是離不開(kāi)這個(gè)整體結(jié)構(gòu)的,如果離開(kāi)了整體結(jié)構(gòu)就又被陷進(jìn)去了

限制條件是怎么來(lái)限制的?

首先我們考慮的結(jié)構(gòu)就是樹(shù)的整體結(jié)構(gòu):根、左子樹(shù)、右子樹(shù),我們不可能是來(lái)對(duì)左右子樹(shù)來(lái)限制吧,因?yàn)樽笥易訕?shù)中有很多結(jié)點(diǎn),從整體上來(lái)說(shuō)是考慮不到的,另外你只要考慮左右子樹(shù)中的結(jié)點(diǎn)恭喜你,你又被陷進(jìn)去出不來(lái)了哈哈,所以這里的限制條件是針對(duì)根來(lái)講的:也就是根的起初的結(jié)束條件以及和題意的聯(lián)系

3.2 二叉樹(shù)葉子結(jié)點(diǎn)個(gè)數(shù)

遞歸三要素解決問(wèn)題

  • 前提:樹(shù)的結(jié)構(gòu):根、左子樹(shù)、右子樹(shù)
  • 函數(shù)功能:求二叉樹(shù)葉子節(jié)點(diǎn)的個(gè)數(shù)
  • 限制條件:root=NULL的時(shí)候就不是葉子結(jié)點(diǎn),根的左右孩子是空的時(shí)候但根不是空的時(shí)候就是葉子結(jié)點(diǎn)
  • 等式:在左右子樹(shù)中找葉子節(jié)點(diǎn),左右子樹(shù)中的葉子結(jié)點(diǎn)之和也就是樹(shù)的葉子結(jié)點(diǎn)
int BinaryTreeLeafSize(BTNode* root)
{
	if (root == NULL)
	{
		return 0;
	}

	if (root->left == NULL && root->right == NULL)
	{
		return 1;
	}

	return BinaryTreeLeafSize(root->left) + BinaryTreeLeafSize(root->right);
}

代碼分析

3.3 第K層結(jié)點(diǎn)的個(gè)數(shù)

遞歸三要素解決問(wèn)題

  • 前提:樹(shù)的結(jié)構(gòu):根、左子樹(shù)、右子樹(shù)
  • 函數(shù)功能:求第K層結(jié)點(diǎn)的個(gè)數(shù)
  • 限制條件:root=NULL(起初的結(jié)束條件),根所處的是第一層所以K=1的時(shí)候返回1(題意結(jié)束條件)
  • 等式:在左右子樹(shù)的第k-1層中的結(jié)點(diǎn)個(gè)數(shù)(因?yàn)榈谝粚邮歉?,所以第K-1層才是我們要求的第K層)
int BinaryTreeLevelKSize(BTNode* root, int k)
{
	if (root == NULL)
	{
		return 0;
	}

	if (k == 1)
	{
		return 1;
	}

	return BinaryTreeLevelKSize(root->left, k - 1)
		+ BinaryTreeLevelKSize(root->right, k - 1);
}

代碼分析

3.4 二叉樹(shù)的深度

遞歸三要素解決問(wèn)題

  • 前提:樹(shù)的結(jié)構(gòu):根、左子樹(shù)、右子樹(shù)
  • 函數(shù)功能:求樹(shù)的深度
  • 限制條件:根為NULL時(shí)結(jié)束
  • 等式:樹(shù)的根是第一層,那么我們只用計(jì)算出左子樹(shù)和右子樹(shù)的哪個(gè)深度大就再加上1(根的深度)就是樹(shù)的深度
int BinaryTreeDepth(BTNode* root)
{
	if (root == NULL)
	{
		return 0;
	}

	int LeftTreeDepth = BinaryTreeDepth(root->left);
	int RightTreeDepth = BinaryTreeDepth(root->right);

	if (LeftTreeDepth > RightTreeDepth) {
		return LeftTreeDepth + 1;
	}
	else {
		return RightTreeDepth + 1;
	}
}

代碼分析

沒(méi)進(jìn)行優(yōu)化的代碼:

int BinaryTreeDepth(BTNode* root)
{
	if (root == NULL)
	{
		return 0;
	}
	if (BinaryTreeDepth(root->left) > BinaryTreeDepth(root->right)) {
		return BinaryTreeDepth(root->left) + 1;
	}
	else {
		return BinaryTreeDepth(root->right) + 1;
	}
}

這個(gè)代碼也是對(duì)的,但是時(shí)間復(fù)雜就要多了1倍,因?yàn)榕袛嘀杏玫竭f歸了,找到了并沒(méi)有記錄深度,也就進(jìn)入判斷中的遞歸,再此遞歸一次,這樣時(shí)間復(fù)雜度就增了1倍。

3.5 判斷是不是樹(shù)是不是完全二叉樹(shù)

思路:

完全二叉樹(shù)的性質(zhì):前K-1層是滿二叉樹(shù),最后一層是從左到右是連續(xù)的

思路:用層序遍歷來(lái)解決,出上一層的同時(shí)帶下一層的數(shù)據(jù),知道遇到NULL的時(shí)候就要進(jìn)行判斷隊(duì)列中是不是還有不為NULL的值,如果有就不是完全二叉樹(shù),沒(méi)有則是

bool BinaryTreeComplete(BTNode* root)
{
	QLL queue;
	QLLInit(&queue);
	if (root != NULL)
	{
		QLLPush(&queue, root);
	}

	//拿到每層的
	while (QLLEmpty(&queue) != true)
	{
		BTNode* front = QLLFront(&queue);
		QLLPop(&queue);

		//當(dāng)這層遇到NULL的時(shí)候進(jìn)行判斷
		if (front == NULL)
		{
			break;
		}
		else
		{
			QLLPush(&queue, front->left);
			QLLPush(&queue, front->right);
		}
	}
    
	//出到NULL進(jìn)行檢查
	//如果后面有非NULL就不是完全二叉樹(shù)
	while (QLLEmpty(&queue) != true)
	{
		BTNode* front = QLLFront(&queue);
		QLLPop(&queue);
		//不為NULL說(shuō)明最后一層不是連續(xù)的
		if (front != NULL)
		{
			QLLDestroy(&queue);
			return false;
		}
	}
	
	QLLDestroy(&queue);
	return true;
}

3.6 在二叉樹(shù)中查找值為x的結(jié)點(diǎn)

遞歸三要素解決問(wèn)題

前提:樹(shù)的結(jié)構(gòu):根、左子樹(shù)、右子樹(shù)

函數(shù)功能: 在二叉樹(shù)中查找值為x的結(jié)點(diǎn)

限制條件:root=NULL時(shí)結(jié)束,root->val=x時(shí)找到了就結(jié)束

等式:在根里面找,在左子樹(shù)和右子樹(shù)里面找

BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{
	if (root == NULL)
	{
		return NULL;
	}

	if (root->data == x)
	{
		return root;
	}

	BTNode* ret1 = BinaryTreeFind(root->left, x);
	if (ret1 != NULL)
	{
		return ret1;
	}

	BTNode* ret2 = BinaryTreeFind(root->right, x);
	if (ret2 != NULL)
	{
		return ret2;
	}

	return NULL;
}

代碼分析

錯(cuò)誤列舉

BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{
	if (root == NULL)
	{
		return NULL;
	}

	if (root->data == x)
	{
		return root;
    }

	return BinaryTreeFind(root->left, x) || BinaryTreeFind(root->right, x);
}

為什么邏輯上是對(duì)的,但是是錯(cuò)的?

最后的return的意思翻譯過(guò)來(lái)就是在左子樹(shù)里面找,找到了就返回,不進(jìn)右子樹(shù),如果左子樹(shù)中沒(méi)找到就進(jìn)右子樹(shù),找到了返回,如果都沒(méi)找到就直接返回NULL;邏輯上是對(duì)的,但是呢,這里我們返回的是指針,指針的的關(guān)系不能用邏輯關(guān)系來(lái)表達(dá),所以是錯(cuò)的

3.7 拿到每一層的數(shù)據(jù)

思路

也是圍繞層序遍歷來(lái)寫(xiě):記錄每一層的結(jié)點(diǎn)樹(shù)來(lái)出隊(duì)列就行了,這里也是層序遍歷的知識(shí)是主要的,就不再進(jìn)行討論了

void EveryLayer(BTNode* root)
{
	QLL queue;
	int levelCount = 0;
	QLLInit(&queue);
	if (root != NULL) {
		QLLPush(&queue, root);
		//第一層就是一個(gè)數(shù)據(jù)
		levelCount = 1;
	}

	while (QLLEmpty(&queue) != true)
	{
		while (levelCount--)
		{
			BTNode* front = QLLFront(&queue);
			printf("%c ", front->data);
			QLLPop(&queue);
			if (front->left != NULL)
			{
				QLLPush(&queue, front->left);
			}
			if (front->right != NULL)
			{
				QLLPush(&queue, front->right);
			}
		}
		//下一層的個(gè)數(shù)
		levelCount = QLLSize(&queue);
		printf("\n");
	}
	
	QLLDestroy(&queue);
}

結(jié)合上述題就很容易看出實(shí)際上我們寫(xiě)代碼來(lái)劃分的話也是樹(shù)的整體結(jié)構(gòu):根、左子樹(shù)、右子樹(shù),時(shí)刻把握著樹(shù)的整體結(jié)構(gòu),這個(gè)結(jié)構(gòu)充分體現(xiàn)在等式中,同時(shí)也影響到了限制條件,限制條件中只用管根的結(jié)束條件以及形成條件,其他的不用管,這就是在代碼中實(shí)現(xiàn)的過(guò)程,這里我就不在畫(huà)圖,覺(jué)得這個(gè)過(guò)程不能實(shí)現(xiàn)我說(shuō)的對(duì)應(yīng)的功能的時(shí)候你就畫(huà)圖去嘗試?yán)斫庖幌?,謝謝

4. 二叉樹(shù)的創(chuàng)建和銷(xiāo)毀

4.1 二叉樹(shù)的創(chuàng)建

思路:

這里用到前序遍歷來(lái)創(chuàng)建,也就是數(shù)組的元素按個(gè)放進(jìn)根的數(shù)據(jù)域中

限制條件:就是當(dāng)元素為#,代表的是二叉樹(shù)中的NULL

BTNode* BinaryTreeCreate(BTDataType* a, int* pi)
{
	//形成條件
	if (a[(*pi)] == '#')
	{
		(*pi)++;
		return NULL;
	}

	BTNode* root = (BTNode*)malloc(sizeof(BTNode));
	if (root == NULL)
	{
		perror("BinaryTreeCreate: malloc is failed!\n");
		exit(-1);
	}
	//根
	root->data = a[(*pi)++];

	//左右子樹(shù)
	root->left = BinaryTreeCreate(a, pi);
	root->right = BinaryTreeCreate(a, pi);

	return root;
}
void Test2()
{
	char str[] = { 'A','B','D','#','#','E','#','H','#','#','C','F','#','#','G','#','#' };

	int i = 0;
	BTNode* root = BinaryTreeCreate(str, &i);
}

4.2 二叉樹(shù)的銷(xiāo)毀

//二級(jí)指針
void BinaryTreeDestory(BTNode** root)
{
	if ((*root) == NULL)
	{
		return;
	}
	BinaryTreeDestory(&((*root)->left));
	BinaryTreeDestory(&((*root)->right));
	free((*root));
	*root = NULL;
}
void FirstPointBinaryTreeDestory(BTNode* root)
{
	if (root == NULL)
	{
		return;
	}

	FirstPointBinaryTreeDestory(root->left);
	FirstPointBinaryTreeDestory(root->right);
	free(root);
	//root = NULL;(沒(méi)必要)
}//需要說(shuō)明的是用這個(gè)函數(shù)調(diào)用后要對(duì)root置空

為什么采用后序遍歷來(lái)銷(xiāo)毀二叉樹(shù)?

因?yàn)楹笮虮闅v最開(kāi)始走到的就是左子樹(shù)的最后一層,然后逐次向上銷(xiāo)毀,并不會(huì)影響每個(gè)結(jié)點(diǎn)的指向;如果采用前序遍歷呢?采用前序遍歷上來(lái)就是free掉了根結(jié)點(diǎn),就找到不到這個(gè)根結(jié)點(diǎn)的左右孩子了

以上就是C語(yǔ)言實(shí)現(xiàn)二叉樹(shù)鏈?zhǔn)浇Y(jié)構(gòu)的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言二叉樹(shù)鏈?zhǔn)浇Y(jié)構(gòu)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 簡(jiǎn)單講解c++ vector

    簡(jiǎn)單講解c++ vector

    這篇文章主要介紹了c++ vector的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-09-09
  • C語(yǔ)言深入探索動(dòng)態(tài)內(nèi)存分配的使用

    C語(yǔ)言深入探索動(dòng)態(tài)內(nèi)存分配的使用

    給數(shù)組分配多大的空間?你是否和初學(xué)C時(shí)的我一樣,有過(guò)這樣的疑問(wèn)。這一期就來(lái)聊一聊動(dòng)態(tài)內(nèi)存的分配,讀完這篇文章,你可能對(duì)內(nèi)存的分配有一個(gè)更好的理解
    2022-04-04
  • C語(yǔ)言文字藝術(shù)之?dāng)?shù)據(jù)輸入輸出

    C語(yǔ)言文字藝術(shù)之?dāng)?shù)據(jù)輸入輸出

    這篇文章主要介紹了C語(yǔ)言文字藝術(shù)之?dāng)?shù)據(jù)輸入輸出,C語(yǔ)言的語(yǔ)句用來(lái)向計(jì)算機(jī)系統(tǒng)發(fā)出操作指令。一條語(yǔ)句編寫(xiě)完成經(jīng)過(guò)編譯后產(chǎn)生若干條機(jī)器指
    2022-07-07
  • C語(yǔ)言中char*和char[]用法區(qū)別分析

    C語(yǔ)言中char*和char[]用法區(qū)別分析

    這篇文章主要介紹了C語(yǔ)言中char*和char[]用法區(qū)別,包括使用過(guò)程中的誤區(qū)及注意點(diǎn)分析,需要的朋友可以參考下
    2014-09-09
  • C語(yǔ)言詳細(xì)分析貪心策略中最小生成樹(shù)的Prime算法設(shè)計(jì)與實(shí)現(xiàn)

    C語(yǔ)言詳細(xì)分析貪心策略中最小生成樹(shù)的Prime算法設(shè)計(jì)與實(shí)現(xiàn)

    最小生成樹(shù)的問(wèn)題還是比較熱門(mén)的,最經(jīng)典的莫過(guò)于Prime算法和Kruskal算法了,這篇博文我會(huì)詳細(xì)講解Prime算法的設(shè)計(jì)思想與具體代碼的實(shí)現(xiàn),不要求數(shù)據(jù)結(jié)構(gòu)學(xué)的有多好,只要跟著我的思路來(lái),一步一步的分析,調(diào)試,終能成就自己,那就讓我們開(kāi)始吧
    2022-05-05
  • 詳解C++中菱形繼承的原理與解決方法

    詳解C++中菱形繼承的原理與解決方法

    C++中的菱形繼承是多繼承的一種特殊情況,本文將通過(guò)海里帶大家了解一下菱形繼承形成的原因以及想應(yīng)的解決方法,感興趣的可以了解一下
    2023-02-02
  • C++成員初始化列表

    C++成員初始化列表

    這篇文章主要介紹了C++成員初始化列表,除了可以使用構(gòu)造函數(shù)對(duì)類成員進(jìn)行初始化之外,C++還提供了另外一種初始化的方法,叫做成員初始化列表。下面來(lái)看看文章的詳細(xì)吧,需要的朋友可以參考一下
    2022-01-01
  • 詳解C++ 臨時(shí)量與臨時(shí)對(duì)象及程序的相關(guān)優(yōu)化

    詳解C++ 臨時(shí)量與臨時(shí)對(duì)象及程序的相關(guān)優(yōu)化

    這篇文章主要介紹了C++ 臨時(shí)量與臨時(shí)對(duì)象及程序的相關(guān)優(yōu)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 遞歸刪除二叉樹(shù)中以x為根的子樹(shù)

    遞歸刪除二叉樹(shù)中以x為根的子樹(shù)

    今天小編就為大家分享一篇關(guān)于遞歸刪除二叉樹(shù)中以x為根的子樹(shù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • C++ vector刪除符合條件的元素示例分享

    C++ vector刪除符合條件的元素示例分享

    這篇文章主要介紹了C++ vector刪除符合條件的元素示例,需要的朋友可以參考下
    2014-02-02

最新評(píng)論