iOS數(shù)據(jù)結(jié)構(gòu) 和 算法 上

我在這里簡(jiǎn)單介紹一下 ?如果覺(jué)得有用盡管拷了去

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

? ? ? ? ?寫(xiě)算法之前呢,我想簡(jiǎn)單介紹一下數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)通常分為四類(lèi)

1.集合結(jié)構(gòu) ?線性結(jié)構(gòu) ?樹(shù)形結(jié)構(gòu) ?圖形結(jié)構(gòu)

? ?這里沒(méi)有圖啊,大家可以抽象一下。?

1.1、集合結(jié)構(gòu) 說(shuō)白了就是一個(gè)集合,就是一個(gè)圓圈中有很多個(gè)元素,元素與元素之間沒(méi)有任何關(guān)系 ?這個(gè)很簡(jiǎn)單 ?

1.2、線性結(jié)構(gòu) 說(shuō)白了就是一個(gè)條線上站著很多個(gè)人。 這條線不一定是直的。也可以是彎的。也可以是值的 相當(dāng)于一條線被分成了好幾段的樣子 (發(fā)揮你的想象力)。 線性結(jié)構(gòu)是一對(duì)一的關(guān)系

1.3、樹(shù)形結(jié)構(gòu) 說(shuō)白了 ?做開(kāi)發(fā)的肯定或多或少的知道xml 解析 ?樹(shù)形結(jié)構(gòu)跟他非常類(lèi)似。也可以想象成一個(gè)金字塔。樹(shù)形結(jié)構(gòu)是一對(duì)多的關(guān)系

1.4、圖形結(jié)構(gòu) 這個(gè)就比較復(fù)雜了。他呢 無(wú)窮。無(wú)邊 ?無(wú)向(沒(méi)有方向)圖形機(jī)構(gòu) 你可以理解為多對(duì)多 類(lèi)似于我們?nèi)说慕患P(guān)系

2. 數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)

? ? ? 數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)一般常用的有兩種 ? 順序存儲(chǔ)結(jié)構(gòu) 和 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)

2.1? 順序存儲(chǔ)結(jié)構(gòu)

發(fā)揮想象力啊。 舉個(gè)列子。數(shù)組。1-2-3-4-5-6-7-8-9-10。這個(gè)就是一個(gè)順序存儲(chǔ)結(jié)構(gòu) ,存儲(chǔ)是按順序的 ?舉例說(shuō)明啊。 棧。做開(kāi)發(fā)的都熟悉。棧是先進(jìn)后出 ,后進(jìn)先出的形式 對(duì)不對(duì) ?!他的你可以這樣理解

hello world 在棧里面從棧底到棧頂?shù)倪壿嬕来螢?h-e-l-l-o-w-o-r-l-d 這就是順序存儲(chǔ) 再比如 隊(duì)列 ,隊(duì)列是先進(jìn)先出的對(duì)吧,從頭到尾 h-e-l-l-o-w-o-r-l-d 就是這樣排對(duì)的

2.2 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)

再次發(fā)揮想象力 這個(gè)稍微復(fù)雜一點(diǎn) 這個(gè)圖片我一直弄好 ,回頭找美工問(wèn)問(wèn),再貼上 ?例如 還是一個(gè)數(shù)組

1-2-3-4-5-6-7-8-9-10? 鏈?zhǔn)酱鎯?chǔ)就不一樣了 1(地址)-2(地址)-7(地址)-4(地址)-5(地址)-9(地址)-8(地址)-3(地址)-6(地址)-10(地址)。每個(gè)數(shù)字后面跟著一個(gè)地址 而且存儲(chǔ)形式不再是順序 ,也就說(shuō)順序亂了,1(地址) 1后面跟著的這個(gè)地址指向的是2,2后面的地址指向的是3,3后面的地址指向是誰(shuí)你應(yīng)該清楚了吧。他執(zhí)行的時(shí)候是 1(地址)-2(地址)-3(地址)-4(地址)-5(地址)-6(地址)-7(地址)-8(地址)-9(地址)-10(地址),但是存儲(chǔ)的時(shí)候就是完全隨機(jī)的。明白了?!

3. 單向鏈表\雙向鏈表\循環(huán)鏈表

還是舉例子。理解最重要。不要去死記硬背 哪些什么。定義啊。邏輯啊。理解才是最重要滴

?3.1 單向鏈表 ??

? ? ? ? ? A->B->C->D->E->F->G->H. 這就是單向鏈表 ?H 是頭 A 是尾 ?像一個(gè)只有一個(gè)頭的火車(chē)一樣 只能一個(gè)頭拉著跑

