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

數(shù)據(jù)結(jié)構(gòu) 實(shí)驗17:Huffman樹和Huffman編碼——學(xué)習(xí)理解哈夫曼樹

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu) 實(shí)驗17:Huffman樹和Huffman編碼——學(xué)習(xí)理解哈夫曼樹。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

目錄

前言

實(shí)驗要求

算法描述

個人想法

代碼實(shí)現(xiàn)和思路、知識點(diǎn)講解

知識點(diǎn)講解

文件傳輸

Huffman樹的存儲

Huffman的構(gòu)造

?Huffman編碼

編碼和譯碼

代碼實(shí)現(xiàn)

文件寫入和輸出

Huffman樹初始化

構(gòu)造Huffman樹

求帶權(quán)路徑長度

Huffman編碼

Huffman譯碼

結(jié)束

代碼測試

測試結(jié)果


前言

實(shí)驗要求

利用Huffman編碼進(jìn)行通信可以大大提高信道利用率,縮短信息傳輸時間,降低傳輸成本。試為這樣的信息收發(fā)站編寫一個Huffman的編/譯碼系統(tǒng)。給定一組權(quán)值 {7,9,5,6,10,1,13,15,4,8},構(gòu)造一棵赫夫曼樹,并計算帶權(quán)路徑長度WPL。

算法描述

1.初始化:從鍵盤讀入n個字符,以及它們的權(quán)值,建立Huffman樹。
2.編碼: ?根據(jù)建立的Huffman樹,求每個字符的Huffman編碼。對給定的待編碼字符序列進(jìn)行編碼。
3.譯碼: ?利用已經(jīng)建立好的Huffman樹,對上面的編碼結(jié)果譯碼。
? ? ? ?? ? ?譯碼的過程是分解電文中的字符串,從根結(jié)點(diǎn)出發(fā),按字符‘0’和‘1’確定找左孩子或右孩子,直至葉結(jié)點(diǎn),便求得該子串相應(yīng)的字符。具體算法留給讀者完

個人想法

這一期是完成最最最基本要求的Huffman樹的創(chuàng)建和編碼譯碼。越是深入學(xué)習(xí),越會發(fā)現(xiàn)很多的需求和案例都是在身邊的,脫離應(yīng)用,單純就寫一個算法的實(shí)現(xiàn)感覺還是不那么能感受到學(xué)習(xí)的快樂,所以我后面還會有進(jìn)階版本的。

代碼實(shí)現(xiàn)和思路、知識點(diǎn)講解

知識點(diǎn)講解

文件傳輸

我在寫代碼的時候一個是在進(jìn)行代碼調(diào)試和效果測試的時候覺得頻繁輸入數(shù)據(jù)去調(diào)試很麻煩,另一方面是在問題描述中也說了,利用Huffman編碼進(jìn)行通信,那如果拋開文件的,數(shù)據(jù)的傳輸,那就是空談了,所以我們第一步就是文件的讀取和寫入。

Huffman樹的存儲

有了數(shù)據(jù)來源,下一步就是確定樹在內(nèi)存中的存儲,我們先來用順序結(jié)構(gòu),鏈?zhǔn)浇Y(jié)構(gòu)我后面也會出的。結(jié)構(gòu)體定義:

typedef struct {
	char data;
	unsigned int weight;		//不為0
	unsigned int parent;		//頭結(jié)點(diǎn)沒有雙親用來存葉子結(jié)點(diǎn)數(shù)量
	unsigned int lChild, rChild;
} HTNode, *HTree;

這里用的全部都是unsigned int型,就是無符號整型,計算機(jī)存儲是沒有符號的,拿了一半無符號數(shù)的空間補(bǔ)碼存儲負(fù)數(shù),無符號數(shù)就是把這段空間拿回來,全部存正數(shù)。

Huffman的構(gòu)造

我覺得相對而言這是最難的部分,主要是代碼方面可能會有些繞。知道存儲,要構(gòu)造Huffman數(shù)就要先找到什么是哈夫曼樹又是怎么構(gòu)建的。

