資料結構基礎 單鏈表

2021-08-29 12:11:32 字數 3377 閱讀 7129

關於單鏈表的一些基本操作,以下為基本思路**

首先看一張直觀圖

鍊錶的結構體定義如下(為簡便,這裡的elemtype採用int):

//單鏈表

typedef

struct lnode linklist;

接下來肯定就是建立鍊錶,而目前建立單鏈表分為兩種方式,分別是"頭插法"與"尾插法",首先看圖示:

清楚明白:

我們對比來看節點的插入:

//頭插法核心**

s =(linklist *

)malloc

(sizeof

(linklist));

s->data = a[i]

;s->next = l->next;

//將s插入到下一節點之前

l->next = s;

//尾插法核心**

s =(linklist *

)malloc

(sizeof

(linklist));

s->data = a[i]

;r->next = s;

//將s插入到r之後

r = s;

那麼寫成函式,就是如下所示:

/**

* 頭插法建立單鏈表

* @param a 陣列元素,對應data

* @param n 鍊錶長度(除去頭結點)

*/void

createlistbyhead

(linklist *l,

const

int a,

int n)

}/**

* 尾插法建立單鏈表

* @param a 陣列元素,對應data

* @param n 鍊錶長度(除去頭結點)

*/void

createlistbytail

(linklist *l,

const

int a,

int n)

r->next =

null

;//尾節點next域置為空

}

那麼接下來的集中基本操作方法也就不再贅述,其實都是一些對鍊錶的操作,指標的移動,臨界條件的判斷,我也都寫在注釋中了,尤其是第乙個delete方法寫的最詳細,可以仔細看一下哦,為了直觀一點,我也附上**(編譯環境clion)~

按照邏輯序號刪除某節點

這裡也要注意是否會斷鏈的問題,free()不要釋放錯了,否則會有錯誤

* 刪除單鏈表中的第i個元素

* @param l 鍊錶

* @param i 第i個元素

* @return 程式執行完畢狀態

*/int

listdelete

(linklist *l,

int i)

if(p ==

null

)return error;

else

}在邏輯位置之後插入節點

這裡注意,插入操作遵循***先右後左***原則,否則會斷鏈,如圖:

* 在邏輯位置後插入節點

* @param l 傳入鍊錶

* @param i 邏輯位置

* @param e 插入資料

* @return 插入成功返回1,失敗返回0

*/int

listinsert

(linklist *l,

int i,

int e)

if(p ==

null

)//如果為空返回錯誤值

return error;

else

}按照元素值查詢特定節點

這裡預設鍊錶中的元素是唯一的,如果想要查詢不唯一的數值,就需要大家去拓展了,也不是很難,可以採用將查到的資料邏輯序號放到陣列中返回等等等等方法~

* 按照元素值查詢特定節點並返回邏輯序號

* @param l 傳入單鏈表

* @param e 傳入特定元素

* @return 沒有找到返回0,找到返回邏輯序號i

*/intfindelement

(linklist *l,

int e)

if(s ==

null

)return error;

else

return i;

}輸出鍊錶

* 輸出單鏈表

*/void

displist

(linklist *l)

printf

("%d"

, l->data)

;}最後附上測試用的main函式,為了方便就直接用陣列賦值了

#include

資料結構 單鏈表 基礎

在實現單鏈表的基本功能後 單鏈表的幾個基本問題 1.比較順序表和煉表的優缺點,說說它們分別在什麼場景下使用?順序表 物理位置相鄰 優點 在一段記憶體中用陣列連續存放,所以方便隨機查詢元素。缺點 動態開闢,容易造成記憶體浪費,需要乙個元素,開闢過多。前面新增元素時,要逐個挪動後面的每個元素,較麻煩。場...

資料結構基礎之單鏈表

資料結構基礎之單鏈表 對單鏈表的建立,插入,刪除,逆序,列印元素做乙個小小的總結,不過我不覺得這些東西在具體的工作後到底能發揮什麼作用,因為強大的stl已經把這些都做好了,我們只需要明白在什麼場合使用哪乙個stl就可以了。鍊錶有乙個資料域,有乙個指標域,它的操作其實就是對指標域的操作,無非是指來指去...

資料結構基礎之單鏈表

資料結構基礎之單鏈表 對單鏈表的建立,插入,刪除,逆序,列印元素做乙個小小的總結,不過我不覺得這些東西在具體的工作後到底能發揮什麼作用,因為強大的stl已經把這些都做好了,我們只需要明白在什麼場合使用哪乙個stl就可以了。鍊錶有乙個資料域,有乙個指標域,它的操作其實就是對指標域的操作,無非是指來指去...