////////////////////////////////【 链表 】//////////////////////////////////////////////////////////////// // 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 ", i, pStu->id, pStu->szName); pStu = pStu->pNext; // 指向链表的下一个节点对象 ++i; } // 查找id为004的链表节点 pStu = Find(&g_Student[0], 004); if (pStu) { printf("找到id为004的链表节点对象: szName = %s ", pStu->szName); } getchar(); return 0; }