帶頭結點的單鏈表的各種操作

2021-10-02 07:24:36 字數 3541 閱讀 2149

#include

#include

#include

//這是常規的三個標頭檔案

#pragma warning(disable:4996)

//這是為了避免vs報錯。

//帶頭節點的單鏈表

struct linkednode

;//基本操作

//建立鍊錶

struct linkednode*

init_linklist()

;//遍歷

void

foreach_linklist

(struct linkednode* header)

;//插入:在給定某個值之前插入,如果給定值在鍊錶中沒有,那麼插入鍊錶尾

void

insert_linklist

(struct linkednode* header,

int oldval,

int newval)

;//刪除乙個結點

void

deletenode_linklist

(struct linkednode* header,

int delval)

;//銷毀

void

destroy_linklist

(struct linkednode* header)

;//清空

void

clear_linklist

(struct linkednode* header)

;//逆序 a-b-c-d ---> d-c-b-a

void

reverse_linklist

(struct linkednode* header)

;//基本操作

//建立鍊錶,尾插法。

struct linkednode*

init_linklist()

//建立乙個新的節點,然後插入鍊錶尾

struct linkednode* newnode =

(struct linkednode*

)malloc

(sizeof

(struct linkednode));

newnode-

>data = val;

newnode-

>next =

null

; pcurrent-

>next = newnode;

pcurrent = newnode;

}return header;

}//遍歷

void

foreach_linklist

(struct linkednode* header)

struct linkednode* pcurrent = header-

>next;

while

(pcurrent !=

null

)printf

("\n");

}//插入:在給定某個值之前插入,如果給定值在鍊錶中沒有,那麼插入鍊錶尾

void

insert_linklist

(struct linkednode* header,

int oldval,

int newval)

struct linkednode* pprev = header;

struct linkednode* pcurrent = header-

>next;

struct linkednode* newnode =

(struct linkednode*

)malloc

(sizeof

(struct linkednode));

newnode-

>data = newval;

newnode-

>next =

null

;while

(pcurrent !=

null

) pprev = pcurrent;

pcurrent = pcurrent-

>next;}if

(pcurrent ==

null

) newnode-

>next = pcurrent;

pprev-

>next = newnode;

return;}

//刪除乙個結點

void

deletenode_linklist

(struct linkednode* header,

int delval)

struct linkednode* pprev = header;

struct linkednode* pcurrent = header-

>next;

while

(pcurrent !=

null

) pprev = pcurrent;

pcurrent = pcurrent-

>next;}if

(pcurrent ==

null

) pprev-

>next = pcurrent-

>next;

free

(pcurrent)

; pcurrent =

null

;return;}

//銷毀

void

destroy_linklist

(struct linkednode* header)

//清空

void

clear_linklist

(struct linkednode* header)

struct linkednode* pcurrent = header-

>next;

while

(pcurrent !=

null

) header-

>next =

null

;return;}

//逆序 a-b-c-d ---> d-c-b-a

void

reverse_linklist

(struct linkednode* header)

struct linkednode* pprev = header-

>next;

struct linkednode* pcurrent = pprev-

>next;

struct linkednode* t =

null

;while

(pcurrent)

//讓鍊錶裡面的每相鄰兩元素改變指標。

header-

>next-

>next =

null

;//讓第乙個結點的next域為null

header-

>next = pprev;

//新鍊錶的第乙個結點是pprev,因為pprev是該鍊錶的最後乙個結點

}

帶頭結點的單鏈表插入操作

本題要求實現帶頭結點的單鏈表插入操作,插入成功返回1,否則返回0。函式介面定義 int insert link linklist l,int i,elemtype e l是單鏈表的頭指標,i為插入位置,e是插入的資料元素,插入成功返回1,否則返回0。裁判測試程式樣例 include include ...

帶頭結點單鏈表的基本操作

單鏈表 include includetypedef int elemtype typedef struct lnodelnode,linklist bool initlist linklist l 初始化單鏈表 linklist head insertlist linklist l 頭插法建立單鏈...

帶頭結點的單鏈表

帶頭結點的單鏈表 1 頭結點 在棧區開闢,指標域指向第乙個首元結點,資料域不儲存資料,可以儲存當前結點的個數 2 普通結點 無論是頭結點還是普通結點都是乙個結構體型別,由指標域和資料域組成 指標域指向下乙個結點,儲存下乙個結點的位址 資料域可以設定成聯合體型別,成員由資料元素和結點個數組成,之所以將...