1. 程式人生 > 其它 >資料結構之線性表_02

資料結構之線性表_02

技術標籤:線性表資料結構

線性連結串列及其操作

在上一章中羅列了線性表在順序儲存結構下呈現的優點和缺點。為了彌補和克服順序儲存結構帶來的不足,這一章將討論線性表的另一種儲存結構——鏈式儲存結構。這種儲存結構不要求邏輯上相鄰的資料在物理位置上也相鄰,僅通過指標來對映資料元素之間的邏輯關係。因此,它沒有順序儲存結構的某些不足,但同時也失去了順序表可以隨機存取的優點。

線性連結串列的構造

線性表的鏈式儲存結構是用一組地址任意似的儲存單元(可以是連續的,也可以是不連續的)來依次儲存線性表中的各個資料元素。為了表示每個資料元素與其邏輯傷的直接後繼元素之間的邏輯關係,對於每一個數據元素而言,除了需要儲存元素自身的資料資訊之外,還需要儲存一個指示其直接後繼元素位置的資訊,這兩部分組成了一個數據元素的儲存結構。稱之為一個鏈結點。因此,鏈結點的構造

datalink

每一個鏈結點包括兩個部分:用以儲存一個數據元素本身資訊的域稱為資料域,用符號data作為該域的域名;儲存一個數據元素邏輯上的直接後繼元素儲存位置的域稱為指標域,用符號link作為指標域的域名。由於線性表的最後一個數據元素沒有後繼元素,故相應鏈結點的指標域放“空”(NULL)。
於是,具有n個數據元素的線性表對應n個鏈結點通過連結方式連結成一個連結串列,即線性表的鏈式儲存結構。由於連結串列中每一個鏈結點中除了資料域以外僅設定了一個指標域,故稱這樣的連結串列為線性連結串列或者單鏈表
整個線性連結串列由一個稱為外指標的變數(也稱為頭結點指標,該指標變數不妨取名為list)來指出,它標明線性連結串列的首地址(第1個鏈結點的儲存地址),稱之為連結串列的入口地址,整個連結串列的存取從該地址開始。當連結串列為空時,有list為NULL。這樣,線性連結串列可以由該指標唯一確定,因此,上述線性連結串列完整地表示應如下圖所示。

在這裡插入圖片描述
需要說明的是,連結串列中的各個鏈結點佔用的儲存空間之間不要求連續,但是每一個鏈結點內部佔用的一系列儲存單元則必須連續。所謂一個鏈結點的地址是指該鏈結點佔用的一片連續的儲存單元的第一個單元地址。
在C語言中可以按如下描述一個鏈結點的型別。

typedef struct node{
	ElemType data;
	struct node *link;
}LNode,*LinkList;

若指標p為指向線性連結串列中某個鏈結點的指標(指標變數p的內容為連結串列中某個鏈結點的儲存地址),則

  1. 若符號p—>data出現在表示式中,他表示由p所指的鏈結點的資料域資訊(指標域的內容),表示由p所指的鏈結點的資料域(位置)。
  2. 若符號p–>link出現在表示式中,他表示由p所指的鏈結點的指標域資訊(指標域的內容),也就是p所指的鏈結點的下一個鏈結點的儲存地址;否則,表示p所指的那個鏈結點的指標域(位置)