1. 程式人生 > >數據結構1 線性結構

數據結構1 線性結構

指向 構造 特點 有一個 順序棧 size 設置 非線性 style

數據結構是指數據元素的結合及元素間的相互關系和構造方法。元素之間的相互關系是數據的邏輯結構,元素關系的存儲形式成為存儲結構。數據結構按照邏輯關系的不同分為線性結構和非線性結構兩大類。其中線性結構是最基本的結構,元素順序排列,常見的有線性表、棧、隊列、數組、串。

一、線性表

1.線性表是最簡單也是最常用的一種線性結構。一個線性表示n(n>=0)個元素的有限序列,非空線性表的特點為:

存在唯一的一個“第一個”元素;

存在唯一的一個“最後一個”元素;

除第一個元素外,序列中的每個元素均只有一個直接前驅;

除最後一個元素外,序列中的每個元素均只有一個直接後驅;

2.關於線性表的存儲結構,有順序存儲和鏈式存儲兩種方式。順序存儲是用一組地址連續的存儲單元依次存儲線性表中的數據元素,從而使得邏輯上相鄰的兩個元素在物理位置上也相鄰。鏈式存儲則使用結點來存儲數據元素,結點分為數據域和指針域,數據域用於存儲元素的值,指針域則存儲元素的直接前驅或直接後驅的地址,結點之間通過指針域構成一個鏈表。若結點中只有一個指針域,則稱為單鏈表。

順序存儲結構無須占用額外的空間來表示元素之間的邏輯關系,而且可以隨機存取表中的元素,但插入、刪除數據的操作比較麻煩,需要順次移動很多元素;鏈表中各數據元素的結點地址則不要求是連續的,因此必須同時存儲元素之間的邏輯關系,鏈表的插入、刪除操作都比較方便,只需修改指針域的指向即可。

3.根據結點中指針域的設置方式,還有其他幾種鏈表結構:

雙向鏈表:每個階段包含兩個指針,分別指向直接前驅和直接後驅,這樣可以從表中任意的結點出發,從兩個方向遍歷鏈表。

循環鏈表,在單向鏈表或雙向鏈表的基礎上,令表尾結點的指針指向第一個元素,這樣就可以從任意結點開始遍歷整個鏈表了。

二、棧和隊列

棧和隊列的邏輯結構和線性表相同,但對其的運算有所限制。

1.棧

棧只能通過訪問它的一端來實現數據的存儲和檢索,即對棧的操作時按照先進後出的原則進行的(Last In first out, LIFO),這一端稱為棧頂,則另一端為棧底。不含任何元素的棧稱為空棧。

棧的存儲結構也分順序和鏈式,順序存儲是用一組地址連續的存儲單元依次存儲自棧頂到棧底的數據元素,同時用指針top來指示棧頂元素的位置,這種結構的棧也成為順序棧。使用這種存儲方式需要預先定義棧的存儲空間,棧的空間有限,所以元素入棧前,需要判斷棧是否已滿,否則會發生溢出。

鏈式存儲的棧(鏈棧)沒有溢出的問題,鏈棧也無須另外設置top指針

棧在表達式求值、計算機語言的實現、將遞歸過程轉變為非遞歸過程的處理中有重要作用。

2.隊列

隊列則是一種先進先出(First in first out, FIFO)的線性表,但只能在隊列的隊尾(rear)插入元素,然後在隊頭(front)刪除元素。

與順序棧類似,順序隊列采用順序存儲結構,並需要設置隊頭指針和隊尾指針。

鏈隊列則為了便於操作,會添加一個頭結點,並令頭指針指向頭結點,因此如果頭指針和尾指針的值相同,則可判定隊列為空。

隊列常用於處理需要排隊的場合,如打印隊列、消息隊列等。

數據結構1 線性結構