數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu)與算法筆記

備忘錄

二叉樹的非遞歸后序遍歷還沒有搞懂

二叉查找樹的刪除操作竟坛。

概述

數(shù)據(jù)結(jié)構(gòu)(Data Structure)

數(shù)據(jù)結(jié)構(gòu)可以表示為如下:

DataStructure = (D,L,S,O)

D(data):數(shù)據(jù)元素的有限集合,是存儲和操作的對象。

L(Logic Structure):邏輯結(jié)構(gòu)奖亚,是數(shù)據(jù)元素之間客觀存在的關(guān)系的有限集合。

S(Storage Structure):存儲結(jié)構(gòu)衰絮,是數(shù)據(jù)元素在計算機中的存儲表示练俐,也叫做物理結(jié)構(gòu)沸久。

O(Operation):在數(shù)據(jù)元素D上的一組操作的集合季眷。

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

基本的邏輯結(jié)構(gòu)包括集合結(jié)構(gòu)(元素不重復(fù))、線性結(jié)構(gòu)(一對一)卷胯、樹形結(jié)構(gòu)(一對多)子刮、圖形結(jié)構(gòu)(多對多)。

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

基本存儲結(jié)構(gòu)包括:順序存儲結(jié)構(gòu)(邏輯相鄰的元素物理也相鄰)窑睁,鏈式存儲結(jié)構(gòu)(邏輯相鄰的元素物理不一定相鄰)挺峡,散列存儲結(jié)構(gòu)(通過關(guān)鍵字直接計算出元素存儲位置)。

數(shù)據(jù)類型

數(shù)據(jù)類型是數(shù)據(jù)元素的類型卵慰,包括原子類型(基本數(shù)據(jù)類型如int沙郭,char等)和抽象數(shù)據(jù)類型(結(jié)構(gòu)體佛呻,類等)裳朋。

算法(Agorithms)

算法是求解特定問題的步驟的有限序列,可以表示為如下三元組:

Agorithms=(S,R,D)

S(Steps):是步驟的有限集合吓著。

D(Data):是求解問題所涉及的數(shù)據(jù)元素集合鲤嫡。

R(Relation):是步驟之間的關(guān)系集合,由一些流程控制結(jié)構(gòu)組成绑莺,順序結(jié)構(gòu)暖眼、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)纺裁、子過程和遞歸(調(diào)用已有算法)诫肠。

算法的特征

算法有五個特征:有輸入、有輸出欺缘、有窮性栋豫、確定性、可行性

數(shù)據(jù)結(jié)構(gòu)

線性表

線性表是具有相同數(shù)據(jù)類型的數(shù)據(jù)元素的有限序列谚殊,表示一種邏輯結(jié)構(gòu)丧鸯。線性表除表頭和表尾元素外,每個元素都有唯一直接前驅(qū)和唯一直接后繼嫩絮。線性表的基本操作包括:

① 初始化

② 銷毀

③ 清空

④ 判空

⑤ 求長度

⑥ 按址查找

⑦ 按值查找

⑧ 插入操作

⑨ 刪除操作

⑩ 求前驅(qū)

? 求后繼

順序表

用順序存儲結(jié)構(gòu)存儲的線性表成為順序表丛肢,其元素可以隨機存取,所以也叫隨機存儲結(jié)構(gòu)剿干。各個操作的時間復(fù)雜度如下表:

|

操作

|

時間復(fù)雜度

|

備注

|
|

按址查找

|

O(1)

| |
|

按值查找

|

O(n)

| |
|

插入

|

O(n)

| |
|

刪除

|

O(n)

| |
|

其他

|

O(1)

| |

優(yōu)點:實現(xiàn)簡單蜂怎,可隨機存取

缺點:插入,刪除操作效率低置尔,預(yù)分配空間可能存在浪費杠步。

鏈表

鏈表是以鏈式存儲結(jié)構(gòu)存儲數(shù)據(jù)元素的線性表,插入和刪除元素不需要移動元素,時間復(fù)雜度為O(1)篮愉。

根據(jù)每個節(jié)點中指針數(shù)目的多少腐芍,分為單鏈表,雙向鏈表试躏,多重鏈表猪勇。

單鏈表每個節(jié)點有兩個域:數(shù)據(jù)域和一個后繼指針域。不常用颠蕴。

靜態(tài)鏈表:用數(shù)組表示的鏈表泣刹,每個數(shù)組項由data和next域,next存下一個節(jié)點的數(shù)組索引(下標)犀被,用于如java等沒有指針的語言實現(xiàn)鏈表椅您。

棧和隊列是受限的線性表,棧限制了“先入后出(FILO)”寡键,隊列限制了“先入先出(FIFO)”掀泳。

隊列

數(shù)組

二叉樹的基本概念

二叉樹:二叉樹是具有相同類型的數(shù)元素的集合,包含一個根和兩個子樹(左子樹和右子樹)西轩,且兩個子樹也是二叉樹员舵。

節(jié)點的度:節(jié)點擁有的子樹個數(shù)成為節(jié)點的度,二叉樹中藕畔,節(jié)點的度最大為2马僻。

