C++ - 链表

////////////////////////////////【 链表 】////////////////////////////////////////////////////////////////
// 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;
}

  

posted @ 2016-08-01 16:47  C/C++/Python/Java  阅读(237)  评论(0编辑  收藏  举报