線性表之順序儲存結構和鏈式儲存結構

2021-08-28 12:52:37 字數 1823 閱讀 4232

線性表包括順序表和煉表,其中鍊錶又包括單鏈表、迴圈鍊錶、雙向鍊錶。

順序儲存結構和鏈式儲存結構有所不同,具體區別如下表所示:

線性表是一種邏輯結構,相同資料型別的n個資料元素的有限序列,除第乙個元素外,每個元素有且僅有乙個直接前驅,除最後乙個元素外,每個元素有且僅有乙個直接後繼。

線性表的特點:

元素個數有限

邏輯上元素有先後次序

資料型別相同

僅討論元素間的邏輯關係

注:線性表是邏輯結構,順序表和煉表是儲存結構。

通過上面的對比,可以得出一些經驗性的結論:

順序表裡面元素的位址是連續的,鍊錶裡面節點的位址不是連續的,是通過指標連起來的。

順序儲存的優點:

順序儲存的缺點:

比起順序儲存結構每個資料元素只需要儲存乙個位置就可以。現在鏈式儲存結構中,除了要儲存資料元素資訊外,還要儲存它的後繼元素的儲存位址(指標)。把儲存資料元素資訊的域稱為資料域,把儲存直接後繼位置的域稱為指標域。指標域中儲存的資訊稱為指標或鏈。這兩部分資訊組成資料元素稱為儲存映像,稱為節點(node)。

鍊錶的每個節點中只包含乙個指標域,則稱為單鏈表。

頭指標和頭結點

頭指標是指鍊錶指向第乙個節點的指標,若煉表有頭節點,則是指向頭結點的指標。頭指標具有表示作用,所以常用頭指標冠以鍊錶的名字。無論鍊錶是否為空,頭指標均不為空。頭指標是鍊錶的必要元素。

上圖中的頭結點可以存在也可以不存在,但是頭指標必須有。

頭結點是為了操作的統一和方便而設立的,放在第乙個元素的節點之前,其資料域一般無意義通常為空,但是指標域指向第乙個元素。有了頭結點,對在第一元素節點前插入結點和刪除第一結點起操作與其它結點的操作就統一了。頭結點不一定是鍊錶的必要元素。

單鏈表的建立

單鏈表和順序儲存結構不一樣,他不像順序儲存結構資料那麼集中,它的資料可以是分散在記憶體各個角落的,它的增長也是動態的。對於每個鍊錶來說,它所占用空間的大小和位置是不需要預先分配劃定的,可以根據系統的情況和實際的需求即時生成。

頭插法:

頭插法從乙個空表開始,生成新結點,讀取資料存放到新結點的資料域中,然後獎新結點插入到當前鍊錶的表頭上,直到結束為止。

簡單來說,就是把新加進的元素放在表頭後的第乙個位置:

靜態鍊錶

對於線性鍊錶,也可用一維陣列來進行描述。這種描述方法便於在沒有指標型別的高階程式語言中使用鍊錶結構。用陣列描述的鍊錶,即稱為靜態鍊錶。

這種儲存結構,仍需要預先分配乙個較大的空間,但在作為線性表的插入和刪除操作時不需移動元素,僅需修改指標,故仍具有鏈式儲存結構的主要優點。其實和順序儲存結構類似來分配空間,插入元素時,元素依次放在後面,但是插入的元素的游標域要根據插入位置來改變。

假如有如上的靜態鍊錶s中儲存著線性表(a,b,c,d,f,g,h,i),maxsize=11,如圖所示,要在第四個元素後插入元素e,方法是:先在當前表尾加入乙個元素e,即:s[9].data = e;然後修改第四個元素的游標域,將e插入到鍊錶中,即:s[9].cursor = s[4].cursor; s[4].cursor = 9;,接著,若要刪除第7個元素h,則先順著游標鏈通過計數找到第7個元素儲存位置6,刪除的具體做法是令s[6].cursor = s[7].cursor。

關於靜態鍊錶:

線性表之順序儲存結構和鏈式儲存結構

一 順序儲存結構 線性表幾種基本操作的思路 1 插入演算法 1 插入位置不合理,丟擲異常 2 線性表長度超過 陣列長度,丟擲異常或者是動態增加陣列容量 效率會變低 3 從最後乙個元素向前遍歷到第i個位置,分別將它們後移一位。4 將要插入的元素插入在i處 5 線性表長度要 1 2 刪除演算法 1 刪除...

線性表順序儲存和鏈式儲存

輸入第1行是乙個整數n,表示之後還有n行輸入。每行輸入表示對線性表的一條操作指令,格式是 指令編號 引數1 引數2 如有 指令編號為3,表示find操作,此時只有乙個引數,即待查元素的值。順序儲存 include using namespace std const int maxn 1e4 1 st...

線性表之順序儲存結構與鏈式儲存結構

include define maxsize 20 define ok 1 define error 0 define true 1 define false 0 typedef int status status是函式的型別 typedef int elemtype elemtype應根據實際型別...