C语言链表知识点(2)

嵌入式技术

1330人已加入

描述

链表知识点2

通过malloc函数动态创建节点:

#include < stdio.h >
#include < stdlib.h >


typedefstruct List Node_t;

struct List
{
	/*数据区域有两个变量*/
	int a;
	float b;
	/*地址区域有一个指针*/
	Node_t* pNext;
};

Node_t Head_Node; //表头变量 
Node_t Body_Node; //表身变量 
Node_t Tail_Node; //表尾变量


int Node_Count = 0;//节点计数变量

//动态分配一个节点的空间 使用malloc函数
int main(void)
{
	
	Node_t* pHead = NULL;//头节点指针
	Node_t* pBody = NULL;//身体节点指针
	Node_t* pTail = NULL;//尾节点指针
	Node_t* pTemp = NULL;//临时节点指针

	pHead = (Node_t*)malloc(sizeof(Node_t));
	pHead- >a = 1;
	pHead- >b = 1.0;

	pBody = (Node_t*)malloc(sizeof(Node_t));
	pBody- >a = 2;
	pBody- >b = 2.0;

	pHead- >pNext = pBody;//头节点里面存的地址是下一个节点

	pTail = (Node_t*)malloc(sizeof(Node_t));
	pTail- >a = 3;
	pTail- >b = 3.0;

	pBody- >pNext = pTail;//身体节点里面存的地址是下一节点
	pTail- >pNext = NULL;//尾部节点里面存的地址是NULL 下一个没了

	//访问各个节点 通过头节点
	pTemp = pHead;
	while (pTemp!= NULL)
	{
		Node_Count++;
		printf("节点 %d 的信息:rn", Node_Count);
		printf(" int %drn float %frn Node_t* %prn", pTemp- >a, pTemp- >b, pTemp- >pNext);
		pTemp = pTemp- >pNext;
	}
	
}

运行结果:

代码

对代码进行优化改进:

#include < stdio.h >
#include < stdlib.h >

typedefstruct List Node_t;

struct List
{
	/*数据区域有两个变量*/
	int a;
	float b;
	/*地址区域有一个指针*/
	Node_t* pNext;
};


int Node_Count = 0;//节点计数变量

//动态分配一个节点的空间 使用malloc函数
int main(void)
{
	Node_t* pHead = NULL;//头节点指针
	Node_t* pTemp = NULL;//临时节点指针
	Node_t* qTemp = NULL;//临时节点指针


	pHead = (Node_t*)malloc(sizeof(Node_t));
	pHead- >a = 1;
	pHead- >b = 1.0;
	pTemp = pHead;//头节点的地址赋值给临时节点指针


	qTemp = (Node_t*)malloc(sizeof(Node_t));
	qTemp- >a = 2;
	qTemp- >b = 2.0;
	pTemp- >pNext = qTemp;//新开辟的节点是下一个节点 将值给临时节点的下一个节点地址
	pTemp = qTemp;//临时节点拿到第二个节点地址


	qTemp = (Node_t*)malloc(sizeof(Node_t));
	qTemp- >a = 3;
	qTemp- >b = 3.0;
	pTemp- >pNext = qTemp;//新开辟的节点是下一个节点 将值给临时节点的下一个节点地址
	pTemp = qTemp;//临时节点拿到第三个节点地址



	pTemp- >pNext = NULL;//第三个节点是最后一个节点 没有下一节点

	//通过头节点 访问各个节点 
	pTemp = pHead;
	while (pTemp!= NULL)
	{
		Node_Count++;
		printf("节点 %d 的信息:rn", Node_Count);
		printf(" int %drn float %frn Node_t* %prn", pTemp- >a, pTemp- >b, pTemp- >pNext);
		pTemp = pTemp- >pNext;
	}
	
}

运行结果:

代码
在这里插入图片描述

通过循环结构添加节点:

添加节点的核心逻辑:

代码

改成循环

while(1)
	{
		Node_Count++;
		printf("第%d 的信息:rn", Node_Count);
		qTemp = (Node_t*)malloc(sizeof(Node_t));
		printf("节点整型数据:");
		scanf("%d", &qTemp- >a);
		printf("节点浮点数据:");
		scanf("%f", &qTemp- >b);
		pTemp- >pNext = qTemp;//新开辟的节点是下一个节点 将值给临时节点的下一个节点地址
		pTemp = qTemp;//临时节点拿到当前这个节点的地址


		printf("继续添加节点按【Y】,【其他键】退出申请节点rn");
		if (getch() != 'Y')
		{
			break;
		}
	}

通过循环结构添加节点代码实现:

#define _CRT_SECURE_NO_WARNINGS
//可以使用scanf_s代替scanf
//但是不建议使用scanf_s因为scnaf_s不是C函数,而是VS中自带的函数。
//使用它可能会造成跨平台的问题 解决办法是添加宏定义(第一行)
#include < stdio.h >
#include < stdlib.h >


typedefstruct List Node_t;

struct List
{
	/*数据区域有两个变量*/
	int a;
	float b;
	/*地址区域有一个指针*/
	Node_t* pNext;
};


int Node_Count = 0;//节点计数变量

//动态分配一个节点的空间 使用malloc函数
int main(void)
{
	Node_t* pHead = NULL;//头节点指针
	Node_t* pTemp = NULL;//临时节点指针
	Node_t* qTemp = NULL;//临时节点指针


	pHead = (Node_t*)malloc(sizeof(Node_t));
	pHead- >a = 1;
	pHead- >b = 1.0;
	pTemp = pHead;//头节点的地址赋值给临时节点指针
	printf("头节点创建成功rn");
	Node_Count++;
	while(1)
	{
		Node_Count++;
		printf("第%d 的信息:rn", Node_Count);
		qTemp = (Node_t*)malloc(sizeof(Node_t));
		printf("节点整型数据:");
		scanf("%d", &qTemp- >a);
		printf("节点浮点数据:");
		scanf("%f", &qTemp- >b);
		pTemp- >pNext = qTemp;//新开辟的节点是下一个节点 将值给临时节点的下一个节点地址
		pTemp = qTemp;//临时节点拿到当前这个节点的地址


		printf("继续添加节点按【Y】,【其他键】退出申请节点rn");
		if (getch() != 'Y')
		{
			break;
		}
	}
	Node_Count = 0;
    /*
	
	qTemp = (Node_t*)malloc(sizeof(Node_t));
	qTemp- >a = 2;
	qTemp- >b = 2.0;
	pTemp- >pNext = qTemp;//新开辟的节点是下一个节点 将值给临时节点的下一个节点地址
	pTemp = qTemp;//临时节点拿到第二个节点地址

	qTemp = (Node_t*)malloc(sizeof(Node_t));
	qTemp- >a = 3;
	qTemp- >b = 3.0;
	pTemp- >pNext = qTemp;//新开辟的节点是下一个节点 将值给临时节点的下一个节点地址
	pTemp = qTemp;//临时节点拿到第三个节点地址
	*/

	pTemp- >pNext = NULL;//第三个节点是最后一个节点 没有下一节点

	//通过头节点 访问各个节点 
	pTemp = pHead;
	while (pTemp!= NULL)
	{
		Node_Count++;
		printf("节点 %d 的信息:rn", Node_Count);
		printf(" int %drn float %frn Node_t* %prn", pTemp- >a, pTemp- >b, pTemp- >pNext);
		pTemp = pTemp- >pNext;
	}

	return0;

}

运行效果:

代码

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分