介绍
把链表分为无头链表和有头链表。
无头链表:所有的节点都包含了有效数据,上一篇文章中演示代码使用的就是无头链表。
有头链表:用一个固定的头节点来指代整个链表,所有的对象都挂在这个头节点下面,而头节点不包含有效数据。
有头链表优点:
可以简化链表操作,当链表的对象个数为0时,无头链表不好表示。
演示代码
创建有头链表,封装函数,通过有头链表的链表头添加节点对象
#include <stdio.h>
//结构体对象
struct Student
{
char name[32];
int age;
Student *pNext;
};
//查找链表中指定age的数据,返回指向该节点的地址
Student * find(Student* p, int age)
{
bool bFind = false; //用于判断是否找到
while(p)
{
if (p->age == age)
{
bFind = true;
break;
}
p = p->pNext;
}
if (bFind)
{
return p;
}
else
{
return NULL;
}
}
//通过链表头往链表中添加一个节点
void addNode(Student* phead,Student *obj)
{
//定位到链表的最后一个节点
while(phead)
{
if (phead->pNext == NULL)
{
break;
}
phead = phead->pNext;
}
//添加该节点到链表的尾部
phead->pNext = obj;
}
int main()
{
//创建3个对象
Student stu[3] = {{"aaa", 30, 0},{"bbb", 31, 0},{"ccc", 32, 0}};
//创建有头链表的链表头
Student pHead = {"head", 0, 0};
//添加节点
addNode(&pHead, &stu[0]);
addNode(&pHead, &stu[1]);
return 1;
}
欢迎加群交流:C/C++开发交流