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

2021-10-04 07:29:54 字數 3587 閱讀 4477

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

記憶體不一定連續

最後乙個結點的指標域為null

(邏輯上是連續儲存的,在物理空間上是不連續的。每個資料儲存的空間都是單獨申請的)

第乙個結點不儲存資料元素,只是其指標域來儲存整個鍊錶的起始。頭結點在正式操作鍊錶之前就已經存在。

頭結點:不儲存資料,只做起始的標誌。

資料結點:儲存資料的結點,一般就是頭結點後的結點,也就是鍊錶的第二個結點和其以後。

seqlist.h**宣告

typedef

int elemtype;

//結構體定義如下:其中node表示結點,link表示鍊錶指標

typedef

struct node

node,

*link;

//初始化操作//初始化要斷言,並把指標域置為null

void

init

(link phead)

;//頭插

void

insert_head

(link phead,elem_type val)

;//尾插

void

insert_tail

(link phead,elem_type val)

;//按位置插

void

insert_pos

(link phead,

int pos,elem_type val)

;//判空

bool empty

(link phead)

;//頭刪

intdelete_head

(link phead)

;//尾刪

intdelete_tail

(link phead)

;//按位置刪(刪除資料等於val的第乙個結點)

intdelete_val

(link phead,elem_type val)

;//刪除值為val的所有結點

intdelete_allval

(link phead,elem_type val)

;//查詢元素

node*

find

(link phead,elem_type val)

;//修改元素

intupdateval

(link phead,elem_type oldval,elem_type newval)

;//銷毀

void

destory

(link phead)

;//列印

void

show

(link phead)

;

seqlist.cpp**實現

#include

#include

#include「seqlist.h」

//初始化

void

init

(link phead)

phead->next =

null;}

//頭插

void

inserthead

(link phead,elemtype val)

//尾插(新的結點的位址放到最後乙個結點的指標域) o(n)

void

inserttail

(link phead,elentype val)

tail->next = newnode;

}//按位置插 o(n)

void

insertpos

(link phead,

int pos,elentype val)

newnode->next = front->next;

front->next = newnode;

}//判空

bool empty

(link phead)

//頭刪(第二個資料結點的位址放在頭結點的指標域)

intdeletehead

(link phead)

node* cur = phead->next;

phead->next = cur->next;

free

(cur)

;return1;

}//尾刪

intdeletetail

(link phead)

node* pfront = phead;

node* ptail = phead->next;

while

(pfront->next !=

null

) pfront->next =

null

;free

(ptail)

;return1;

}//按位置刪(只能刪第乙個數值為val的結點)

intdeleteval

(link phead,elemtype val)

pfront = pfront->next;

}return0;

}//按位置刪(可以刪煉表中所有等於這個數值val的結點)

intdeleteallval

(link phead,elemtype val)

else

}return0;

}//查詢元素

node*

find

(link phead,elemtype val)

pcur = pcur->next;

}return pcur;

}//改元素

intupdateval

(link phead,elemtype oldval,elemtype newval)

return0;

}//銷毀鍊錶

void

destory

(link phead)

phead->next =

null;}

//列印

void

show

(link phead)

printf

("\n");

}

main.cpp**的實現

#include

#include

#include

"seqlist.h"

intmain()

show

(&head)

;for

(i=0

;i<

3;i++

)show

(&head)

;insert_pos

(&head,3,

100)

;show

(&head)

;delete_head

(&head)

;show

(&head)

;return0;

}

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

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

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

node.h ifndef node h define node h 不帶頭結點的單鏈表 typedef struct node node,pnode endif node hlist.h ifndef list h define list h include node.h 頭插 void inse...

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

1 標頭檔案 nlist.h pragma once 不帶頭結點的單鏈表 typedef struct nnode nnode,nlist 鍊錶初始化 void initlist nlist pplist 頭插 bool insert head nlist pplist,int val 尾插 boo...