一、思路
链表由节点组成。
1、分析需求,画图:
2、定义学生结构体,包含姓名、年龄、性别和下一个学生的指针:
#include <stdio.h>
#define N 20
// 定义性别枚举类型,固定值,不是男就是女
typedef enum{
Female,
Male
}gender_type;
// 定义学生结构体,包含姓名、年龄、性别和下一个学生的指针
typedef struct stu{
char name[N];
unsigned char age; // 范围0~255足够用
gender_type gender;
struct stu *next;
}student;
3、初始化学生:
// 初始化学生s1
student s1 = {"1-zhangsan", 20, Male, NULL};
// 初始化学生s2
student s2 = {"2-lisi", 21, Female, NULL};
// 初始化学生s3,使用结构体初始化语法
student s3 = {
.name = "3-wangwu",
.age = 22,
.gender = Female,
.next = NULL // 代表最后一个节点
};
4、构建学生链表:
s1.next = &s2;
s2.next = &s3;
5、封装打印所有学生信息函数:
void print_stu(student *p)
{
while(p != NULL){
printf("name:%s, age:%d, gender:%d\n", p->name, p->age, p->gender);
p = p->next;
}
}
6、打印所有学生信息:
要找到链表的第一个节点,通过首节点找下一个节点,
最后一个节点的特征是 next 为空,这样就遍历完成整个链表。
print_stu(&s1); // 传入首节点的地址
二、源代码
#include <stdio.h>
#define N 20
// 定义性别枚举类型
typedef enum{
Female,
Male
}gender_type;
// 定义学生结构体,包含姓名、年龄、性别和下一个学生的指针
typedef struct stu{
char name[N];
unsigned char age;
gender_type gender;
struct stu *next;
}student;
/**
* 打印学生信息
* @param p 学生链表的头指针
*/
void print_stu(student *p)
{
while(p != NULL){
printf("name:%s, age:%d, gender:%d\n", p->name, p->age, p->gender);
p = p->next;
}
}
int main(void)
{
// 初始化学生s1
student s1 = {"1-zhangsan", 20, Male, NULL};
// 初始化学生s2
student s2 = {"2-lisi", 21, Female, NULL};
// 初始化学生s3,使用结构体初始化语法
student s3 = {
.name = "3-wangwu",
.age = 22,
.gender = Female,
.next = NULL
};
// 构建学生链表
s1.next = &s2;
s2.next = &s3;
// 打印所有学生信息
print_stu(&s1);
return 0;
}