數據結構1 線性結構

 

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

 

1、線性表數據結構

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

存在惟一的一個「第一個」元素;遞歸

存在惟一的一個「最後一個」元素;隊列

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

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

 

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

順序存儲結構無須佔用額外的空間來表示元素之間的邏輯關係,並且能夠隨機存取表中的元素,但插入、刪除數據的操做比較麻煩,須要順次移動不少元素;鏈表中各數據元素的結點地址則不要求是連續的,所以必須同時存儲元素之間的邏輯關係,鏈表的插入、刪除操做都比較方便,只需修改指針域的指向便可。循環

 

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

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

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

 

2、棧和隊列

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

 

1.棧

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

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

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

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

2.隊列

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

與順序棧相似,順序隊列採用順序存儲結構,並須要設置隊頭指針和隊尾指針。

鏈隊列則爲了便於操做,會添加一個頭結點,並令頭指針指向頭結點,所以若是頭指針和尾指針的值相同,則可斷定隊列爲空。

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

相關文章
相關標籤/搜索