(乾貨)單鏈表增刪查改介面實現(附原始碼 詳細注釋)

2021-10-20 19:08:04 字數 4309 閱讀 9107

鍊錶:

鍊錶是一種邏輯上連續,物理上非連續、非順序的資料結構,資料元素的邏輯順序通過鍊錶中的指標鏈結次序實現;

typedef

int sltdatetype;

typedef

struct slistnode slistnode;

// 動態申請乙個節點 

slistnode*

buyslistnode

(sltdatetype x)

;// 單鏈表列印

void

slistprint

(slistnode* plist)

;// 單鏈表尾插

void

slistpushback

(slistnode*

* pplist, sltdatetype x)

;// 單鏈表的頭插

void

slistpushfront

(slistnode*

* pplist, sltdatetype x)

;// 單鏈表的尾刪

void

slistpopback

(slistnode*

* pplist)

;// 單鏈表頭刪

void

slistpopfront

(slistnode*

* pplist)

;// 單鏈表查詢

slistnode*

slistfind

(slistnode* plist, sltdatetype x)

;// 單鏈表在pos位置之後插入x

void

slistinsertafter

(slistnode* pos, sltdatetype x)

;// 單鏈表刪除pos位置之後的值

void

slisteraseafter

(slistnode* pos)

;

優點:1、任意位置插入刪除時間複雜度為o(1)

2、沒有增容問題,插入乙個開闢乙個空間。

缺點:以節點為單位儲存,不支援隨機訪問

#pragma once

#define _crt_secure_no_warnings

#include

#include

#include

#include

typedef

int slistdatatype;

typedef

struct slistnode

slistnode;

void

slistprint

(slistnode* phead)

;slistnode*

buyslistnode

(slistdatatype x)

;void

slistpushback

(slistnode*

* pphead, slistdatatype data)

;void

slistpopback

(slistnode*

* pphead)

;void

slistpushfront

(slistnode*

* pphead,slistdatatype x)

;void

slistpopfront

(slistnode*

* pphead)

;slistnode*

slistfind

(slistnode* pphead,slistdatatype x)

;void

slistinsertafter

(slistnode* pos, slistdatatype x)

;void

slisteraseafter

(slistnode* pos)

;slistnode*

reverselist

(slistnode* head)

;///***

#define _crt_secure_no_warnings

#include

"slist.h"

//列印單鏈表

void

slistprint

(slistnode* phead)

slistnode* cur = phead;

while

(cur !=

null

)//遍歷單鏈表

printf

("null\n");

}//建立新的結點

slistnode*

buyslistnode

(slistdatatype x)

newnode->data = x;

newnode->next =

null

;return newnode;

}//在單鏈表尾部插入資料

void

slistpushback

(slistnode*

* pphead, slistdatatype x)

else

tail->next =

buyslistnode

(x);}}

//在單鏈表尾部刪除資料

void

slistpopback

(slistnode*

* pphead)

elseif(

(*pphead)

->next ==

null

)//單鏈表只有乙個元素的情況

else

//單鏈表元素個數大於等於2

free

(tail)

; pretail->next =

null;}

}//在單鏈表頭部插入資料

void

slistpushfront

(slistnode*

* pphead, slistdatatype x)

//在單鏈表頭部刪除資料

void

slistpopfront

(slistnode*

* pphead)

else

//單鏈表元素大於等於1

}//單鏈表查詢

slistnode*

slistfind

(slistnode* pphead,slistdatatype x)

if(px ==

null

)//遍歷了所有的單鏈表元素但還是沒找到

else

//找到了

}//在單鏈表pos位置的後乙個插入元素

void

slistinsertafter

(slistnode* pos, slistdatatype x)

slistnode* newnode =

buyslistnode

(x);

//建立新的結點

//接下來兩個順序不能亂

newnode->next = pos->next;

//新結點指向pos下乙個結點

pos->next = newnode;

//pos指向新結點

}//刪除單鏈表pos位置的後乙個元素

void

slisteraseafter

(slistnode* pos)

if(pos->next ==

null

) pos->next = pos->next->next;

//讓pos的next指向下下個元素

free

(pos->next)

;//釋放pos的後乙個空間

}//**反轉單鏈表**

//作者定期分享c語言學習路上的經驗,歡迎關注哦

雙鏈表實現 增 刪 查 改

include include include 結構體 struct node 頭插 void add node struct node head int data 鏈結節點 new next head next new prev head head next new new next prev n...

單鏈表的實現(增 刪 查 改功能)

標頭檔案函式 ifndef slistnode h define slistnode h typedef int datatype typedef struct slistnode slistnode slistnode buyslistnode datatype x void slistprint...

單鏈表的增刪查改等操作實現

h ifndef link list define linklist include include include typedef int datetype typedef struct node node,pnode,list 初始化鍊錶和銷毀鍊錶 void initlinklist list ...