1.將字符出現(xiàn)的頻率作為結(jié)點(diǎn)的權(quán)值,構(gòu)造一棵huffman樹,輸出huffman樹各節(jié)點(diǎn)的值,,數(shù)據(jù)結(jié)構(gòu)1-4班實(shí)驗,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí),算法,c++,圖論

1.將字符出現(xiàn)的頻率作為結(jié)點(diǎn)的權(quán)值,構(gòu)造一棵huffman樹,輸出huffman樹各節(jié)點(diǎn)的值,,數(shù)據(jù)結(jié)構(gòu)1-4班實(shí)驗,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí),算法,c++,圖論

可以看到,最開是全是葉子結(jié)點(diǎn),選擇權(quán)值最小的兩結(jié)點(diǎn)構(gòu)成一個小樹,小樹的根節(jié)點(diǎn)繼續(xù)參與選擇,選兩個最小的結(jié)點(diǎn)構(gòu)成樹,特別注意,不是只能存在一棵樹,可能會同時存在好幾顆樹,而不是盯著一只羊毛薅。最后效果如下:

1.將字符出現(xiàn)的頻率作為結(jié)點(diǎn)的權(quán)值,構(gòu)造一棵huffman樹,輸出huffman樹各節(jié)點(diǎn)的值,,數(shù)據(jù)結(jié)構(gòu)1-4班實(shí)驗,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí),算法,c++,圖論

?Huffman編碼

其實(shí)不過就是大一點(diǎn)的二叉樹,看到圖,那Huffman編碼就很簡單了,因為計算機(jī)是01二進(jìn)制,二叉樹也是只有左右兩個子樹,那就可以得到各個葉子結(jié)點(diǎn)的編碼了

1.將字符出現(xiàn)的頻率作為結(jié)點(diǎn)的權(quán)值,構(gòu)造一棵huffman樹,輸出huffman樹各節(jié)點(diǎn)的值,,數(shù)據(jù)結(jié)構(gòu)1-4班實(shí)驗,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí),算法,c++,圖論

可以發(fā)現(xiàn),如果在每一個岔路口,也就是每一個層次上標(biāo)注清楚,左拐是0,右拐是1,那對應(yīng)的編碼自然就出來了,例如:15對應(yīng)的是01;4對應(yīng)的是10011;這就是Huffman編碼。?

編碼和譯碼

每個葉子結(jié)點(diǎn)的權(quán)可以看作他們的出現(xiàn)頻率,頻率越高,就要擺在越容易夠到的地方,那我們可以將一篇文章所有出現(xiàn)的字符都看作一個葉子結(jié)點(diǎn),而它出現(xiàn)的次數(shù)就是它的權(quán),權(quán)越大離根節(jié)點(diǎn)就越接近。

編碼就是將這些字符作為葉子結(jié)點(diǎn)構(gòu)成Huffman樹,用Huffman的01編碼表示,例如我要表示9和7就是0001011;譯碼就是根據(jù)01從Huffman樹的根節(jié)點(diǎn)開始,直到找到葉子結(jié)點(diǎn),翻譯為一個字符。

代碼實(shí)現(xiàn)

文件寫入和輸出

文件寫入和輸出就是靠指針實(shí)現(xiàn),我喜歡讀寫分開來,定義w為只寫,r為只讀,a為追加,簡單展示一下:

//讀取文件并存初始化哈夫曼樹
HTree ReadFile() {
	FILE * fp = fopen(Fname, "r");					//只讀方式打開
	printf("----------正在讀取文件----------\n\n");
	int n;
	char cf, cs;
	fscanf(fp, "%d %c", &n, &cs);	//讀取第一個數(shù)據(jù)為哈夫曼樹葉子結(jié)點(diǎn)數(shù)量
	HTree ht = (HTree)malloc((2*n-1)*sizeof(HTNode));
	if (!ht) {
		printf("!??!malloc Error!??!\n");
		exit(1);
	}
	int i;
	for (i = 0; i < 2*n-1; i++) {
		ht[i].weight = ht[i].parent = ht[i].lChild = ht[i].rChild = 0;
		ht[i].data = '#';
	}
	ht[0].parent = n;
	i = 1;
	do {
		fscanf(fp, " %c %c", &(ht[i].data), &cf);
		fscanf(fp, " %u %c", &(ht[i].weight), &cs);
		i++;
	} while (cf == ',' && cs == ';');		//'#'結(jié)束
	fclose(fp);
	if (cf != ',' || cs != '#') {
		printf("!??!File Error?。。n");
		exit(1);
	}
	printf("----------文件讀取完成----------\n\n");
	return ht;
}

