数据结构->线性结构->顺序存储->静态链表

打印 上一主题 下一主题

主题 985|帖子 985|积分 2955

一、思路

        链表由节点组成。
1、分析需求,画图:


2、定义门生结构体,包罗姓名、年龄、性别和下一个门生的指针:
  1. #include <stdio.h>
  2. #define N 20
  3. // 定义性别枚举类型,固定值,不是男就是女
  4. typedef enum{
  5.         Female,
  6.         Male
  7. }gender_type;
  8. // 定义学生结构体,包含姓名、年龄、性别和下一个学生的指针
  9. typedef struct stu{
  10.         char name[N];
  11.         unsigned char age; // 范围0~255足够用
  12.         gender_type gender;
  13.         struct stu *next;
  14. }student;
复制代码

3、初始化门生:
  1. // 初始化学生s1
  2. student s1 = {"1-zhangsan", 20, Male, NULL};
  3. // 初始化学生s2
  4. student s2 = {"2-lisi", 21, Female, NULL};
  5. // 初始化学生s3,使用结构体初始化语法
  6. student s3 = {
  7.     .name = "3-wangwu",
  8.     .age = 22,
  9.     .gender = Female,
  10.     .next = NULL // 代表最后一个节点
  11. };
复制代码

4、构建门生链表:
  1. s1.next = &s2;
  2. s2.next = &s3;
复制代码

5、封装打印所有门生信息函数:
  1. void print_stu(student *p)
  2. {
  3.         while(p != NULL){
  4.                 printf("name:%s, age:%d, gender:%d\n", p->name, p->age, p->gender);
  5.                 p = p->next;
  6.         }
  7. }
复制代码
6、打印所有门生信息:
  1.     要找到链表的第一个节点,通过首节点找下一个节点,
  2. 最后一个节点的特征是 next 为空,这样就遍历完成整个链表。
  3. print_stu(&s1); // 传入首节点的地址
复制代码

二、源代码

  1. #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)
  2. {
  3.         while(p != NULL){
  4.                 printf("name:%s, age:%d, gender:%d\n", p->name, p->age, p->gender);
  5.                 p = p->next;
  6.         }
  7. }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;}
复制代码






免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表