孩子、雙親注服、子孫韭邓、祖先、兄弟溶弟、堂兄弟女淑。。可很。

層次:即第幾層诗力。

二叉樹的度:二叉樹中最大的節(jié)點的度。

二叉樹的深度:二叉樹中節(jié)點的最大層次數(shù)我抠。

滿二叉樹:所有分支節(jié)點都存在左右子樹苇本,且所有葉子都在同一層次。

完全二叉樹:自上往下菜拓,自左往右從1開始編號瓣窄,所有節(jié)點的編號與滿二叉樹一致的二叉樹,是一顆完全二叉樹(最下層葉子集中在左邊)纳鼎。

二叉樹的性質(zhì)

① 一棵非空二叉樹第i層俺夕,最多有2^(i-1)個節(jié)點

各種樹

滿二叉樹

所有分支節(jié)點都存在左右子樹裳凸,且所有葉子都在同一層次。

完全二叉樹

自上往下劝贸,自左往右從1開始編號姨谷,所有節(jié)點的編號與滿二叉樹一致的二叉樹,是一顆完全二叉樹(最下層葉子集中在左邊)映九。

二叉查找樹

又稱為二叉排序樹梦湘、二叉搜索樹,具有如下性質(zhì)的樹為二叉查找樹:

① 要么是一棵空樹件甥,否則

② 若任意子節(jié)點左子樹非空捌议,則左子樹上所有節(jié)點的值均小于根節(jié)點的值

③ 若任意子節(jié)點的右子樹非空,則右子樹所有節(jié)點的值均大于根節(jié)點的值

④ 任意子節(jié)點的左右子樹也分別為二叉查找樹

⑤ 沒有值相等的節(jié)點

由上述可得出引有,平衡二叉樹的中序遍歷為升序序列瓣颅。

二叉查找樹的查詢復(fù)雜度,和二分查找一樣譬正,插入和查找的時間復(fù)雜度均為 O(logn) 宫补,但是在最壞的情況下仍然會有 O(n) 的時間復(fù)雜度。原因在于插入和刪除元素的時候导帝,樹沒有保持平衡守谓,如下兩種二叉查找樹,其查找性能不可同日而語您单。

[圖片上傳失敗...(image-7e99e5-1594457410235)]

二叉查找樹的操作主要有插入、刪除荞雏、查找

插入:可以總結(jié)為虐秦,找葉子節(jié)點à插入

void myBinTree::Insert(int data){

Node *tmp = new Node;

tmp->data = data;

tmp->lChild = tmp->rChild = nullptr;

if (!m_root) {

m_root = tmp;

return;

}

Node *p = m_root;

//找葉子節(jié)點

while (1) {

if (data < p->data){

if (p->lChild) {

p = p->lChild;

}

else {

break;

}

}

else{

if (p->rChild) {

p = p->rChild;

}

else {

break;

}

}

}

//插入

if (data < p->data) {

p->lChild = tmp;

}

else{

p->rChild = tmp;

}

}

查找:

Node* myBinTree::Search(int key) {

Node *p = m_root;

while (p) {

if (key == p->data) {

return p;

}

else if (key < p->data) {

p = p->lChild;

}

else if (key > p->data) {

p = p->rChild;

}

}

return nullptr;

}

刪除:

平衡樹

平衡樹是任意節(jié)點的左右子樹高度差小于等于1的樹。常見的平衡樹有B樹(多路平衡搜索樹——不是二叉樹)凤优、AVL樹(二叉平衡搜索樹)悦陋。

平衡二叉樹

又稱為AVL數(shù),具有如下

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筑辨,一起剝皮案震驚了整個濱河市俺驶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌棍辕,老刑警劉巖暮现,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異楚昭,居然都是意外死亡栖袋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門抚太,熙熙樓的掌柜王于貴愁眉苦臉地迎上來塘幅,“玉大人昔案,你說我怎么就攤上這事〉缦保” “怎么了踏揣?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長匾乓。 經(jīng)常有香客問我呼伸,道長,這世上最難降的妖魔是什么钝尸? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任括享,我火速辦了婚禮,結(jié)果婚禮上珍促,老公的妹妹穿的比我還像新娘铃辖。我一直安慰自己,他們只是感情好猪叙,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布娇斩。 她就那樣靜靜地躺著,像睡著了一般穴翩。 火紅的嫁衣襯著肌膚如雪犬第。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天芒帕,我揣著相機與錄音歉嗓,去河邊找鬼。 笑死背蟆,一個胖子當著我的面吹牛鉴分,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播带膀,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼志珍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了垛叨?” 一聲冷哼從身側(cè)響起伦糯,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嗽元,沒想到半個月后敛纲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡还棱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年载慈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片珍手。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡办铡,死狀恐怖辞做,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寡具,我是刑警寧澤秤茅,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站童叠,受9級特大地震影響框喳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜厦坛,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一五垮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杜秸,春花似錦放仗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至呢蛤,卻和暖如春惶傻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背其障。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工银室, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人静秆。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓粮揉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抚笔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344