線性表的鏈式表示以及單鏈表

一 概述

線性表的順序表示即順序表可以隨時存取表中的任一個元素,但是刪除和插入操作需要移動大量元素。鏈式存儲線性表時,不需要使用地址連續的存儲單元,即不要求邏輯上相鄰的元素在物理位置上也相鄰,它通過"鏈"建立起數據元素之間的邏輯關係,因此插入和刪除操作不需要移動元素,而只需要修改指針,但也會失去順序表可隨機存取的優點。

二 單鏈表

線性表的鏈式存儲又稱作單鏈表,它是通過一組任意的存儲單元來存儲線性表中的數據元素。單鏈表中的每個結點,除了存放元素自身的信息外,還需要存放一個指向其後繼的指針。

data next

結點中data爲數據域,存放數據元素;next爲指針域,存放其後繼結點的地址;初始化單鏈表結點結構代碼實例。

typedef struct LNode{         //定義單鏈表結構類型
    
    ElemType data;            //定義單鏈表數據域
    struct LNode *next;       //定義單鏈表指針域
}LNode, *LinkList;

從單鏈表的結構來看,利用單鏈表可以解決順序表需要大量連續存儲單元的缺點,但單鏈表附加指針域,也存在浪費存儲空間的特點。由於單鏈表的元素離散地分佈在存儲空間中,所以單鏈表是非隨機存取的存儲結構,即不能直接找到某個特定的結點。查找某個特定的結點時,需要從表頭開始遍歷,依次查找。

通常用頭指針來標識一個單鏈表,如單鏈表L,頭指針爲NULL時標識一個空表。此外,爲了操作上的方便,在單鏈表第一個結點之前附加一個結點,稱爲頭結點。頭結點的數據域可以不設任何信息,也可以記錄表長等信息。頭結點的指針域指向線性表第一個元素結點。

帶頭結點的單鏈表:

頭結點和頭指針的區分:不管帶不帶頭結點,頭指針始終指向鏈表的第一個結點,而頭結點是帶頭結點的鏈表中的第一個結點,結點內通常不存儲信息。

引入頭結點的優點:

  1. 由於第一個數據結點的位置分別存放在頭結點的指針域中,所以在鏈表的第一個位置上的操作和在表的其他位置上的操作一致,無需進行特殊處理。
  2. 無論鏈表是否爲空,其頭指針都是指向頭結點的非空指針(空表中頭結點的指針域爲空),因此空表和非空表的處理應該是統一的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章