单链表的整表建立__尾插法(推荐使用的方法)——中职

本程序为提供可执行链表的必要环节,所以单独拎出来。
理解即可

尾插法(推荐使用的方法)

/*
本程序为提供可执行链表的必要环节,所以单独拎出来。
理解即可

尾插法(推荐使用的方法)
*/

//头文件
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

//结构
typedef struct LIST												//该链表的结构
{
	int data;													//该单链表的数据域
	struct LIST *NEXT;											//该链表的指针域
}SQlist, *PList;

//函数声明
PList List_initialize(void);									//初始化单链表,并返回头指针
void List_the_assignment(PList);								//用户自定义要开辟的结点数并赋予每个结点数据
void List_output(PList);										//单链表的输出
void List_drop(PList);											//在带头结点的单链线性表L中,删除第i个元素

//函数区
PList List_initialize(void)										//初始化单链表
{
	PList PHead = NULL;											//挂起头指针

	PHead = (PList)malloc(sizeof(SQlist));						//开辟头结点,并用头指针指向
	if (NULL == PHead)											//如果分配失败
	{
		printf("初始化头结点失败,检查程序!\n");				//显示错误位置,方便检查
		exit(1);												//非正常终止程序
	}

	PHead->NEXT = NULL;											//挂起头结点的指针域

	return PHead;												//返回头指针
}

void List_the_assignment(PList PHead)								//用户自定义要开辟的结点数并赋予每个结点数据
{
	PList PTail = NULL;												//用于操作链表的指针
	PList PNew = NULL;												//用于开辟新结点的指针
	int i, len, val;
	
	printf("输入要开辟的结点个数:");
	scanf_s("%d", &len);											//输入要开辟的个数

	PTail = PHead;													//将头指针赋给PTail,注意不能写成PTail = PHead->NEXT,因为PHead->NEXT为NULL
		
	for (i = 1;i <= len;i++)										//建立链表
	{
		printf("输入第%d个结点的值:", i);
		scanf_s("%d", &val);										//依次输入各个结点的值

		PNew = (PList)malloc(sizeof(SQlist));						//开辟新结点
		if (NULL == PNew)											//如果分配失败
		{
			printf("初始化赋值时,建立新结点失败,检查程序!\n");	//显示错误位置,方便检查
			exit(1);												//非正常终止程序
		}

		PNew->data = val;											//使新结点的数据域赋值
		PNew->NEXT = NULL;											//使新结点的指针域挂起
		PTail->NEXT = PNew;											//将新结点挂在前一个结点
		PTail = PNew;												//使PTail指向下一个元素
	}
}

void List_output(PList PHead)										//单链表的输出
{
	PList PTail = NULL;												//用于操作链表的指针

	PTail = PHead->NEXT;											//将第一个结点的位置赋给PTail
	
	printf("\n当前链表的值为:");
	while (NULL != PTail)											//当前结点不为空
	{
		printf("%d ", PTail->data);									//输出当前结点的数据域
		PTail = PTail->NEXT;										//使PTail指向下一个结点
	}

	printf("\n");
}

//主函数
int main(void)
{
	PList PHead = NULL;								//使主函数的头指针挂起

	PHead = List_initialize();						//初始化单链表,并把返回的头指针给主函数的头指针
	List_the_assignment(PHead);						//用户自定义要开辟的结点数并赋予每个结点数据
	List_output(PHead);								//单链表的输出

	return 0;
}

注意尾插法的算法

		PNew->data = val;											//使新结点的数据域赋值
		PNew->NEXT = NULL;											//使新结点的指针域挂起
		PTail->NEXT = PNew;											//将新结点挂在前一个结点
		PTail = PNew;		

小工具,希望对你有所帮助

感谢观看

再次感谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值