单项链接的接口问题
my_list_del(p_head, 3);
57 free(p_head);
58 return 0;
59 }
如果按照int型数据的示例,使用链表管理学生记录,则需要在学生记录中添加一个链表结点数据。比如:
typedef struct _student{
slist_node_t node; // 包含链表结点
char name[10]; // 姓名为字符串
char sex; // 性别为字符型
float height, weight; // 身高、体重为实型
}student_t;虽然这样定义使得学生信息可以使用链表来管理,但却存在一个很严重的问题,因为修改了学生记录类型的定义,就会影响所有使用该记录结构体类型的程序模块。在实际的应用上,学生记录可以用链表管理,也可以用数组管理,当使用数组管理时,则又要重新修改学生记录的类型。而node仅仅是链表的结点,与学生记录没有任何关系。不能将node直接放在学生记录结构体中,应该使它们分离。基于此,需要定义一个新的结构体类型,将学生记录和node关联起来,使得可以用链表来管理学生记录。比如:
typedef struct _slist_student{
slist_node_t node; // 包含链表结点
student_t student; // 学生记录
}slist_student_t;使用范例详见程序清单3.32。
程序清单3.32 综合程序范例
1 #include
2 #include "slist.h"
3 #include
4
5 typedef struct _student{
6 char name[10]; // 姓名为字符串
7 char sex; // 性别为字符型
8 float height, weight; // 身高、体重为实型
周立功 相关文章:
- 电源软启动的实用设计技巧(07-16)
- 周立功:动态分布内存——malloc()函数与calloc()函数(07-22)
- 周立功“程序设计与数据结构”:深度解剖动态分布内存的free()函数与realloc()函数(07-25)
- 周立功教你学程序设计技术:做好软件模块的分层设计,回调函数要这样写(07-30)
- 周立功教你学C语言编程:教你数组是如何保存指针的(07-31)
- 算法的泛化问题,这些坑你可能都经历过!|周立功教你学软件设计(08-01)