3.2 ?雙向鏈表

? ? ?H<- A->B->C->D->E->F->G->H. 這就是雙向鏈表。有頭沒(méi)尾。兩邊都可以跑 ?跟地鐵一樣 到頭了 可以倒著開(kāi)回來(lái)

3.3 循環(huán)鏈表?

? ? 發(fā)揮想象力? A->B->C->D->E->F->G->H. 繞成一個(gè)圈。就像蛇吃自己的這就是循環(huán) ?不需要去死記硬背哪些理論知識(shí)。

4.二叉樹(shù)/平衡二叉樹(shù)

4.1 什么是二叉樹(shù)

? ? ? 樹(shù)形結(jié)構(gòu)下,兩個(gè)節(jié)點(diǎn)以內(nèi) 都稱(chēng)之為二叉樹(shù) 不存在大于2 的節(jié)點(diǎn) 分為左子樹(shù) 右子樹(shù) 有順序 不能顛倒 ,懵逼了吧,你肯定會(huì)想這是什么玩意,什么左子樹(shù)右子樹(shù) ,都什么跟什么鬼? ?現(xiàn)在我以普通話再講一遍,你把二叉樹(shù)看成一個(gè)人 ,人的頭呢就是樹(shù)的根 ,左子樹(shù)就是左手,右子樹(shù)就是右手,左右手可以都沒(méi)有(殘疾嘛,聲明一下,絕非歧視殘疾朋友,勿怪,勿怪就是舉個(gè)例子,i am very sorry) ?, 左右手呢可以有一個(gè),就是不能顛倒。這樣講應(yīng)該明白了吧?

二叉樹(shù)有五種表現(xiàn)形式

? ? ?1. 空的樹(shù)(沒(méi)有節(jié)點(diǎn))可以理解為什么都沒(méi) 像空氣一樣

? ? 2. 只有根節(jié)點(diǎn)。 (理解一個(gè)人只有一個(gè)頭 其他的什么都沒(méi),說(shuō)的有點(diǎn)恐怖)

? ? 3. 只有左子樹(shù) (一個(gè)頭 一個(gè)左手 感覺(jué)越來(lái)越寫(xiě)不下去了)

? ? 4. 只有右子樹(shù)

? ?5 、左右子樹(shù)都有

二叉樹(shù)可以轉(zhuǎn)換成森林 樹(shù)也可以轉(zhuǎn)換成二叉樹(shù)。這里就不介紹了 你做項(xiàng)目絕對(duì)用不到

數(shù)據(jù)結(jié)構(gòu)大致介紹這么多吧。理解為主 別死記,死記沒(méi)什么用

5.算法

? ?從現(xiàn)在開(kāi)始介紹算法啊

5.1 冒泡排序 和選擇排序

冒泡和選擇排序

5.2 插入排序


插入排序

5.3 希爾排序


希爾排序

5.3.1 二分查找


二分查找算法

5.3.2。快排


快速排序

后續(xù) 我會(huì)陸續(xù)上傳 堆排序 歸并排序 漢諾塔 二叉樹(shù) 等 盡情期待



5.4 二叉樹(shù)

二叉樹(shù)這個(gè)比較麻煩 ?還有平衡二叉樹(shù) 有點(diǎn)繞 如果不懂二叉樹(shù)這一塊 你是百分之二百看不懂的

1. 如果左子樹(shù)非空,那么左子樹(shù)所有節(jié)點(diǎn)的值均小于它的根節(jié)點(diǎn)

2. 如果右子樹(shù)非空,那么右子樹(shù)所有節(jié)點(diǎn)的值均大于它的根節(jié)點(diǎn)

3. 左右子樹(shù)也分別為二叉排序樹(shù)

估計(jì)此時(shí)你心里快罵娘了,什么左子樹(shù) 右子樹(shù) ?什么二叉樹(shù) 這是哪個(gè)山洞跑出來(lái)的,其實(shí)我也不知道怎么去解釋?zhuān)@東西就是太繞了。后續(xù)還有?

歸并排序算法、戴克斯特拉算法,快捷算法,動(dòng)態(tài)規(guī)劃,堆排序,歸并排序等等,這些太多了,

以后有空再寫(xiě)吧 ,上面的四種算法 我覺(jué)得做項(xiàng)目完全夠用了,要是還遇到什么難題,請(qǐng)留言,后續(xù)呢我有空也會(huì)時(shí)不時(shí)更新,謝謝大家關(guān)注,暫時(shí)先到這

寫(xiě)的再多不如源碼。Github:https://github.com/tianbinbin/AlgorithmDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容