1.链表
定义: 链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构。
链表节点分为两个域
数据域:存放各种实际的数据,如:num、score等
指针域:存放下一节点的首地址,如:next等.
1 | struct Node{ |
2.链表创建
创建链表(创建一个表头表示整个链表)
1
2
3
4
5
6
7
8//表头
struct Node *createList()
{
struct Node *head = (struct Node*)malloc(sizeof (struct Node));
//head成为了结构体变量
head->next = NULL;
return head;
}创建结点
1
2
3
4
5
6
7
8//创建结点
struct Node* createNode(int data)
{
struct Node *node = (struct Node*)malloc(sizeof (struct Node));
node->data = data;
node->next = NULL;
return node;
}插入结点
1
2
3
4
5
6
7
8
9//头部插入结点
void insertNodeHead(struct Node *head, int data)
{
//创建插入的结点
struct Node *new = createNode(data);
new->next = head->next;
head->next = new;
}删除结点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17//指定位置删除
void deleteNode(struct Node *head, int index)
{
struct Node *pos = head->next;
struct Node *posFront = head;
if (pos == NULL)
return; //链表为空
while(pos ->data != index)
{
posFront = pos;
pos = pos->next;
if (pos == NULL) //表尾
return;
}
posFront->next = pos->next;
free(pos);
}注意:链表的每一个结点都是动态开辟(malloc)出来的,删除结点后需要释放掉。
打印遍历链表
1
2
3
4
5
6
7
8
9
10void printList(struct Node *node)
{
struct Node *p = node->next;
while(p->next != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
3.测试代码
1 |
|
参考来源:
【1个小时学会单链表,C语言数据结构专题】https://www.bilibili.com/video/BV1Rb411F738?vd_source=3075951c704cf80b7df7522fbb58214d
建议画图理解!!!