數據結構與算法:數據結構概念(已完成遷移)

導論:什麼是數據結構:指的是一種外在的數據展示的形式。算法:計算的方法,可以理解爲完成某一個過程中的執行思路。

一:基本概念
    1.數據結構:對數據的一種存儲和組織方式,相互之間存在一種或者多種特定關係的數據的集合。數據就是存儲的
    有用的信息 數據元素:數據的基本單位,又稱節點、元素

    2.數據整體結構:邏輯結構、存儲結構、運算 三者構成數據完整結構
二:數據結構分類:(清晰邏輯如下)

根據邏輯結構:
1.線性結構:表中各個節點具有線性關係:有一個開始節點和一個終端節點,所有節點做多隻有一個直接前驅節點
和一個直接後繼節點,如:棧、隊列、串等都是線性結構線性表:有且僅有一個開始節點,有且僅有一個直接後驅
結點,有且只有一個終結結點,順序存儲的線性表叫做順序表,鏈式存儲的叫做鏈表

2.非線性結構:各個節點之間具有多個對應關係:一個節點與多個直接前驅節點和直接後繼節點:如數組、樹結構
數組多行多列,所以顯示出非線性結構
  根據邏輯結構:
    1.線性結構:表中各個節點具有線性關係:有一個開始節點和一個終端節點,所有節點做多隻有一個直接前驅節點
    和一個直接後繼節點,如:棧、隊列、串等都是線性結構線性表:有且僅有一個開始節點,有且僅有一個直接後驅
    結點,有且只有一個終結結點,順序存儲的線性表叫做順序表,鏈式存儲的叫做鏈表

    2.非線性結構:各個節點之間具有多個對應關係:一個節點與多個直接前驅節點和直接後繼節點:如數組、樹結構
    數組多行多列,所以顯示出非線性結構

    根據存儲方式:
    1.順序存儲:就是在一塊連續的存儲區域一個接一個的存放數據,順序存儲方式把邏輯上相鄰的節點存儲在物理位置上相鄰的存儲單元裏,節點間的邏輯關係由存儲單元的鄰接關係體現。也叫作順序存儲結構,一般採用數組或者結構數組來描述。
    2.鏈式存儲:不要求邏輯上相鄰的節點在物理位置上相鄰,節點間的邏輯關係由附加的引用字段表示,一個節點的引用字段指向下一個節點的存放位置,一般在原數據項中增加引用類型(地址)來表示節點間的位置關係
    3.索引存儲:採用附加的索引表的方式來存儲結點信息。索引表由索引項組成,一般形式爲:(關鍵字、地址),關鍵字是能夠標識一個結點的數據項。(set採用hash算法直接根據關鍵字算出存儲地址,因此要重寫hashcode方法)
    *稠密索引:每個結點在索引表中都有一個索引項,索引項的地址指示結點所在的存儲位置
    *稀疏索引:一組結點在索引表中只對應一個索引項,索引項的地址指示一組結點的起始存儲位置
    4.散列存儲:根據結點的關鍵字直接計算出該結點的存儲地址的一種存儲方式(hash表)

三:常用的數據結構

    1.數組(Array):是一種聚合數據類型,最基本的數據結構。可以有一維、二維以及多維等表現形式(順序存儲)
    2.棧(Stack):是一種特殊的線性表,遵循先進後出的原則,即只能從頂點進入和刪除,用於重要數據現場保護
    3.隊列:(Queue):特殊的線性表,只能在隊頭刪除,隊尾插入 操作
    4.鏈表(Linked List):按照鏈式存儲結構進行存儲,在物理上存在非連續的特點。鏈表結構中數據元素的邏輯順序通過鏈表中的引用鏈接次序來實現.由一系列數據結點構成。每個數據結點又包含有數據域和引用域兩部分。引用域保存了下一個元素保存的地址。
    5.樹(Tree):典型非線性結構。
    6.堆(Heap):特殊的樹形結構,二叉堆,特點是根節點的值要麼是最大要麼是最小,並且根節點的兩個字數也是堆結構
    7.散列表(Hash):根據關鍵字T f(T)算出具體位置

四:順序表結構
    由於順序表是一次存放的,只要知道了該順序表的首地址以及每個數據元素所佔用的存儲長度,很容易計算出任何
    一個數據元素的位置(一般性,如果所有結點的類型相同,則每個結點所佔用的存儲空間大小也相同)
    順序表具體實現:順序表操作是基於數組實現,增刪改查都是在數組上實現的,因爲數組是可以看做是最基本的數
    據結構

五:鏈表結構
    分爲數據部分以及地址部分。數據部分保存實際數據,而地址部分保存的是下一個結點的地址,缺點:浪費存儲空
    間,因爲需要保存額外的引用,其次對於鏈表的訪問只能從表頭逐個查找,然後一個個往下找,不能像順序表一樣
    隨機訪問,鏈表有單鏈表、雙向鏈表、單循環鏈表等
    鏈表具體表現形式:在類中用類的屬性表示,用含有一個nextNode引用用來指向下一個元素,如:一個Node節點裏
    面存儲了一個對象,Flow(含有字段id,num),而Node{id,Flow(id,num)}就是這種格式

六:棧
    只能在棧頂操作數據,按照“後進先出”的原則處理節點數據

七:隊列
    和棧的定義大體一致,只是運算規則有點不同,隊列滿足先進先出(FIFO),入隊列是把數據加到最後一個結點,
    出隊列就是取出第一個數據,並且進行刪除操作,數據展現形式也是基於數組

八:樹
    1.樹形用於描述線性結構所不能實現的結構,比如數據簇,以及多個後繼結點等數據形式

    類型:
    二叉樹:每個結點最多隻有兩個子結點,因爲有左右之分,因此是有序樹
    滿二叉樹:除了最下面一層外,其他的都有兩個結點
    完全二叉樹:除了最下面一層外,其他每個結點都有兩個結點,並且最後一個結點按照從左到右的順序連續存在
    存儲方式:也有順序存儲以及鏈式存儲,並且順序存儲也是基於數組實現,而鏈式存儲也是採用引用,但是有兩個引用,一個是左結點引用,一個是右
    結點引用。建議採用鏈式存儲
    一般的數據結構都有順序存儲以及鏈式存儲兩種存儲形式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章