數(shù)據(jù)結構簡單筆記

數(shù)據(jù)結構

定義

我們如何把現(xiàn)實中大量而復雜的問題以特定的數(shù)據(jù)類型和特定的存儲結構保存到主存儲器(內存)中章姓,以及在此基礎上為實現(xiàn)某個功能(比如查找某個元素稍味,刪除某個元素,所對應元素進行排序)而執(zhí)行的相應操作,這個相應的操作也叫算法豫领。

數(shù)據(jù)結構是專門研究數(shù)據(jù)存儲的問題矩屁。
數(shù)據(jù)的存儲包含兩方面:個體的存儲和個體關系的存儲辟宗。
算法是對存儲數(shù)據(jù)的操作。

  • 數(shù)據(jù)結構 = 個體和個體之間的關系
  • 算法 = 存儲對象的操作

衡量算法的標準

  • 時間復雜度:大概程序要執(zhí)行的次數(shù)吝秕,而非執(zhí)行的事件
  • 空間復雜度:算法執(zhí)行過程中大概所占用的最大內存
  • 難易程度
  • 健壯性

線性結構

把所有的節(jié)點用一根線穿起來

數(shù)組(連續(xù)存儲)

什么叫數(shù)組

元素類型相同泊脐,大小相等

數(shù)組的優(yōu)缺點
優(yōu)點:
存儲元素的效率非常高

缺點:
事先必須知道數(shù)組的長度
需要大塊連續(xù)的內存塊
插入刪除元素的效率很低

鏈表(離散存儲)

定義

n個節(jié)點離散分配,彼此通過指針相連烁峭,每個節(jié)點只有一個前驅節(jié)點容客,每個節(jié)點只有一個后續(xù)節(jié)點,首屆點沒有前驅節(jié)點约郁,未見點沒有后續(xù)節(jié)點

  • 首節(jié)點:第一個有效節(jié)點
  • 尾節(jié)點:最后一個有效節(jié)點
  • 頭結點:第一個有效節(jié)點之前的那個節(jié)點缩挑,頭結點并不存放有效數(shù)據(jù),加頭結點的目的主要是為了方便對鏈表的操作
  • 頭指針:指向頭結點的指針變量
  • 尾指針:指向尾節(jié)點的指針變量

確定一個鏈表需要幾個參數(shù)

只需要頭指針就可以推算出鏈表的其他所有參數(shù)

分類

  • 單鏈表
  • 雙向鏈表:每個節(jié)點有兩個指針域
  • 循環(huán)鏈表:能通過任何一個節(jié)點找到其他所有節(jié)點
  • 非循環(huán)鏈表

算法

  • 遍歷
  • 查找
  • 清空
  • 銷毀
  • 求長度
  • 排序
  • 刪除節(jié)點
  • 插入節(jié)點

算法:狹義的算法是與數(shù)據(jù)的存儲方式密切相關的
鬓梅,廣義的算法是與數(shù)據(jù)的存儲方式無關

泛型:利用某種技術達到的效果就是不同的存儲方式供置,執(zhí)行的操作是一樣的

鏈表的優(yōu)缺點

優(yōu)點:
空間沒有限制
插入刪除元素很快
缺點:
存儲速度很慢

線性結構的兩種常見應用----棧

定義

一種可以實現(xiàn)“先進后出”的存儲結構,棧類似于箱子

分類

  • 靜態(tài)棧
  • 動態(tài)棧

算法

  • 入棧
  • 出棧

應用

  • 函數(shù)調用
  • 中斷
  • 表達式求值
  • 內存分配
  • 緩沖處理
  • 迷宮

線性結構的兩種常見應用----隊列

定義

一種可以實現(xiàn)“先進先出”的存儲結構

分類

  • 鏈式隊列(鏈表實現(xiàn))
  • 靜態(tài)隊列(數(shù)組實現(xiàn))

靜態(tài)隊列通常都必須是循環(huán)隊列

