基本的數據結構

認識數據結構

數據結構的說明


數據結構起源於程序設計,是用計算機來存儲、組織數據的方式。數據結構不是使咱們學會編碼,而是爲咱們提供一種編程的思想,具備更好的思路。html

關於數據結構有兩種說法,以下:前端

  • 廣義的說法:數據結構 = 數據存儲 + 算法
  • 狹義的說法:數據結構 = 數據的存儲;

數據結構和算法的關係


數據結構與算法是相互依託的關係。計算機解決問題,應該是先從具體問題中抽象出一個適當的數據模型,設計出一個解此數據模型的算法:node

  • 數據結構 ==> 建築工程中的建築設計圖
  • 算法 ==> 工程中的施工流程圖

用數據結構能夠作什麼


  • 程序員的內功心法之一
  • 有效管理數據對象
  • 解決處理性能問題
  • 面試加分項(如今一些簡單的數據結構和算法已是必備項了)

基本數據結構及衍生結構

幾個算法中的基本概念


  • 數據
  • 數據元素
  • 數據項
  • 數據對象
  • 數據結構

它們之間的關係就像下圖同樣:程序員

算法的幾個基本概念

淺析數據結構


數據元素相互之間的關係稱爲結構。數據結構是與算法緊密結合的。面試

  • 邏輯結構:反映數據元素之間的邏輯關係。
  • 存儲結構:數據結構在計算機中的表示。
  • 算法:對數據的操做

數據結構分類

數據結構與算法體系圖

基本的邏輯結構


基本的邏輯結構

  • 集合
  • 線性結構
  • 樹狀結構
  • 圖狀結構(網狀結構)

集合

數據結構中的集合關係就相似於數學中的集合。算法

集合

  • 集合中的數據成員是無序的。
  • 每一個數據成員在集合中不能重複,僅且只出現一次。

線性表

線性結構中的數據元素之間是一對一的關係。也就是數據元素一個接一個地排列。編程

  • 用來存放特定的某一個類型的元素
  • 物理結構爲順序表和鏈表
  • 線性表的基本操做
    • 1.建立線性表
    • 2.添加元素
    • 3.刪除元素
    • 4.讀數據
    • 5.遍歷線性表
    • 6.查找線性表
    • 7.銷燬線性表

線性表的衍生結構

  • 1.棧
  • 2.隊列
  • 3.串
  • ...

棧是一種被限制操做的線性表。棧是一種先進後出 LIFO(Last In First Out) 的數據結構。(桶裝的薯片是現實中一個最簡單的棧結構))瀏覽器

棧

  • 基本概念數據結構

    • 向棧中添加數據叫入棧
    • 從棧中向外拿數據叫出棧
    • 棧中沒有數據叫空棧
    • 空棧或者棧中只有1個元素的時候 棧頂便是棧底
    • 添加元素的時候,棧頂在不斷的變化
  • 操做規則數據結構和算法

    • 建立棧結構
    • 入棧
    • 出棧
    • 讀棧頂
    • 清空棧
    • 銷燬棧結構
  • 用途:

    • 解決括號匹配檢查
    • 瀏覽器的後退或編輯器的undo功能

隊列

隊列是一種被限制操做的線性表。隊列是一種先進先出 FIFO(First In First Out) 的數據結構。(咱們在吃自助的時候,放冰淇凌筒的那個管子就是一種隊列,只能從上往下走)

隊列

  • 基本概念

    • 向隊列中添加數據叫入隊
    • 從隊列中向外拿數據叫出隊
    • 隊列中沒有數據叫空隊
    • 當隊列中只有1個元素的時候 該元素便是隊首,又是隊尾
  • 用途:

    • 消息隊列、視頻彈幕
    • 維護打印機任務

也有一些特殊的隊列,好比生活中在車站買票的時候有軍人優先,這就是優先隊列; 事件循環機制是一種環形隊列;

樹是由若干個有限節點組成的一個具備層次關係的集合。咱們把它叫作「樹」是由於它看起來像一棵倒掛的樹。樹是基本的幾種數據結構之一。

樹

如下基本概念不如看圖來的簡單明瞭,請優先看圖,或在看基本概念的時候請結合上圖(樹)。

  • 主要基本概念

    • 每一個元素稱爲結點(node)
    • 有一個特定的結點被稱爲根結點或樹根(root)
    • 除根結點以外的其他數據元素被分爲m(m≥0)個互不相交的集合T1,T2,……Tm-1,其中每個集合Ti(1<=i<=m)自己也是一棵樹,被稱做原樹的子樹(subtree)
  • 其他基本概念

    • 單個結點是一棵樹,樹根就是該結點自己
    • 空集合也是樹,稱爲空樹。空樹中沒有結點
    • 一個結點含有的子樹的個數稱爲該結點的
    • 度爲0的結點稱爲葉結點或終端結點
    • 度不爲0的結點稱爲非終端結點或分支結點
    • 若一個結點含有子結點,則這個結點稱爲其子結點的父結點
    • 一個結點含有的子樹的根結點稱爲該結點的子結點
    • 具備相同父結點的結點互稱爲兄弟結點
    • 一棵樹中,最大的結點的度稱爲樹的度
    • 從根開始定義起,根爲第1層,根的子結點爲第2層,也叫深1深2
    • 樹的高度或深度說的就是樹中結點的最大層次
    • 從根到該結點所經分支上的全部結點稱爲該節點的祖先
  • 樹的數學基礎是:

    • 圖論
  • 樹的特色

    • 每一個結點有零個或多個子結點;
    • 沒有父結點的結點稱爲根結點;
    • 每個非根結點有且只有一個父結點;
    • 除了根結點外,每一個子結點能夠分爲多個不相交的子樹;
    • 一棵樹中每兩個點之間都有且只有一條路徑
    • 一顆有N個點的樹有N-1條邊

試一試

分辨下圖哪個是樹:

分辨哪個是樹

樹的遍歷

按照某種規則,不重複地訪問某種樹的全部節點。

  • 先序遍歷(深度優先)

    先序遍歷

  • 中序遍歷(深度優先)

    中序遍歷

  • 後序遍歷(深度優先)

    後序遍歷

  • 層序遍歷(廣度優先)

    層序遍歷

樹的衍生

  • 無序樹:樹中任意節點的子結點之間沒有順序關係,這種樹稱爲無序樹,也稱爲自由樹
  • 有序樹:樹中任意節點的子結點之間有順序關係
  • 二叉樹:每一個節點最多含有兩個子樹的樹稱爲二叉樹
  • 徹底二叉樹:除了最後一層,其它各層節點數都達到最大
  • 滿二叉樹:每一層上的結點數都是最大結點數
  • 霍夫曼樹:帶權路徑最短的二叉樹,也叫最優二叉樹

具體的能夠移步Wiki或者百度百科 (^-^)

由頂點的集合(不能是空集)和邊的集合組成的結構,表現的是多對多的關係

圖

  • 數學基礎是:圖論
  • 幾個基本概念:
    • 頂點
    • 有向圖與無向圖

前端中的數據結構應用

  • 1.瞭解常識級別的數據結構與算法
  • 2.傳統前端的核心是DOM
  • 3.編寫本身的前端控件
  • 4.前端遊戲
  • 5.圖像處理
  • ...

結語

到這裏你們應該對於基本的數據結構有了必定的瞭解,算法的世界中,瞭解數據結構有助於咱們更好的、更快的處理數據。

計算機世界的知識不少都是從現實世界中學習過來的。多瞭解咱們的生活,也就是在瞭解計算機世界。

原文地址:基本的數據結構

致謝

感謝你們閱讀個人文章,若是對我感興趣能夠關注個人博客,右上角能夠進入GitHub幫我點個star。

前端小然子的博客

相關文章
相關標籤/搜索