单链表的增删改查
链表是一种最常见地采用动态存储分配方式的数据结构,相较于数组而言它更加灵活。
- 单链表的特点
- 有一个head指针变量,他存放第一个结点的地址,称之为“头指针”。
- 每个结点都包含一个数据域和一个指针域,数据域存放用户需要的实际数据,指针域存放下一个结点的地址。从头结点开始,每一个结点的指针域都指向下一个结点,所有结点都是单线联系。
- 最后一个节点不再指向其他节点,成为“表尾”结点,它的指针域为空指针“NULL”,表示链表到此结束。
- 链表个节点之间的顺序关系由指针域来确定,并不要求逻辑上相邻结点物理位置也相邻,即链表依靠指针相连,并不需要占用一片连续的空间。
链表的创建和输出(有头结点)
由于链表的每个结点都包括指针域和数据域,即每个结点都要包含不同类型的数据,所以结点的数据类型必须选用结构体类型,其可包含多个各种类型的成员,其中有一个类型必须为指向本结构体类型的指针类型。
下面只写了一个为int类型的数据:
struct node{
int val;//数据域
struct node *next; //next的类型是指向本结构体类型的指针类型
};
- 头插法
struct node *creat_head(){
struct node *head, *p, *t = NULL;
int i;
head = (struct node *)malloc(sizeof(struct node));
head->next = NULL;
for(i = 0; i < 8; i++){
p = (struct node *)malloc(sizeof(struct node))