链表基础:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
知识点: 1.链表基础
2.节点的创建和添加 llist_append_node
3.链表的遍历 llist_print_each
4.链表的查找与修改
5.链表的插入与删除
6.链表的销毁
7.链表逆序
========================== 回顾数组 1.数组的常用操作
1)插入
2)修改
3)遍历
4)删除
5)逆序
2.数组操作的问题
1)插入和删除的效率低
1 2 3 5 6 0 0
1 2 3 4 9 5 6
1 2 3 4 9 5 6 0
2)当数组空间不足时需要重新申请内存空间
3)但是遍历速度快
========================== 链表基础 1.什么是链表
链表(Linked list)是一种常见的基础数据结构,是一种线性表
2.链表的作用
一种数据结构,保存数据
3.如何创建链表
========================== 链表节点的创建和添加 1.如何创建和添加一个节点
2.如何插入一个节点
4.处理链表的框架
void
llist_append_node
( struct
node *head,
struct
node * new )
void
llist_change_node( struct
node *head,
int
id ,
char
*name)
append *
insert *
search *
change
delete
destory
print_all *
print_node
5.添加节点模块append
练习:添加一个节点到头结点后面
========================== 链表的遍历 1. llist_print_each函数
void
llist_print_each( struct
node *head);
练习:
1.遍历输出链表内容
2.向链表添中加多个节点
========================== 链表的查找与修改 1. llist_search_node函数
struct
node *llist_search_node( struct
node *head, int
id )
void
llist_print_node( struct
node *nd)
1)遍历链表
2)比较要搜索的内容是否和节点数据内容匹配
3)返回节点地址
练习:
1.查找指定 id 的学生信息,并输出该信息
2.change函数
1)搜索要修改的节点空间
2)修改节点内的数据
1.修改指定 id 的学生性别
========================== 链表的插入和删除 1. llist_insert_node函数
void
llist_insert_node( struct
node *head,
struct
node *nd, int
id )
1)创建一个新节点
2)插入到指定位值
练习:
链表包含10个节点
id =3, id =4 <== tmp
id =1
1.创建一个新节点并且插入到第一个节点的前面
2.创建一个节点并且插入到第三和第四个节点之间
2. delete 函数
void
llist_delete_node( struct
node *head, int
id );
1)修改该节点上一个节点的指向
2)释放当前节点
练习:
1.删除 id 为1节点
2.删除 id 为10节点
3.删除 id 为5节点
========================== 链表销毁 1.destory函数
int
llist_destory( struct
node *head);
1)销毁和清空是两种不同的操作
例如:倒空杯子的水和砸碎杯子两个操作
练习:
销毁上面创建的链表
========================== 链表逆序 H->A->B->C->D->E
^ ^ ^
p pp t
1.inverse函数
void
llist_inverse( struct
node *head);
练习:
1.按照上述顺序实现一个链表的逆序,并输出逆序的结果
========================== 多文件封装 1.头文件
2.实现文件
========================== 创建一个班级链表,该链表包含10个学生信息 1.每个学生包含信息有 姓名,年龄,身高,性别,语数英三门成绩
2.实现: 1)添加学生信息
2)输出所有的学生信息
3)搜索指定学生的信息,并且输出
4)将指定学生插入到指定学生的前面
5)删除指定学生信息
6)销毁班级链表
========================
enume menu{
EXIT, ADD, SONE, SALL,
INSERT, DEL, DELALL};
1.添加学生
2.查询指定学生信息
3.查询所有学生信息
4.学生插队
5.删除指定学生信息
6.删除班级
0.退出系统
|