引言
本文是我學習清華大學出版社《資料結構》課程有關單鏈表知識點的感悟,主要在於課本上演算法偽**的實現,僅作學習交流之用
正文
線性表的順序儲存結構要求在邏輯順序上相鄰的兩個結構物理位置也必須相鄰,這就造成了乙個後果,即插入刪除乙個元素時可能會移動大量的指標,進而導致程式的時間複雜度迅速上公升。因此為了盡可能減少程式儲存的時間複雜度,就有了鏈式儲存結構這有一種儲存的方式,這種結構的特點是邏輯上相鄰的元素(有一定先後順序的元素)在物理位置上不一定相鄰。由於鏈式儲存的緣故,使得元素在物理位置上有一種跳躍的特性。換言之,兩個有先後順序的元素不一定處在相鄰的記憶體區域。
與順序表相比不同的是,由於其物理位置不一定相鄰的特性,每個資料元素資料域同指標域。資料域用於儲存資料元素本身的資訊,元素的型別可以有int 型,char型,float型等,指標域則用於儲存乙個指標(鏈),同時具有資料域與指標域的資料元素稱作乙個結點,n個結點通過指標相互連線稱作乙個鍊錶,也可以理解為順序表
由儲存結構的示意圖,可以將單鏈表的某個節點用「結構指標」的方法來表示,每個結點定義為node型別的結構體,乙個結構體內包括int型的變數data作為資料域,node型別的指標變數記作next,同時,定義node型的物件記作lnode,返回型別為node型(指向結點)的指標變數記作linklist。
#include #include #include using namespace std;
typedef struct node
lnode,*linklist;
有時候需要在單鏈表中確定乙個指向第乙個結點的指標,記作單鏈表的頭指標,同時也可以在第乙個結點之前附加設定乙個結點,稱作單鏈表的頭結點,頭結點的資料域可以儲存其他的資訊,例如可以儲存乙個布林型變數用於表示該條鍊錶是否被訪問過,示意圖如下,h表示頭指標,h1表示頭結點,不儲存任何資料,而a3表示尾結點(其指標域為空):
單鏈表的結點結構完成後,需要了解單鏈表的基本操作函式,與順序表類似,基本操作函式主要為三個:1.單鏈表元素的插入 2.單鏈表元素的刪除 3.單鏈表元素的查詢。
1.單鏈表元素的插入,主要思路如下:1)定義函式的自變數為頭指標head,int型變數 i、e,i 用於指示插入結點的位置(操作函式要求在第i個結點之前插入),e代表插入元素的數值。2)定義指標變數p ,用linklist p語句進行表示,先將p初始化為頭指標head,再將p指標指向其後繼結點,迴圈直到第i -1個結點為止。3)新建結點s(由s指標指向的結點),為結點s分配記憶體,將s結點插入作為p結點的後繼結點。示意圖以及**如下:
}//在結點的第i個位置前插入元素
2.單鏈表元素的刪除 基本思路如下:1)定義鍊錶的頭指標head,定義int型變數i用於控制位序(定位刪除結點的位置),e用於返回被刪除元素的值 2)定義指標p,q,用linklist p,q語句表示,p指標初始化為head(指向頭結點),將p指標不停往頭結點後繼推移,直至指向位序為i-1的結點為止 3)用指標q指向p指標所指結點的後繼結點,再將p指標的後繼結點指為q指標所指結點的後繼結點,用e返回q指標所指結點的資料域值,釋放q指標所指結點的空間,這樣就在不刪除其餘元素的情形下刪除了位序為i的元素。示意圖以及**如下:
}3.單鏈表元素的查詢 基本思路如下:1)定義linklist型別的變數p,初始化為頭指標head(指向頭結點) 2)通過for迴圈,進行 i 次,使p指標指向位序為i的元素 3)用int 型別變數e返回位序為i 的元素的值。**如下:
int search(linklist head,int i,int e)
e=p->data;
return e;
}
單鏈表的基本操作用c語言表示
include include include define initsize 5 typedef struct node node,linklist void createlist linklist l,int n 用頭插法建立鍊錶 void printlist linklist l 列印鍊錶 b...
單鏈表基本操作
include include include include includeusing namespace std typedef struct node node,plinklist plinklist createfromhead node pstnode node malloc sizeof...
單鏈表基本操作
單鏈表的初始化,建立,插入,查詢,刪除。author wang yong date 2010.8.19 include include typedef int elemtype 定義結點型別 typedef struct node node,linkedlist 單鏈表的初始化 linkedlist...