循環(huán)隊列

1.靜態(tài)隊列威懾么必須是循環(huán)隊列

當靜態(tài)隊列不斷入隊出隊的時候绽快,由于隊列特性“先進先出”芥丧,頭尾不斷向前移動,導致隊列中的地址只能使用一次(假溢出)坊罢,所以引入循環(huán)隊列续担。

2.循環(huán)隊列需要幾個參數(shù)確定

front和rear

1).隊列初始化
frontrear的值都是零
2).隊列非空
front代表的是隊列的第一個元素
rear代表的是隊列的最后一個有效元素的下一個元素
3).隊列為空
frontrear的值相等,但不一定為零

3.循環(huán)隊列入隊偽算法

rear = (rear + 1) % 數(shù)組的長度

4.循環(huán)隊列出隊偽算法

front = (front + 1) % 數(shù)組的長度

5.循環(huán)隊列是否為空

如果front和rear的值相等艘绍,隊列一定為空

6.循環(huán)隊列是否為滿
(rear + 1) % 數(shù)組長度?=front

隊列應用

所有和時間有關的操作都與隊列有關

遞歸

定義

一個函數(shù)自己直接或間接調用自己

舉例

  • 階乘
  • 求和
  • 漢諾塔
  • 迷宮

遞歸滿足的三個條件

  • 遞歸必須有一個明確的終止條件
  • 該函數(shù)所處理的數(shù)據(jù)規(guī)模必須在遞減
  • 這個轉化必須可解的

遞歸與循環(huán)

遞歸:易于理解赤拒,速度慢,存儲空間大
循環(huán):不易于理解,速度快挎挖,存儲空間小

遞歸的基本思想

某件規(guī)模為n的事情如果想完成这敬,必須要你借助他n-1的規(guī)模完成。

定義

有且只有一個稱為根的節(jié)點蕉朵,有若干個互不相交的子樹崔涂,這些子樹本身也是樹。
樹是由節(jié)點和邊組成始衅,每個節(jié)點只有一個父節(jié)點但可以有多個子節(jié)點冷蚂,但根節(jié)點沒有父節(jié)點。

深度:從根節(jié)點到最底層節(jié)點的層數(shù)
葉子節(jié)點:沒有子節(jié)點的節(jié)點
非終端節(jié)點:實際就是非葉子節(jié)點
度:子節(jié)點的個數(shù)

分類

一般的樹:任意一個節(jié)點的子節(jié)點的個數(shù)都不受限制
二叉樹:任意一個節(jié)點的子節(jié)點個數(shù)最多只有兩個汛闸,且子節(jié)點的位置不可更改
森林:n個互不相交的樹的集合

存儲

二叉樹存儲:

連續(xù)存儲:如果用數(shù)組的方式存儲蝙茶,必須要是完全二叉樹

  • 優(yōu)點:查找某個節(jié)點的父節(jié)點和子節(jié)點
  • 缺點:占用內存空間大

鏈式存儲

一般二叉樹的存儲

  • 雙親表示法:求父節(jié)點方便
  • 孩子表示法:求子節(jié)點方便
  • 雙親孩子表示法:求父節(jié)點和子節(jié)點都很方便,但是操作不方便
  • 孩子兄弟表示法(二叉樹表示法):把一個普通樹轉換成二叉樹進行存儲(設法保證任意一個節(jié)點的左指針域指向他的第一個孩子诸老,右指針域指向下一個兄弟隆夯,只要滿足這個條件,就能把一個普通樹轉化成二叉樹)

一個普通的樹轉化成的二叉樹一定沒有右子樹

森林的存儲

  • 先把森林轉化成二叉樹别伏,在存儲成二叉樹(把每個樹當做前一個的兄弟)

操作

二叉樹

