鍊錶:
鍊錶是一種邏輯上連續,物理上非連續、非順序的資料結構,資料元素的邏輯順序通過鍊錶中的指標鏈結次序實現;
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 ...