C語(yǔ)言數(shù)據(jù)結(jié)構(gòu):樹(shù)和圖的數(shù)據(jù)表示與操作
Apr 04, 2025 am 11:18 AMC語(yǔ)言數(shù)據(jù)結(jié)構(gòu):樹(shù)和圖的數(shù)據(jù)表示與操作
樹(shù)
- 是一個(gè)層次結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)
- 由節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)包含一個(gè)數(shù)據(jù)元素和指向其子節(jié)點(diǎn)的指針
- 二叉樹(shù)是一種特殊類型的樹(shù),其中每個(gè)節(jié)點(diǎn)最多有兩個(gè)子節(jié)點(diǎn)
數(shù)據(jù)表示
struct TreeNode { int data; struct TreeNode *left; struct TreeNode *right; };
操作
- 創(chuàng)建樹(shù)
- 遍歷樹(shù)(先序、中序、後序)
- 搜索樹(shù)
- 插入節(jié)點(diǎn)
- 刪除節(jié)點(diǎn)
圖
- 是一個(gè)集合的數(shù)據(jù)結(jié)構(gòu),其中的元素是頂點(diǎn),它們通過(guò)邊連接在一起
- 邊可以是帶權(quán)或無(wú)權(quán)的
數(shù)據(jù)表示
鄰接矩陣:
int adjMatrix[V][V];
鄰接表:
struct AdjListNode { int dest; struct AdjListNode *next; }; struct AdjList { struct AdjListNode *head; }; struct Graph { int V; struct AdjList *array; };
操作
- 創(chuàng)建圖
- 添加邊
- 遍歷圖
- 查找最短路徑
實(shí)戰(zhàn)案例:二叉查找樹(shù)
二叉查找樹(shù)是一種二叉樹(shù),其數(shù)據(jù)元素在樹(shù)中按順序存儲(chǔ)。這使得搜索、插入和刪除操作非常高效。
// 創(chuàng)建二叉查找樹(shù)struct TreeNode *createBST(int data) { struct TreeNode *root = malloc(sizeof(struct TreeNode)); root->data = data; root->left = root->right = NULL; return root; } // 在二叉查找樹(shù)中搜索元素int searchBST(struct TreeNode *root, int data) { if (!root) { return 0; } else if (root->data == data) { return 1; } else if (data < root->data) { return searchBST(root->left, data); } else { return searchBST(root->right, data); } } // 在二叉查找樹(shù)中插入元素struct TreeNode *insertBST(struct TreeNode *root, int data) { if (!root) { return createBST(data); } else if (data < root->data) { root->left = insertBST(root->left, data); } else if (data > root->data) { root->right = insertBST(root->right, data); } return root; } // 在二叉查找樹(shù)中刪除元素struct TreeNode *deleteBST(struct TreeNode *root, int data) { if (!root) { return NULL; } else if (data < root->data) { root->left = deleteBST(root->left, data); } else if (data > root->data) { root->right = deleteBST(root->right, data); } else { // 如果節(jié)點(diǎn)有兩個(gè)子節(jié)點(diǎn),則找到前驅(qū)(左子樹(shù)中最右節(jié)點(diǎn))或後繼(右子樹(shù)中最左節(jié)點(diǎn)) if (root->left && root->right) { int successor = root->right->data; root->data = successor; root->right = deleteBST(root->right, successor); } else if (root->left) { struct TreeNode *temp = root->left; free(root); return temp; } else if (root->right) { struct TreeNode *temp = root->right; free(root); return temp; } else { free(root); return NULL; } } return root; }
以上是C語(yǔ)言數(shù)據(jù)結(jié)構(gòu):樹(shù)和圖的數(shù)據(jù)表示與操作的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu):樹(shù)和圖的數(shù)據(jù)表示與操作樹(shù)是一個(gè)層次結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)由節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)包含一個(gè)數(shù)據(jù)元素和指向其子節(jié)點(diǎn)的指針二叉樹(shù)是一種特殊類型的樹(shù),其中每個(gè)節(jié)點(diǎn)最多有兩個(gè)子節(jié)點(diǎn)數(shù)據(jù)表示structTreeNode{intdata;structTreeNode*left;structTreeNode*right;};操作創(chuàng)建樹(shù)遍歷樹(shù)(先序、中序、後序)搜索樹(shù)插入節(jié)點(diǎn)刪除節(jié)點(diǎn)圖是一個(gè)集合的數(shù)據(jù)結(jié)構(gòu),其中的元素是頂點(diǎn),它們通過(guò)邊連接在一起邊可以是帶權(quán)或無(wú)權(quán)的數(shù)據(jù)表示鄰

