iOS面試題12-數(shù)據(jù)結(jié)構(gòu)算法篇

2018 iOS面試題系列

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

? ? ? ? 這里沒有圖啊,大家可以抽象一下。

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

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

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

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

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

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

  • 2.1 順序存儲結(jié)構(gòu)

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

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

  • 2.2 鏈式存儲結(jié)構(gòu)

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

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

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

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

  • 3.1 單向鏈表
    ? ? ? ? A->B->C->D->E->F->G->H. 這就是單向鏈表 H 是頭 A 是尾 像一個只有一個頭的火車一樣 只能一個頭拉著跑
  • 3.2 雙向鏈表


數(shù)組和鏈表區(qū)別:
數(shù)組:數(shù)組元素在內(nèi)存上連續(xù)存放,可以通過下標(biāo)查找元素;插入、刪除需要移動大量元素,比較適用于元素很少變化的情況
鏈表:鏈表中的元素在內(nèi)存中不是順序存儲的,查找慢,插入、刪除只需要對元素指針重新賦值,效率高

  • 3.3 循環(huán)鏈表
    ? ? ? ? 循環(huán)鏈表是與單向鏈表一樣,是一種鏈式的存儲結(jié)構(gòu),所不同的是,循環(huán)鏈表的最后一個結(jié)點的指針是指向該循環(huán)鏈表的第一個結(jié)點或者表頭結(jié)點,從而構(gòu)成一個環(huán)形的鏈。發(fā)揮想象力 A->B->C->D->E->F->G->H->A. 繞成一個圈。就像蛇吃自己的這就是循環(huán) 不需要去死記硬背哪些理論知識。

4.二叉樹/平衡二叉樹

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

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

  1. 空的樹(沒有節(jié)點)可以理解為什么都沒 像空氣一樣

  2. 只有根節(jié)點。 (理解一個人只有一個頭 其他的什么都沒,說的有點恐怖)

  3. 只有左子樹 (一個頭 一個左手 感覺越來越寫不下去了)

  4. 只有右子樹

  5. 左右子樹都有

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

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

5.算法

從現(xiàn)在開始介紹算法啊

  • 5.1 冒泡排序 和選擇排序
冒泡排序 和選擇排序.png
  • 5.2 插入排序
插入排序.png
  • 5.3 希爾排序
希爾排序 .png
  • 5.3.1 二分查找
二分查找.png
  • 5.3.2 快排
快排.png
  • 5.4 二叉樹

? ? ? ?二叉樹這個比較麻煩 還有平衡二叉樹 有點繞 如果不懂二叉樹這一塊 你是百分之二百看不懂的

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

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

  3. 左右子樹也分別為二叉排序樹

原文鏈接

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

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

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