?我寫好了一個文件,一個字符是數(shù)量,剩下的就是對應(yīng)結(jié)點(diǎn)元素和權(quán)值:

1.將字符出現(xiàn)的頻率作為結(jié)點(diǎn)的權(quán)值,構(gòu)造一棵huffman樹,輸出huffman樹各節(jié)點(diǎn)的值,,數(shù)據(jù)結(jié)構(gòu)1-4班實(shí)驗,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí),算法,c++,圖論

?從上面的方法可以看到,文件的方法和c語言的一般方法差不多,scanf從鍵盤獲取,fscanf就是從文件獲取,除了多了一個指針fp,其他格式一模一樣。

Huffman樹初始化

上面代碼,我除了讀取文件信息外,我還將Huffman樹初始化。n個葉子結(jié)點(diǎn),Huffman樹就有2*n-1個節(jié)點(diǎn)所以我們開2*n-1個空間就行。大家的習(xí)慣是喜歡把根節(jié)點(diǎn)放在最后一個,但是我個人更喜歡把根節(jié)點(diǎn)放在第一個,因為需要的時候一下子就可以找到,而且根節(jié)點(diǎn)沒有雙親,那完全可以子啊根節(jié)點(diǎn)的雙親里面存儲葉子節(jié)點(diǎn)個數(shù)。我將根節(jié)點(diǎn)存在第0單元,1-n單元分別存放1-n個元素。

構(gòu)造Huffman樹

因為我將根節(jié)點(diǎn)放在第1單元內(nèi),所以我和書上的代碼有些不一樣,但是大同小異,我對這個方法做出了優(yōu)化后面會單獨(dú)出一篇博客:

//構(gòu)造哈夫曼樹
HTree CreateHTree() {
	HTree ht = ReadFile();
	int n = ht[0].parent;		//頭結(jié)點(diǎn)沒有雙親用來存葉子結(jié)點(diǎn)數(shù)量
	int i;
	for (i = n + 1; i < 2 * n; i++) {
		int j = 0, lNode, rNode;
		unsigned int min1, min2 = -1;
		while (ht[++j].parent);	//找到第一個未分配的結(jié)點(diǎn)
		min1 = ht[j].weight;
		lNode = j;
		while (++j < i) {
			if (!ht[j].parent) {
				if (ht[j].weight < min1) {
					min2 = min1;
					rNode = lNode;
					min1 = ht[j].weight;
					lNode = j;
				} 
				else if (ht[j].weight < min2) {
					min2 = ht[j].weight;
					rNode = j;
				}
			}
		}
		if (min1 + min2 < min1 || min1 + min2 < min2) {
			printf("!??!Error Overflow?。?!\n");
			exit(1);
		}
		j = j % (2 * n - 1);
		ht[j].weight = min1 + min2;
		ht[j].lChild = lNode;
		ht[j].rChild = rNode;
		ht[lNode].parent = j;
		ht[rNode].parent = j;
	}
	printf("----------哈夫曼樹構(gòu)建成功----------\n");
	return ht;
}

其實(shí)本質(zhì)上就是選擇排序,選擇排序是選出一個最小或最大的,這個只要加一個變量記錄次小的就和選擇排序一模一樣了。找到之后將權(quán)值,孩子,雙親等值賦好就ok。

求帶權(quán)路徑長度

我們學(xué)了遞歸,抱著遞歸的思想去做這題就會非常簡單:

//定義遞歸函數(shù),計算帶權(quán)路徑長度
int getWPL(HTree ht, int index, int depth) {
	//如果是葉子結(jié)點(diǎn),返回WPL
	if (!ht[index].lChild && !ht[index].rChild) {
		return ht[index].weight * depth;
	} 
	else {		//如果不是葉子結(jié)點(diǎn),遞歸遍歷其左右子樹,深度加1
		return getWPL(ht, ht[index].lChild, depth+1) + getWPL(ht, ht[index].rChild, depth+1);
	}
}

一個if else語句,加上兩個return解決。

Huffman編碼

這里為了讓元素和編碼之間聯(lián)系更加緊密,我單獨(dú)定義一個結(jié)構(gòu)體來存儲,就一個字符加一個數(shù)組。

//哈夫曼樹編碼存儲
typedef struct {
	char data;
	char *cd;
} HCode;

//創(chuàng)建哈夫曼樹編碼 
HCode *CreateHCode(HTree ht) {
	int n = ht[0].parent;
	HCode *hc = (HCode *)malloc(n * sizeof(HCode));//存放哈夫曼編碼
	char *code = (char *)malloc(n * sizeof(char)); //存放臨時編碼
	code[n-1] = '\0'; 				//編碼結(jié)束符
	int i;
	for (i = 1; i < n + 1; i++) { 	//遍歷每個葉子結(jié)點(diǎn)
		hc[i-1].data = ht[i].data;
		int start = n - 1; 			//編碼起始位置
		int c = i; 					//當(dāng)前結(jié)點(diǎn)下標(biāo)
		int p = ht[i].parent; 		//父節(jié)點(diǎn)下標(biāo)
		while (c != 0) { 			//直到根節(jié)點(diǎn)
			if (ht[p].lChild == c) { //左孩子為0
				code[--start] = '0';
			} 
			else { 				//右孩子為1
				code[--start] = '1';
			}
			c = p; 					//移動到父節(jié)點(diǎn)
			p = ht[p].parent; 		//移動到祖父節(jié)點(diǎn)
		}
		hc[i-1].cd = (char *)malloc((n - start) * sizeof(char));
		strcpy(hc[i-1].cd, &code[start]);
	}
	free(code); 
	printf("\n----------哈夫曼樹編碼成功----------\n");
	return hc;
}

哈夫曼樹編碼需要注意的一個點(diǎn)就是,我們從根節(jié)點(diǎn)很難明確到葉子節(jié)點(diǎn)的路徑,但是我們從葉子節(jié)點(diǎn)可以唯一確定一條路走向根節(jié)點(diǎn),因為樹的性質(zhì)可以有很多孩子但是只能有一個雙親。所以大家在求編碼的時候要從葉子節(jié)點(diǎn)開始倒著求。我推薦大家使用棧,后進(jìn)先出的性質(zhì)在這里簡直不要太好用,我是偷了個懶直接從字符串末尾往前求,然后用字符串函數(shù)的賦值方法。

Huffman譯碼

知道了什么是編碼,那么譯碼簡直不要太簡單

//哈夫曼樹譯碼 
void DeHCode(HTree ht, char *code) {
	int k = 0; //當(dāng)前節(jié)點(diǎn)下標(biāo)
	int i;
	for (i = 0; code[i] != '\0'; i++) { //遍歷序列中的每個字符
		if (code[i] == '0') { 			//向左走
			k = ht[k].lChild;
		} 
		else if (code[i] == '1') { 		//向右走
			k = ht[k].rChild;
		} 
		else { 			//非法字符
			printf("?。?!Invalid Code Error?。。n");
			exit(1);
		}
		if (ht[k].lChild == 0 && ht[k].rChild == 0) { // 到達(dá)葉子節(jié)點(diǎn)
			printf("%c", ht[k].data); // 輸出對應(yīng)字符
			k = 0; // 返回根節(jié)點(diǎn)繼續(xù)遍歷
		}
	}
	printf("\n");
}

你只需要跟著01的指引訪問左節(jié)點(diǎn)或者右節(jié)點(diǎn),直到遇到葉子節(jié)點(diǎn),輸出元素并回溯到根節(jié)點(diǎn)。周而復(fù)始直到訪問完所有元素。

結(jié)束

代碼測試

我寫個主調(diào)函數(shù)測試代碼

