链表
在发展2方法的基础上,不要一次性的分配n个指针的内存!
每次使用malloc为新的结构体分配内存空间时,也为指向该结构体的指针(新指针)分配内存。
但是,如果这样做的话,还需要另外一个指针跟来跟踪新分配的指针,因为使用malloc的返回值是一个指针,需要“另外一个指针”来跟踪新指针。那这“另外一个指针”也需要一个指针来跟踪,,以此类推,需要重新设计结构体才能解决该问题。
就是在每个结构体中要包含指向下一个结构体next的指针,当创建新结构时,把该结构的地址存储在上一个结构体中
(其中的指针)。
举例:
#define NAME_SIZE 20//人名字符大小
typedef struct peoplecard
{
char name[NAME_SIZE];
int age;
peoplecard* next;//指向下一个结构体的指针
};
知识点:
结构不能含有与结构本身类型相同的结构,但是可以含有指向同类型结构的指针,这是链表的基础。链表的每一项都包含在何处能找到下一项结构体的信息(指针)。
举例:
用户输入人名为Tom,年龄为20,程序将为people_card 类型的结构体分配内存,
如果该结构体后面没有其他的结构体,程序需要把指向下一个结构体指针next设置为NULL。
因为第一个结构体是没有其他结构体的next记录的,所以还需要一个单独的结构体指针存储第一个结构体的地址,这个指针可以被称为头指针或根指针(head或root)。
重新设计数据结构,每个结构中都包含指向下一个结构体的指针,当创建新的结构体时,可以把该结构体的地址存储在上一个结构体的next指针中。
新设计的结构示意图如下:
数据结构实现示意图:
软件结构设计: