認識數據結構
數據結構的說明
數據結構起源於程序設計,是用計算機來存儲、組織數據的方式。數據結構不是使咱們學會編碼,而是爲咱們提供一種編程的思想,具備更好的思路。html
關於數據結構有兩種說法,以下:前端
- 廣義的說法:數據結構 = 數據存儲 + 算法
- 狹義的說法:數據結構 = 數據的存儲;
數據結構和算法的關係
數據結構與算法是相互依託的關係。計算機解決問題,應該是先從具體問題中抽象出一個適當的數據模型,設計出一個解此數據模型的算法:node
- 數據結構 ==> 建築工程中的建築設計圖
- 算法 ==> 工程中的施工流程圖
用數據結構能夠作什麼
- 程序員的內功心法之一
- 有效管理數據對象
- 解決處理性能問題
- 面試加分項(如今一些簡單的數據結構和算法已是必備項了)
基本數據結構及衍生結構
幾個算法中的基本概念
它們之間的關係就像下圖同樣:程序員
淺析數據結構
數據元素相互之間的關係稱爲結構。數據結構是與算法緊密結合的。面試
- 邏輯結構:反映數據元素之間的邏輯關係。
- 存儲結構:數據結構在計算機中的表示。
- 算法:對數據的操做
基本的邏輯結構
集合
數據結構中的集合關係就相似於數學中的集合。算法
- 集合中的數據成員是無序的。
- 每一個數據成員在集合中不能重複,僅且只出現一次。
線性表
線性結構中的數據元素之間是一對一的關係。也就是數據元素一個接一個地排列。編程
- 用來存放特定的某一個類型的元素
- 物理結構爲順序表和鏈表
- 線性表的基本操做
- 1.建立線性表
- 2.添加元素
- 3.刪除元素
- 4.讀數據
- 5.遍歷線性表
- 6.查找線性表
- 7.銷燬線性表
線性表的衍生結構
棧
棧是一種被限制操做的線性表。棧是一種先進後出 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。
前端小然子的博客