Debian系統(tǒng)中的readdir函數(shù)是用於讀取目錄內(nèi)容的系統(tǒng)調(diào)用,常用於C語(yǔ)言編程。本文將介紹如何將readdir與其他工具集成,以增強(qiáng)其功能。方法一:C語(yǔ)言程序與管道結(jié)合首先,編寫一個(gè)C程序調(diào)用readdir函數(shù)並輸出結(jié)果:#include#include#includeintmain(intargc,char*argv[]){DIR*dir;structdirent*entry;if(argc!=2){

文件操作難題的真相:文件打開(kāi)失?。簷?quán)限不足、路徑錯(cuò)誤、文件被佔(zhàn)用。數(shù)據(jù)寫入失?。壕徯n區(qū)已滿、文件不可寫、磁盤空間不足。其他常見(jiàn)問(wèn)題:文件遍歷緩慢、文本文件編碼不正確、二進(jìn)製文件讀取錯(cuò)誤。

C語(yǔ)言多線程編程指南:創(chuàng)建線程:使用pthread_create()函數(shù),指定線程ID、屬性和線程函數(shù)。線程同步:通過(guò)互斥鎖、信號(hào)量和條件變量防止數(shù)據(jù)競(jìng)爭(zhēng)。實(shí)戰(zhàn)案例:使用多線程計(jì)算斐波那契數(shù),將任務(wù)分配給多個(gè)線程並同步結(jié)果。疑難解答:解決程序崩潰、線程停止響應(yīng)和性能瓶頸等問(wèn)題。

C 中的ABI兼容性是指不同編譯器或版本生成的二進(jìn)制代碼能否在不重新編譯的情況下兼容。 1.函數(shù)調(diào)用約定,2.名稱修飾,3.虛函數(shù)表佈局,4.結(jié)構(gòu)體和類的佈局是主要涉及的方面。

算法是解決問(wèn)題的指令集,其執(zhí)行速度和內(nèi)存佔(zhàn)用各不相同。編程中,許多算法都基於數(shù)據(jù)搜索和排序。本文將介紹幾種數(shù)據(jù)檢索和排序算法。線性搜索假設(shè)有一個(gè)數(shù)組[20,500,10,5,100,1,50],需要查找數(shù)字50。線性搜索算法會(huì)逐個(gè)檢查數(shù)組中的每個(gè)元素,直到找到目標(biāo)值或遍歷完整個(gè)數(shù)組。算法流程圖如下:線性搜索的偽代碼如下:檢查每個(gè)元素:如果找到目標(biāo)值:返回true返回falseC語(yǔ)言實(shí)現(xiàn):#include#includeintmain(void){i

如何在 C 語(yǔ)言中輸出倒數(shù)?回答:使用循環(huán)語(yǔ)句。步驟:1. 定義變量 n 存儲(chǔ)要輸出的倒數(shù)數(shù)字;2. 使用 while 循環(huán)持續(xù)打印 n 直到 n 小於 1;3. 在循環(huán)體內(nèi),打印出 n 的值;4. 在循環(huán)末尾,將 n 減去 1 以輸出下一個(gè)更小的倒數(shù)。

C語(yǔ)言函數(shù)包含定義、調(diào)用和聲明。函數(shù)定義指定函數(shù)名、參數(shù)和返回類型,函數(shù)體實(shí)現(xiàn)功能;函數(shù)調(diào)用執(zhí)行函數(shù)並提供參數(shù);函數(shù)聲明告知編譯器函數(shù)類型。值傳遞用於參數(shù)傳遞,注意返回類型,保持一致的代碼風(fēng)格,並在函數(shù)中處理錯(cuò)誤。掌握這些知識(shí)有助於編寫優(yōu)雅、健壯的C代碼。
