1 不帶頭結點的單鏈表

2021-10-10 06:05:41 字數 3671 閱讀 2934

/* 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

print

(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...