/* create_linkedlist: 建立乙個鍊錶
void:無引數
返回值:
第乙個節點的指標 node *
*/node *
create_linkedlist
(void
)//p = (node *)malloc(sizeof(node));
p =(node *
)malloc
(sizeof
(*p));
p->data = dat;
p->next =
null;if
(h ==
null
)else
}return h;}/
* create_order_linkedlist: 建立乙個有序鍊錶
void:無引數
返回值:
第乙個節點的指標 node **/
node *
create_order_linkedlist
(void
) p =
(node *
)malloc
(sizeof
(*p));
p->data = dat;
p->next =
null
;//把p新增到鍊錶中
first =
add_node
(p , first);}
return first;}/*
add_node:向乙個有序的鍊錶中去新增乙個結點
新增完了之後,使鍊錶任然有序
@p : 你要插入的那個結點
@h : 鍊錶的第乙個結點的指標
返回值:
返回插入之後的那個鍊錶的第乙個結點的指標
*/node *
add_node
(node * p, node * h)
if(h ==
null)
node * pk =
null
;//pk指向第乙個比待插入結點大的那乙個
node * pr =
null
;//pr指向pk的前面那乙個結點的
pk = h;
//查詢第乙個比我大的那個結點
while
(pk)
pr = pk;
pk = pk->next;}if
(pk ==
null
)//沒有找到
else
//找到了
else
//「中間插入」 pr-> p ->pk
}return h;
}//列印資料結點的每乙個資料元素的值
void
(node * h)
node * p = h;
while
(p)printf
("\n");
}/*delete_x:刪除鍊錶中的乙個結點
@h : 原鍊錶第乙個結點的指標
@x :要刪除的那個結點的資料域
返回值:
返回刪除後的鍊錶的第乙個結點的指標
*/node *
delete_x
(node * h, elemtype x)
pr = px;
px = px->next;}if
(px ==
null
)//沒有找到
//找到啦
if(px == h)
//你要刪除的使第乙個結點
else
//要麼是中間的結點,要麼是最後乙個結點}/*
delete_all_x:刪除鍊錶中的乙個結點
@h : 原鍊錶第乙個結點的指標
@x :要刪除的那個結點的資料域
返回值:
返回刪除後的鍊錶的第乙個結點的指標
*/node *
delete_all_x
(node * h, elemtype x)
pr = px;
px = px->next;}if
(px ==
null
)//沒有找到
//找到啦
ps = px->next;
if(px == h)
//你要刪除的使第乙個結點
else
//要麼是中間的結點,要麼是最後乙個結點
}}main.c
#include
#include
"linkedlist.h"
#include
intmain()
linkedlist.h
#ifndef __linkedlist_h__
#define __linkedlist_h__
typedef
int elemtype;
//資料元素的型別
typedef
struct node
node ;
/* create_linkedlist: 建立乙個鍊錶
void:無引數
返回值:
第乙個節點的指標 node *
*/node *
create_linkedlist
(void);
/* create_order_linkedlist: 建立乙個有序鍊錶
void:無引數
返回值:
第乙個節點的指標 node *
*/node *
create_order_linkedlist
(void);
/* add_node:向乙個有序的鍊錶中去新增乙個結點
新增完了之後,使鍊錶任然有序
@p : 你要插入的那個結點
@h : 鍊錶的第乙個結點的指標
返回值:
返回插入之後的那個鍊錶的第乙個結點的指標
*/node *
add_node
(node * p, node * h)
;//列印資料結點的每乙個資料元素的值
void
print
(node * h);/*
delete_x:刪除鍊錶中的乙個結點
@h : 原鍊錶第乙個結點的指標
@x :要刪除的那個結點的資料域
返回值:
返回刪除後的鍊錶的第乙個結點的指標
*/node *
delete_x
(node * h, elemtype x);/*
delete_all_x:刪除鍊錶中的乙個結點
@h : 原鍊錶第乙個結點的指標
@x :要刪除的那個結點的資料域
返回值:
返回刪除後的鍊錶的第乙個結點的指標
*/node *
delete_all_x
(node * h, elemtype x)
;#endif
不帶頭結點的單鏈表
slist.h pragma once typedef int sldatatype typedef struct slistnode slistnode 不帶頭節點的單鏈表 鍊錶初始化 void slistinit slistnode phead 建立新結點 slistnode slistnewn...
不帶頭結點的單鏈表
不帶頭結點的鍊錶的實現 核心是直接設定頭指標指向第乙個節點 要注意此時的l的位址可能會發生改變.同時還要注意一級指標和二級指標的區別.注意linklist l和linklist l的區別 和帶結點的單鏈表的操作相比較,要考慮到頭指標就是頭結點,在一些會改變頭結點的情況下要仔細考慮.include i...
不帶頭結點的單鏈表
單鏈表也可以不設頭結點,如圖212 所示。顯 然,基於這種結構的基本操作和帶有頭結點的線性鏈 表基本操作是不同的。bo2 8.cpp 是不帶頭結點的線 性鍊錶的基本操作。bo2 8.cpp 不帶頭結點的單鏈表 儲存結構由c2 2.h定義 的部分基本操作 9個 define destroylist c...