鍊錶是一種物理儲存結構上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標連線次序實現的。
記憶體不一定連續
最後乙個結點的指標域為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...