最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言數(shù)據(jù)結(jié)構(gòu)中樹與森林專項(xiàng)詳解

 更新時(shí)間:2022年11月07日 09:51:08   作者:莫淺子  
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)中樹與森林,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

樹的存儲結(jié)構(gòu)

樹的邏輯結(jié)構(gòu)

樹是n(n≥0)個(gè)結(jié)點(diǎn)的有限集合,n=0時(shí),稱為空樹,這是一種特殊情況。在任意--棵非空樹中應(yīng)滿足:

1)有且僅有一個(gè)特定的稱為根的結(jié)點(diǎn)。

2)當(dāng)n>1時(shí),其余結(jié)點(diǎn)可分為m(m>0)個(gè)互不相交的有限集合T1,2....Tm,其中每個(gè)集合本身又是一-棵樹,并且稱為根結(jié)點(diǎn)的子樹。

雙親表示法(順序存儲)

每個(gè)結(jié)點(diǎn)保存雙親的“指針”, 結(jié)點(diǎn)中保存父節(jié)點(diǎn)在數(shù)組的下標(biāo)

優(yōu)點(diǎn):找父節(jié)點(diǎn)方便

缺點(diǎn):找孩子不方便

刪除元素方案一 ,數(shù)據(jù)刪除后,parent 變?yōu)?1

刪除元素方案二,數(shù)據(jù)刪除后,將尾部數(shù)據(jù)填充到那

#define MAX_TREE_SIZE 100    //樹中最多結(jié)點(diǎn)樹 
typedef struct{             //樹的結(jié)點(diǎn)定義 
	Elemtype date;         //數(shù)據(jù)元素 
	int parent;           //雙親位置域  
}PTNode;             
typedef struct{                    //樹的類型定義 
	PTNode nodes[MAX_TREE_SIZE];   //雙親表示 
	int n;                        //結(jié)點(diǎn)樹 
}PTree; 

孩字表示法(順序+鏈?zhǔn)酱鎯Γ?/h3>

順序存儲各個(gè)結(jié)點(diǎn),每個(gè)結(jié)點(diǎn)保存孩子鏈表頭指針

優(yōu)點(diǎn):找孩子方便

缺點(diǎn):找雙親不方便

代碼

#define MAX_TREE_SIZE 100    //樹中最多結(jié)點(diǎn)樹 
typedef struct{             //樹的結(jié)點(diǎn)定義 
	Elemtype date;         //數(shù)據(jù)元素 
	int parent;           //雙親位置域  
}PTNode;             
typedef struct{                    //樹的類型定義 
	PTNode nodes[MAX_TREE_SIZE];   //雙親表示 
	int n;                        //結(jié)點(diǎn)樹 
}PTree;
struct CTNOde{
	int child; //孩子結(jié)點(diǎn)在數(shù)組的位置
	struct CTNode *next;   //下一個(gè)孩子 
}CTBox;
typedef struct {
	CTBox nodes[MAX_TREE_SIZE];
	int n,r;   //結(jié)點(diǎn)樹和根的位置 
}; 

孩子兄弟表示法(鏈?zhǔn)酱鎯Γ?/h3>

優(yōu)點(diǎn):可以用二叉樹的操作來處理樹

代碼

//樹的存儲-孩子兄弟表示法
typedef struct CSDode{
	Elemtype date;                    //數(shù)據(jù)域 
	struct CSDode *firstchild ,*nextsibling;  //第一個(gè)孩子和右兄弟指針 
}CSDode ,*CSTree; 

森林

森林是m(m>=0)棵互不相交的樹集合

森林中各個(gè)樹的根結(jié)點(diǎn)之間是為兄弟關(guān)系

在二叉樹中,如果是兄弟關(guān)系就在右邊,如果是孩子就在左邊,本質(zhì)上,用二叉鏈表存儲森林

樹的遍歷

樹的先根遍歷(深度優(yōu)先遍歷)

先根遍歷。若樹非空,先訪問根結(jié)點(diǎn),在依次對沒棵子樹進(jìn)行先根遍歷。

上圖這樣一棵樹的先根遍歷順序和二叉樹的很像,按照二叉樹的方法

//樹的先根遍歷
void PreOrder(TreeNode *R){
	if(R!=NULL){
		visit(R);     //訪問根結(jié)點(diǎn) 
		while(R還有下一個(gè)子樹T)
		  PreOrder(T);   //先根遍歷下一棵子樹 
	}
} 

樹的后根遍歷(樹的深度優(yōu)先遍歷)

若樹非空,先依次對沒棵子樹進(jìn)行后根遍歷,最后在訪問根結(jié)點(diǎn)

上圖這樣一棵樹的后根遍歷順序和二叉樹的很像,按照二叉樹的方法

 

代碼

//樹的后根遍歷
void PostOrder(TReeNode *R)
{
	if(R != NULL){
		while(R還有下一個(gè)子樹T)
		   PodtOrder(T);   //后根遍歷下一棵子樹
		visit(R)    //訪問根結(jié)點(diǎn) 
	} 
} 

樹的層序遍歷(廣度優(yōu)先遍歷)

層次遍歷(用隊(duì)列實(shí)現(xiàn))

①若樹非空,則根節(jié)點(diǎn)入隊(duì)

②若隊(duì)列非空,隊(duì)頭元素出隊(duì)并訪問,同時(shí)將該元素的孩子依次入隊(duì)

