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

news/2024/7/20 2:42:32 标签: 指针, 链表, 数据结构, 算法, 小程序

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

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

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

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

//头文件
#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;		

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

感谢观看

再次感谢~


http://www.niftyadmin.cn/n/1543181.html

相关文章

牛客:剑指offer:数组中只出现一次的数字 (Java)

题目描述&#xff1a; 看到这个题目我首先想到的方法就是&#xff0c;遍历数组&#xff0c;用一个map来装没有出现过的数&#xff0c;如果map中已经有这个数了&#xff0c;就说明这个数是第2次出现了&#xff0c;所以把这个数从map中remove掉&#xff0c;这样遍历一遍后map中就…

js中replace的回调函数使用。

这只是一个小问题&#xff0c;但是之前并没有发现。这个问题就是replace的第二个函数是支持回调函数的。 var ext new RegExp(f,g); 1.str.replace(ext ,1); 这行代码我们知道是将str中的f替换成数字1。这个用法是众所周知的。 2.str.replace(ext,function(str1,function(a,b,…

百川即时通讯跨appkey问题解决

当前调用的sdk版本为: <script src"https://g.alicdn.com/aliww/??h5.openim.sdk/1.0.6/scripts/wsdk.js,h5.openim.kit/0.4.0/scripts/kit.js" charset"utf-8"></script><script src"https://g.alicdn.com/aliww/h5.imsdk/4.0.1/sc…

牛客:剑指offer:和为S的连续正数序列 (Java)

题目描述&#xff1a; 解析&#xff1a; 看到这个题目&#xff0c;我想到的办法是i从1开始遍历到mid(sum1)/2&#xff0c;每次求i开始直到mid的和&#xff0c;中间找到和为sum的就存到结果res中。但是这个效率太低&#xff0c;每次都要遍历i到mid次。 import java.util.ArrayL…

单链表的整表删除__小工具——中职

本程序为提供可执行链表的必要环节&#xff0c;所以单独拎出来。 理解即可 单链表的整表删除 /* 本程序为提供可执行链表的必要环节&#xff0c;所以单独拎出来。 理解即可单链表的整表删除 *///头文件 #include<stdio.h> #include<malloc.h> #include<stdlib…

牛客:剑指offer左旋转字符串 java

题目描述&#xff1a; 解析&#xff1a; 看到这个我们想到的肯定都是将字符串前面的0-n剪下来放到字符串后面就可以了&#xff0c;可能是我JS用的比较多&#xff0c;所以马上就想到用String自带的字符串切分方法。 public class Solution {public String LeftRotateString(Str…

C++ Primer Plus P39 程序清单3.3(演示 八进制、十进制、十六进制的表达)(方法一)——中职

C Primer Plus P39 程序清单3.3 演示 八进制&#xff1a;042 十进制&#xff1a;42 十六进制&#xff1a;0x42或0X42 提示&#xff1a;这些并不是数值42的各个进制的表达&#xff0c;别混淆了&#xff0c;而是这些进制相对于的数值 /* C Primer Plus 程序清单3.3演示 八进制…

牛客:剑指offer:翻转单词顺序列 (Java)

题目描述&#xff1a; 解析&#xff1a; 这个题目看上去很简单&#xff0c;思路就是把句子按空给切分&#xff08;split&#xff09;为一个个的单词&#xff0c;然后从后往前存入返回的字符串中就行。 但是我并没有一次AC&#xff0c;原因是因为对于全是空格的句子&#xff0…