////////////////////////////////【 链表 】////////////////////////////////////////////////////////////////
// 1.链表的概念 : 若干个对象, 用指针串联起来;
// 2.链表的实现 : 必须在struct中添加一个指针作为成员, 该指针指向一个对象
// 如果该指针为NULL, 表示它是最后一个对象.
// 3.链表的特征 :
// a.链表头 : 必须指向链表中的第一个对象, 通常用链表头代表整个链表;
// b.链表尾 : 必须指向链表中的最后一个对象且最后一个对象的pNext必须为NULL;
// 4.链表的遍历 : 用指针pNext得到下一个对象.
/////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <tchar.h>
// 带链表的结构体_Student
struct _Student
{
int id;
char szName[128];
_Student * pNext; // 存储下一个结构体的地址
};
// 初始化
struct _Student g_Student[4] =
{
{001, "张三", NULL},
{002, "李四", NULL},
{003, "王五", NULL},
{004, "赵六", NULL}
};
// 查找链表id
_Student * Find(_Student * pHead, int id)
{
_Student * pStu = pHead;
while (pStu)
{
// 如果当前节点的id等于要查找的id
if (id == pStu->id)
{
// 则返回当前的链表指针
return pStu;
}
// 指向下一个节点
pStu = pStu->pNext;
}
// 如果没有找到匹配的id, 则返回一个空的链表指针
return NULL;
}
int _tmain(int argc, _TCHAR* argv[])
{
////////////////////////////////【 链表的构造 】///////////////////////////////
// g_Student[0].pNext 指向 g_Student[1] 的内存地址
g_Student[0].pNext = &g_Student[1];
g_Student[1].pNext = &g_Student[2];
g_Student[2].pNext = &g_Student[3];
g_Student[3].pNext = NULL;
////////////////////////////////【 链表的遍历 】///////////////////////////////
//_Student * pStu = g_Student;
_Student * pStu = &g_Student[0];
while(pStu)
{
static int i = 0;
printf("g_Student[%d] : id = %d szName = %s \r\n", i, pStu->id, pStu->szName);
pStu = pStu->pNext; // 指向链表的下一个节点对象
++i;
}
// 查找id为004的链表节点
pStu = Find(&g_Student[0], 004);
if (pStu)
{
printf("找到id为004的链表节点对象: szName = %s \r\n", pStu->szName);
}
getchar();
return 0;
}