分類

  • 一般二叉樹
  • 滿二叉樹:在不增加樹的層數(shù)的前提下蹄衷,無法再多添加一個節(jié)點的二叉樹
  • 完全二叉樹:如果只是刪除了滿二叉樹最底層最右邊的連續(xù)若干個節(jié)點,所形成的二叉樹

二叉樹操作

遍歷

  1. 先序遍歷:

先訪問根節(jié)點
再先序訪問左子樹
再先序訪問右子樹

  1. 中序遍歷

中序訪問左子樹
再訪問根節(jié)點
中序訪問右子樹

  1. 后序遍歷

后序訪問左子樹
后序訪問右子樹
再訪問根節(jié)點

已知兩種遍歷序列求原始二叉樹

通過先序和中序或者中序和后續(xù)樂意還原出原始二叉樹厘肮,但是通過先序和后續(xù)無法還原出原始的二叉樹

應用

  • 樹誰數(shù)據(jù)庫中數(shù)據(jù)組織的一種重要形式
  • 操作系統(tǒng)子父進程的關系本身是一棵樹
  • 面向對象語言中類的集成關系本身是一棵樹
  • 赫夫曼樹
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末愧口,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子类茂,更是在濱河造成了極大的恐慌耍属,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件大咱,死亡現(xiàn)場離奇詭異恬涧,居然都是意外死亡注益,警方通過查閱死者的電腦和手機碴巾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丑搔,“玉大人厦瓢,你說我怎么就攤上這事∑≡拢” “怎么了煮仇?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谎仲。 經(jīng)常有香客問我浙垫,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任夹姥,我火速辦了婚禮杉武,結果婚禮上,老公的妹妹穿的比我還像新娘辙售。我一直安慰自己轻抱,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布旦部。 她就那樣靜靜地躺著祈搜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪士八。 梳的紋絲不亂的頭發(fā)上容燕,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音婚度,去河邊找鬼缰趋。 笑死,一個胖子當著我的面吹牛陕见,可吹牛的內容都是我干的秘血。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼评甜,長吁一口氣:“原來是場噩夢啊……” “哼灰粮!你這毒婦竟也來了?” 一聲冷哼從身側響起忍坷,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤粘舟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后佩研,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柑肴,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年旬薯,在試婚紗的時候發(fā)現(xiàn)自己被綠了晰骑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绊序,死狀恐怖硕舆,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情骤公,我是刑警寧澤抚官,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站阶捆,受9級特大地震影響凌节,放射性物質發(fā)生泄漏钦听。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一倍奢、第九天 我趴在偏房一處隱蔽的房頂上張望彪见。 院中可真熱鬧,春花似錦娱挨、人聲如沸余指。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酵镜。三九已至,卻和暖如春柴钻,著一層夾襖步出監(jiān)牢的瞬間淮韭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工贴届, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留靠粪,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓毫蚓,卻偏偏與公主長得像占键,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子元潘,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容

  • 1畔乙、線性表、棧和隊列等數(shù)據(jù)結構所表達和處理的數(shù)據(jù)以線性結構為組織形式翩概。棧是一種特殊的線性表牲距,這種線性表只能在固定的...
    霧熏閱讀 2,399評論 0 10
  • 樹的概述 樹是一種非常常用的數(shù)據(jù)結構,樹與前面介紹的線性表钥庇,棧牍鞠,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,455評論 1 31
  • 1 序 2016年6月25日夜评姨,帝都难述,天下著大雨,拖著行李箱和同學在校門口照了最后一張合照参咙,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,103評論 0 12
  • 像一座孤島龄广,在人海中漂泊硫眯。 苦的是自己蕴侧,哭的是自己, 輾轉两入, 航路已至盡頭净宵, 可 岸,在何方
    一字馬平川閱讀 225評論 0 1
  • 寫這篇文之前紧武,我一直在思考這個問題,也認真的審視了一下自己敏储,突然有種累覺不愛的感覺阻星。 女生節(jié)那天我宿舍里一個天生麗...
    蓑衣123閱讀 418評論 0 1