链表与链表添加

 一、链表

        这里我们来做一个简易的链表,做一个班级统计簿,里面包含学号id以及姓名,首先用

typedef创建结构体,结构体内部定义三个变量学号,姓名,下一个节点的地址。给结构体命名为

List,代码如下:

#include <stdio.h>


typedef struct Node
{
	int id;
	char* name;
	struct Node* pNext;
}List;

          先定义下一个节点的地址为空,然后依次将下一节点的地址赋给上一个的pNext。先设置最

开始的List* p为a节点的地址,通过while循环将学号与姓名依次输出,并将pNext赋给p。

代码如下:

int main()
{
	List a = { 1,"小刚",NULL };
	List b = { 2,"小王",NULL };
	List c = { 3,"小赵",NULL };
	List d = { 4,"小明",NULL };
	List e = { 5,"小红",NULL };

	a.pNext = &b;
	b.pNext = &c;
	c.pNext = &d;
	d.pNext = &e;

	List* p = &a;
	while (p != NULL)
	{
		printf("%d  %s\n", p->id, p->name);
		p = p->pNext;
	}


	return 0;
}

二、链表添加

        每个结构体每次开辟新空间的代码

#include <stdlib.h>

List* GetNode(int id, char* name)
{
	List* pTemp=malloc(sizeof(List));
	pTemp->id =id;
	pTemp->name = name;
	pTemp->pNext = NULL;

	return pTemp;
}

        pphead=&phead  *pphead=phead   

        在主函数中使phead和pend都指向空, AddNode函数判断此时节点是否为空,判断头指针是

否为空,若不为空,则使*ppend指向下一个新节点的地址;反之,则使头指针指向新节点地址,

然后使*ppend指向下一个新节点的地址。之后再进行新一轮的判断。

void AddNode(List** pphead, List** ppend, List* pNode)
{
	if (NULL == *pphead)
	{
		*pphead = pNode;

	}

	else
	{
		(*ppend)->pNext = pNode;
		
	}
	*ppend = pNode;
}

            下面是主函数,先使头指针和尾指针都为空NULL,然后通过GetNode和AddNode函数定义List。

int main()
{
	List* phead = NULL;
	List* pend = NULL;

	AddNode(&phead, &pend, GetNode(1, "aa"));
	AddNode(&phead, &pend, GetNode(2, "bb"));
	AddNode(&phead, &pend, GetNode(3, "cc"));
	AddNode(&phead, &pend, GetNode(4, "dd"));

	while (phead != NULL)
	{

		printf("%d  %s\n", phead->id, phead->name);
		phead = phead->pNext;

	}

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值