③重復(fù)②直到隊(duì)列為空

如圖

森林的遍歷

森林。森林是m (m>0)棵互不相交的樹的集合。每棵樹去掉根節(jié)點(diǎn)后,其各個(gè)子樹又組成森林。

先序遍歷森林

效果等同于依次對各二叉樹進(jìn)行先序遍歷

若森林為非空,則按如下規(guī)則進(jìn)行遍歷:

1.訪問森林中第一棵樹的根結(jié)點(diǎn)

2.先序遍歷第一棵樹中根結(jié)點(diǎn)的子樹森林。

3.先序遍歷除去第一棵樹之后剩余的樹構(gòu)成的森林。

效果如下

中序遍歷森林

效果等同于依次對二叉樹進(jìn)行中序遍歷

若森林為非空,則按如下規(guī)則進(jìn)行遍歷:

中序遍歷森林中第一棵樹的根結(jié)點(diǎn)的子樹森林。

訪問第一棵樹的根結(jié)點(diǎn)。

中序遍歷除去第一棵樹之后剩余的樹構(gòu)成的森林。

效果如下

到此這篇關(guān)于C語言數(shù)據(jù)結(jié)構(gòu)中樹與森林專項(xiàng)詳解的文章就介紹到這了,更多相關(guān)C語言樹與森林內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實(shí)現(xiàn)掃雷游戲(可以自動展開)

    C語言實(shí)現(xiàn)掃雷游戲(可以自動展開)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)掃雷游戲,可以自動展開,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Cocos2d-x中使用CCScrollView來實(shí)現(xiàn)關(guān)卡選擇實(shí)例

    Cocos2d-x中使用CCScrollView來實(shí)現(xiàn)關(guān)卡選擇實(shí)例

    這篇文章主要介紹了Cocos2d-x中使用CCScrollView來實(shí)現(xiàn)關(guān)卡的選擇實(shí)例,本文在代碼中用大量注釋講解了CCScrollView的使用,需要的朋友可以參考下
    2014-09-09
  • 關(guān)于C++11中限定作用域的枚舉類型的問題

    關(guān)于C++11中限定作用域的枚舉類型的問題

    C++中有兩種類型的枚舉:不限定作用域的枚舉類型和限定作用域的枚舉類型。限定作用域的枚舉類型是C++11標(biāo)準(zhǔn)引入的新類型,對C++11中限定作用域的枚舉類型相關(guān)知識感興趣的朋友一起看看吧
    2022-01-01
  • 基于Matlab實(shí)現(xiàn)野狗優(yōu)化算法的示例代碼

    基于Matlab實(shí)現(xiàn)野狗優(yōu)化算法的示例代碼

    野狗優(yōu)化算法(Dingo?Optimization?Algorithm,?DOA)模仿澳大利亞野狗的社交行為。DOA算法的靈感來源于野狗的狩獵策略,即迫害攻擊、分組策略和食腐行為。本文將通過Matlab實(shí)現(xiàn)這一算法,感興趣的可以了解一下
    2022-04-04
  • VS C++頭文件引用提示“未定義標(biāo)識符”的問題解決

    VS C++頭文件引用提示“未定義標(biāo)識符”的問題解決

    本文主要介紹了VS C++頭文件引用提示“未定義標(biāo)識符”的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C語言中數(shù)組排序淺析

    C語言中數(shù)組排序淺析

    這篇文章主要為大家介紹了C語言算法練習(xí)中數(shù)組元素排序的四種類型,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下
    2022-12-12
  • C++實(shí)現(xiàn)航空訂票系統(tǒng)課程設(shè)計(jì)

    C++實(shí)現(xiàn)航空訂票系統(tǒng)課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)航空訂票系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 使用C語言解決字符串全排列問題

    使用C語言解決字符串全排列問題

    這篇文章主要介紹了使用C語言解決字符串全排列問題,文中包括了一道ACM相關(guān)的競賽題目作為實(shí)例,需要的朋友可以參考下
    2015-08-08
  • 分享面試官常用16個(gè)c/c++面試題

    分享面試官常用16個(gè)c/c++面試題

    這篇文章主要分享的是面試官常用的16個(gè)c/c++面試題,?C中static有什么作用、C++中const有什么用?C與C++各自是如何定義常量的?有什么不同?等等問題,具有一定的參考資料,需要的小伙伴可以參考一下
    2022-01-01
  • C語言詳解strcmp函數(shù)的分析及實(shí)現(xiàn)

    C語言詳解strcmp函數(shù)的分析及實(shí)現(xiàn)

    strcmp函數(shù)語法為“int strcmp(char *str1,char *str2)”,其作用是比較字符串str1和str2是否相同,如果相同則返回0,如果不同,前者大于后者則返回1,否則返回-1
    2022-05-05

最新評論

西和县| 陇南市| 兰考县| 通城县| 准格尔旗| 海淀区| 婺源县| 仙居县| 盐津县| 海南省| 阿合奇县| 都安| 盖州市| 台前县| 荔浦县| 陆良县| 蒙自县| 泗阳县| 丰台区| 长寿区| 南通市| 乌拉特后旗| 陆良县| 绥化市| 德清县| 霍山县| 碌曲县| 桐乡市| 理塘县| 延吉市| 扎赉特旗| 六盘水市| 辽阳市| 遂溪县| 富阳市| 蒲江县| 宁河县| 平度市| 临高县| 峨边| 汾西县|