int main() {
	printf("%s\n", Fname);
	HTree ht = CreateHTree();
	printf("哈夫曼樹的帶權(quán)路徑長為:%d\n", getWPL(ht, 0, 0));
	HCode *hc = CreateHCode(ht);
	printf("字符\t編碼\n");
	int i;
	for (i = 0; i < ht[0].parent; i++) {
		printf("%c\t%s\n", hc[i].data, hc[i].cd);
	}
	char *c = "001000100101011111010110101110101110";
	printf("\n%s\n譯碼后為:", c);
	DeHCode(ht, c);
	printf("\n----------測試結(jié)束----------\n");
	return 0;
}

測試結(jié)果

1.將字符出現(xiàn)的頻率作為結(jié)點(diǎn)的權(quán)值,構(gòu)造一棵huffman樹,輸出huffman樹各節(jié)點(diǎn)的值,,數(shù)據(jù)結(jié)構(gòu)1-4班實(shí)驗,數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí),算法,c++,圖論

?文章來源地址http://www.zghlxwxcb.cn/news/detail-775446.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu) 實(shí)驗17:Huffman樹和Huffman編碼——學(xué)習(xí)理解哈夫曼樹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)課程實(shí)驗五:哈夫曼樹與哈夫曼編碼

    實(shí)驗日期:2022-12-20 ? 目錄 一、實(shí)驗?zāi)康?1、掌握哈夫曼樹的建立 2、掌握哈夫曼編碼方式 二、實(shí)驗內(nèi)容

    2024年02月05日
    瀏覽(30)
  • 浙大數(shù)據(jù)結(jié)構(gòu)第五周之05-樹9 Huffman Codes

    In 1953, David A. Huffman published his paper \\\"A Method for the Construction of Minimum-Redundancy Codes\\\", and hence printed his name in the history of computer science. As a professor who gives the final exam problem on Huffman codes, I am encountering a big problem: the Huffman codes are NOT unique. For example, given a string \\\"aaaxuaxz\\\", we can observe th

    2024年02月15日
    瀏覽(21)
  • C語言---數(shù)據(jù)結(jié)構(gòu)實(shí)驗---哈夫曼樹及哈夫曼編碼的算法實(shí)現(xiàn)---圖的基本操作

    C語言---數(shù)據(jù)結(jié)構(gòu)實(shí)驗---哈夫曼樹及哈夫曼編碼的算法實(shí)現(xiàn)---圖的基本操作

    本篇實(shí)驗代碼非本人寫,代碼源自外部,經(jīng)調(diào)試解決了部分warning和error后在本地vs上可以正常運(yùn)行,如有運(yùn)行失敗可換至vs 未來會重構(gòu)實(shí)現(xiàn)該兩個實(shí)驗 內(nèi)容要求: 1、初始化(Init):能夠?qū)斎氲娜我忾L度的字符串s進(jìn)行統(tǒng)計,統(tǒng)計每個字符的頻度,并建立哈夫曼樹 2、建立編碼

    2024年02月13日
    瀏覽(93)
  • 數(shù)據(jù)結(jié)構(gòu)--樹和二叉樹

    數(shù)據(jù)結(jié)構(gòu)--樹和二叉樹

    樹是一種 非線性 的數(shù)據(jù)結(jié)構(gòu),它是由n(n=0)個有限結(jié)點(diǎn)組成一個具有層次關(guān)系的集合。把 它叫做樹是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。 有一個 特殊的結(jié)點(diǎn),稱為根結(jié)點(diǎn) ,根節(jié)點(diǎn)沒有前驅(qū)結(jié)點(diǎn)。 除根節(jié)點(diǎn)外,其余結(jié)點(diǎn)被分成M(M0)個互不相交

    2024年02月12日
    瀏覽(23)
  • 數(shù)據(jù)結(jié)構(gòu)---樹和二叉樹

    數(shù)據(jù)結(jié)構(gòu)---樹和二叉樹

    樹 屬于1:n的形式,屬于非線性結(jié)構(gòu) 有且僅有一個根,其余的都是子樹 而字樹也有自己的根和子樹,所以,樹是一個遞歸的定義 ![在這里插入圖片描述](https://img-blog.csdnimg.cn/677eb0f85d6945028e4fa02b208e06f4.png#pic_center 結(jié)點(diǎn)的度:結(jié)點(diǎn)擁有的子樹的個數(shù),或者是分支的個數(shù),或者是

    2024年02月14日
    瀏覽(18)
  • 樹和二叉樹 --- 數(shù)據(jù)結(jié)構(gòu)

    樹和二叉樹 --- 數(shù)據(jù)結(jié)構(gòu)

    目錄 1.樹的概念及結(jié)構(gòu) 1.1樹的概念 1.2樹的表示 1.3樹在實(shí)際生活中的運(yùn)用 2.二叉樹的概念及結(jié)構(gòu)? 2.1概念 2.2特殊的二叉樹 2.3二叉樹的性質(zhì) 2.4二叉樹的存儲結(jié)構(gòu) 樹是一種 非線性 的數(shù)據(jù)結(jié)構(gòu),它是由n (n=0)個有限結(jié)點(diǎn)組成一個具有層次關(guān)系的集合。把它叫做樹是因為 它看起來

    2024年02月15日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)—樹和二叉樹

    數(shù)據(jù)結(jié)構(gòu)—樹和二叉樹

    5.1樹和二叉樹的定義 樹形結(jié)構(gòu) (非線性結(jié)構(gòu)):結(jié)點(diǎn)之間有分支,具有層次關(guān)系。 5.1.1樹的定義 樹(Tree)是n(n≥0)個結(jié)點(diǎn)的有限集。 若n=0,稱為空樹; 若n>0,則它滿足如下兩個條件: 有且僅有一個特定的稱為根(Root)的結(jié)點(diǎn); 其余結(jié)點(diǎn)可分為m(m≥0)個互不相交的

    2024年02月14日
    瀏覽(18)
  • 【數(shù)據(jù)結(jié)構(gòu)篇】數(shù)據(jù)結(jié)構(gòu)中的 R 樹和 B 樹

    【數(shù)據(jù)結(jié)構(gòu)篇】數(shù)據(jù)結(jié)構(gòu)中的 R 樹和 B 樹

    1. 定義與結(jié)構(gòu): R樹是一種多維空間索引數(shù)據(jù)結(jié)構(gòu),用于高效地存儲和檢索空間數(shù)據(jù)。它通過將空間劃分為多個子區(qū)域,并將數(shù)據(jù)點(diǎn)或?qū)ο蠓峙浣o相應(yīng)的區(qū)域來工作。每個區(qū)域都由樹的一個節(jié)點(diǎn)表示,樹的葉節(jié)點(diǎn)包含空間對象。 2. 區(qū)域劃分: R樹按照一定規(guī)則將空間劃分為一

    2024年02月01日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)-樹和二叉樹篇

    數(shù)據(jù)結(jié)構(gòu)-樹和二叉樹篇

    思維導(dǎo)圖(基于教材) 錯題復(fù)盤+計算題(基于習(xí)題解析) 課后習(xí)題 從這章開始,要是上課聽不懂的話,推薦去看B站青島大學(xué)王卓王卓老師講解的很細(xì)節(jié),基本上每個知識點(diǎn)十幾二十分鐘,剛開始看的時候,可能會不習(xí)慣王老師的語氣詞,別退出,視頻重要的是老師講解的

    2024年01月17日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)】樹和二叉樹——堆

    【數(shù)據(jù)結(jié)構(gòu)】樹和二叉樹——堆

    目錄 ??一.樹的概念及結(jié)構(gòu)?? 1.樹的概念 2.樹的相關(guān)術(shù)語 3.樹的表示 4.樹在實(shí)際中的應(yīng)用 ??二.二叉樹的概念和結(jié)構(gòu)?? 1.二叉樹的概念 ?2.特殊的二叉樹 2.1.滿二叉樹 2..2.完全二叉樹 3.二叉樹的性質(zhì) 4.二叉樹的存儲結(jié)構(gòu) ? ? ? ? ?4.1.順序存儲 4.2.鏈?zhǔn)酱鎯???三.堆的順序結(jié)構(gòu)

    2023年04月14日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包