根據資料結構中各資料元素之間前後關係的複雜程度,一般將資料結構分為兩大類型:線性結構與非線性結構。
線性鍊錶,顧名思義類似於一條鍊子的表,與線性鍊錶相對的是線性順序表,二者的差異是,線性順序表需要在記憶體中開闢一塊連續的區域,因此儲存的資料在記憶體中的狀態是連續的,而線性鍊錶在記憶體中的儲存是隨機的,資料之間的連結靠的是指針。 (推薦學習:web前端影片教學)
如果一個非空的資料結構滿足下列兩個條件:
①有且只有一個根結點;
②每個結點最多有一個前件,也最多有一個後件。則稱該資料結構為線性結構,又稱線性表。所以線性表、棧與佇列、線性鍊錶都是線性結構,而二元樹是非線性結構。
具有連結儲存結構的線性表,它用一組位址任意的儲存單元存放線性表中的資料元素,邏輯上相鄰的元素在物理上不要求也相鄰,不能隨機存取。一般用結點描述:結點(表示資料元素) =資料域(資料元素的映像) 指標域(指示後繼元素儲存位置)
在鍊式儲存結構中,儲存資料結構的存儲空間可以不連續,各資料結點的儲存順序與資料元素之間的邏輯關係可以不一致,而資料元素之間的邏輯關係是由指標域來決定的。鍊式儲存方式即可用於表示線性結構,也可用來表示非線性結構。
一般來說,在線性表的鍊式儲存結構中,各資料結點的儲存符號是不連續的,且各結點在儲存空間中的位置關係與邏輯關係也不一致。對於線性鍊錶,可以從頭指標開始,沿著各結點的指標掃描到鍊錶中的所有結點。
建立一個線性鍊錶,這是一個動態產生鏈結點並依序將它們連結到鍊錶中的過程。設線性鍊錶的第1個鏈結點的指標為list。
當產生第一個鏈結點時,鍊錶為空,直接將鏈結點送list即可。每取得一個資料元素,就為此資料元素產生一個鏈結點,將所獲得的資料元素的資料資訊送給新結點的資料域的同時,將新結點的指標域置為NULL,然後將新結點插入到鍊錶的末端。
下面的演算法中是從一個名為 data.txt 的檔案中按行讀取字串作為線性鍊錶的資料元素。演算法如下:
LinkList creatList() { LinkList r, p, list = NULL; char data[ 100 ]; FILE *f = fopen( "data.txt", "rb" ); while( fgets( data, 100, f ) ) { p = ( LinkList )malloc( sizeof( LNode ) ); if( p != NULL ){ strcpy( p->data, data ); p->link = NULL; if( list == NULL ) list = p; else r->link = p; r = p; } } fclose( f ); return list; }
以上是線性鍊錶是線性表的鍊式儲存結構嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!