線性表 棧 佇列 串

2021-10-23 13:58:09 字數 1769 閱讀 6822

一:線性表

概念:n個元素有限序列(a1,a2,a3....an)

存在唯一的表頭和表尾

儲存:

順序儲存(位址連續的儲存單元依次儲存)可以隨機的訪問表中元素,但是插入和刪除操作要移動大量的元素。

鏈式儲存(用結點來儲存資料,結點空間可以是連續的也可以是不連續的)因此儲存資料的元素的同時必須儲存資料元素之間的邏輯關係。

其插入和刪除不需要移動元素,通過指標來操作。

但是增加了儲存空間開銷,不能隨機訪問任意一結點。

獲取第i 個元素的位置公式:

loc(ai) = loc(a1) + (i-1)*l ,(a1是表中第乙個元素的儲存位置,l為表中每個元素所佔空間的大小)

其它鍊錶結構:

雙向鍊錶

每個結點包含兩個指標,指明直接前驅和直接後繼元素,可以在兩個方向上遍歷鍊錶。

迴圈鍊錶

表尾結點的指標指向表中的第乙個結點,可以在任意位置上開始遍歷整個鍊錶。

靜態鍊錶

借助陣列來描述線性表的鏈式儲存結構。

線性表的插入和刪除運算:

基於順序儲存結構的運算:

插入元素前要移動元素以挪出空的儲存單元,然後再插入元素,刪除元素同樣需要移動元素,以填充被刪除出來的儲存單元。

基於鏈式儲存結構的運算

在鏈式儲存結構下進行插入和刪除操作,其實質是對相關指標的修改操作。

二、棧概念:棧是只能通過一端來實現資料儲存和檢索的一種線性表。棧進行插入和刪除操作的一端稱為棧頂,另一端稱為棧底。按照先進後出的原則,故又被稱為先進後出的線性表。

棧的儲存結構:

順序儲存

鏈式儲存:

由於棧中元素的插入和刪除僅在棧頂一端進行,因此不必設定頭結點,鍊錶的頭指標就是棧頂指標。

三、佇列

概念:(fifo)先進先出的線性表,只允許在表的一端插入元素,而在表的另一端刪除元素。在佇列中允許插入元素的一端稱為隊尾(rear),允許刪除元素的一端稱為隊頭(front)

佇列的儲存結構

順序儲存

利用一組位址連續的儲存單元存放佇列中的元素,由於佇列中元素的插入和刪除限定在佇列的兩端進行,因此設定隊頭指標和隊尾指標,分別指示當前的對首元素和隊尾元素。

鏈式儲存(鏈佇列)

為了便於操作,給鏈佇列新增乙個頭結點,並令頭指標指向頭結點。隊列為空的判定條件:頭指標和尾指標的值相同,且均指向頭結點。

四:串概念:串是僅由字元構成的有限序列,是取值範圍受限的線性表。一般記為s = 'a1 a2 a3 ..... an' , 其中s是串名, a1 a2 ... an是串值。

空串:長度為零的串,空串不包含任何字元。

空格串:由乙個或多個空格組成的串。

子串:由串中任意長度的連續字元構成的序列。含有子串的串稱為主串。子串在主串中的位置指子串首次出現時,該子串的第乙個字元在主串中的位置。空串是任意串的子串。

主串:cdedef

子串:de

串相等:指兩個串的長度相等且對應位置上的字元也相同。

串比較:兩個串比較大小時以字元的ascii碼值作為依據。比較操作從兩個串的第乙個字元開始進行,字元的ascii碼值大者所在的串大。若其中的乙個串先結束,則以串長較大者大。

abceg (小)

abcd (大)

串的儲存結構:(每個字串的最後要增加串的結束標誌【\0】

順序儲存:

用一組位址連續的儲存單元來儲存串值的字串行。

鏈式儲存:

當用鍊錶儲存串中的字元時,每個節點中可以儲存乙個字元,也可以儲存多個字元,要考慮儲存密度(空間浪費)問題。

線性表 棧 佇列

輔助定義 define maxsize 5 define ok 0 define error 1 typedef int selemtype typedef int status 棧 順序 鏈式 相關結構體定義 順序棧 typedef struct sqstack 順序棧共享空間 typedef s...

線性表 棧,佇列

1.3 棧 棧是一種先進後出的資料結構。只能在一端進行插入和刪除操作的特殊線性表。將資料進入棧稱為壓棧,資料出去稱為彈棧。壓棧 public void push t t 彈棧 public t pop 讓首結點指向第乙個結點的下乙個結點 head.next oldfirst.next 元素個數 1 ...

線性表 棧和佇列

線性表是n個元素的有限序列。表示方法有兩種,一種是順序表示,一種是鏈式表示。順序表示即採用一組位址連續的儲存單元依次儲存線性表的資料元素,通常採用陣列來實現 鏈式表示是用一組任意的儲存單元儲存線性表的資料元素,每一結點包含兩個域 資料域和指標域,資料域儲存資料,指標域儲存後繼儲存位址資訊,實現為 i...