線性表--《大話數據結構》

一、線性表的定義

零個或多個數據元素的 “有限”“序列”

二、線性表的相關概念

  1. 線性表長度: 線性表元素的個數(n≥0),當n=0時,稱爲空表;
  2. 前驅元素: 相對於表內的某元素,位於其位置前面的元素;
  3. 後驅元素: 相對於表內的某元素,位於其位置後面的元素;
  4. 直接前驅元素: 相對於表內的某元素,相鄰於其位置前面的元素;
  5. 直接後驅元素: 相對於表內的某元素,相鄰於其位置後面的元素。

三、線性表的存儲結構

  • 順序存儲結構: 用一段地址連續的存儲單元依次存儲線性表的數據元素;
  • 鏈式存儲結構: 將數據與後繼數據的存儲地址以結點形式合併,用不連續的存儲單元存儲線性表。

四、鏈式存儲結構的相關概念

  1. 鏈式頭指針: 指向鏈表第一個結點(頭結點)的指針,無論鏈表是否爲空,頭指針必須存在且不爲空。由於具有標識作用,所以一般將頭指針冠以鏈表的名字;
    鏈式頭結點: 數據域無意義,指針域指向第一元素地址。爲了統一第一節點的插入、刪除操作而設立,不是鏈表的必須要素。
  2. 單鏈表: 最常規形式的鏈表,其頭結點數據域存儲鏈表長度或無意義,終端結點指針端數據爲空指針;
  3. 靜態鏈表: 用數組形式描述的鏈表。以數組下標,替代單鏈表中的後續結點地址。相鄰結點的位置與存儲地址無關,在插入和刪除結點時,不需要像順序存儲結構那樣,移動大量元素,只修改數組下標(“遊標”)即可。但在初始化定義時,需要估算鏈表的最大可能長度,以開闢數組空間;
  4. 循環鏈表: 將單鏈表中終端結點的指針端,由空指針改爲指向頭結點,使整個單鏈表形成一個環,這種頭尾相接的單鏈表稱爲單循環鏈表,簡稱循環鏈表;
  5. 雙向鏈表: 在單鏈表的每個結點中,再設置一個指向其前驅結點的指針域。故雙向鏈表中的結點都有兩個指針域,一個指向直接後繼,另一個指向直接前驅,實現雙向的結點搜尋。

五、特殊線性表

1. 棧

1.1 棧的定義

棧是限定僅在表尾進行插入和刪除操作的線性表,又稱後進先出(Last In First Out)的線性表,簡稱LIFO結構。

1.2 棧的相關概念

  1. 空棧: 不含任何數據元素的棧;
  2. 棧頂(top): 棧中允許插入和刪除的一端;
  3. 棧底(bottom): 與棧頂相對的,位於棧另一頭的數據端;
  4. 進棧(push): 棧的插入操作,也稱壓棧、入棧;
  5. 出棧(pop): 棧的刪除操作,也稱彈棧。

1.3 特殊形式棧以及對應狀態

1.3.1 共享空間棧

將一段長度爲n的數組空間的兩端——0、n-1,分別作爲兩個棧(記爲棧1、棧2)的棧底。兩個棧共享數組空間,增加元素時,對應棧頂向中間延伸。

  • 空棧:
    棧1棧頂指針值等於-1,棧2棧頂指針值等於n。
  • 滿棧:
    ① 棧1爲空棧時,棧2棧頂指針值等於0;
    ② 棧2爲空棧時,棧1棧頂指針值等於n-1;
    ③ 棧1、棧2不爲空時,兩者棧頂指針值相差1。

1.3.2 鏈棧

以頭結點爲棧頂,按鏈式存儲結構實現的棧。
注意: 鏈棧頭結點數據段爲有意義數據,區別於鏈表。

  • 空棧:
    頭指針(注意:不是頭結點指針)指向空。
  • 滿棧:
    除非計算機沒有任何可以使用的空間,瀕臨崩潰,否則理論上鍊式存儲結構不存在滿棧的情況。

2. 隊列

2.1 隊列的定義

隊列是隻允許在一端進行插入操作,而在另一端進行刪除操作的線性表,又稱先進先出(First In First Out)的線性表,簡稱FIFO結構。

2.2 隊列的相關概念

  1. 空隊列: 不含任何數據元素的隊列;
  2. 隊頭: 隊列中允許刪除的一端;
  3. 隊尾: 隊列中允許插入的一端。
  4. 入隊: 隊列的插入操作;
  5. 出隊: 隊列的刪除操作。隊列

2.3 特殊形式隊列以及對應狀態

2.3.1 循環隊列

分別使用兩個指針,表示隊頭元素隊尾的下一個元素的位置。插入時,若尾部指針,越過了可利用內存的邊界,先回到空間頭部,再將數據入隊。構成頭尾相接的特殊順序存儲結構。

注意: 由於尾部指針指向的是隊尾元素的下一個位置,這使得循環隊列滿時,頭部指針與尾部指針重合,與空隊列時的特徵一致。爲了區分兩種狀態,採用以下方法:
① 設置一個標誌變量flag,表示隊列狀態。當flag爲0時,表示隊列無數據,此時頭、尾部指針重合則認爲隊列空。反之,認爲隊列滿;
② 修改隊列滿的條件——保留一個元素空間,即當隊列滿時,數組中還有一個空閒單元。此時若頭部、尾部指針值差值的絕對值爲1,認爲隊列滿。(常用)

2.3.2 鏈隊列

隊列的鏈式存儲結構,本質上是一個尾進頭出的線性單鏈表。鏈隊列的頭部指針指向頭結點,尾部指針指向終端結點。

注意: 鏈隊列頭結點數據段爲有意義數據,區別於鏈表。鏈隊列

發佈了6 篇原創文章 · 獲贊 0 · 訪問量 278
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章