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

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

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

链表的整表删除

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

单链表的整表删除
*/

//头文件
#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个元素
void List_Drop(PList);											//单链表的删除

//函数区
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");
}

void List_Drop(PList PHead)											//单链表的删除
{
	PList p = NULL;													//用于临时操作的指针
	PList q = NULL;													//用于临时操作的指针

	p = PHead->NEXT;												//p指向第一个结点

	while (p)														//p不为空
	{
		q = p->NEXT;												//q指向p的下一个结点
		free(p);													//将p释放
		p = q;														//p和q指向相同的结点
	}

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

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

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

	return 0;
}

注意,该删除链表的各个结点的算法

void List_Drop(PList PHead)											//单链表的删除
{
	PList p = NULL;													//用于临时操作的指针
	PList q = NULL;													//用于临时操作的指针

	p = PHead->NEXT;												//p指向第一个结点

	while (p)														//p不为空
	{
		q = p->NEXT;												//q指向p的下一个结点
		free(p);													//将p释放
		p = q;														//p和q指向相同的结点
	}

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

记得将头结点的指针域挂起哦

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

感谢观看

再次感谢~


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

相关文章

牛客:剑指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…

C++ Primer Plus P40 程序清单3.4(用C++控制符输出数值42的八、十、十六进制的形式)——中职

C Primer Plus P40 程序清单3.4 用C控制符输出数值42的八、十、十六进制的形式 /* C Primer Plus P40 程序清单3.4用C控制符输出数值42的八、十、十六进制的形式 *///头文件 #include<iostream>//主函数 int main(void) {using namespace std; //编译指令int…

(九)groupByKey,reduceByKey,sortByKey算子-JavaPython版Spark

groupByKey,reduceByKey,sortByKey算子 视频教程&#xff1a; 1、优酷 2、 YouTube 1、groupByKey groupByKey是对每个key进行合并操作&#xff0c;但只生成一个sequence&#xff0c;groupByKey本身不能自定义操作函数。 java&#xff1a; 1 package com.bean.spark.trans;2 3 …

严蔚敏数据结构-单链表的增删改查即整表删除(综合程序(理解为主))——中职

严蔚敏数据结构-单链表的增删改查即整表删除 (基于个人思想上的理解敲出的) 综合程序&#xff08;理解为主&#xff09; /* 严蔚敏数据结构-单链表的增删改查即整表删除 (基于个人思想上的理解敲出的)综合程序&#xff08;理解为主&#xff09; *///头文件 #include<stdio…

牛客:剑指offer:扑克牌顺子 (Java)

题目描述&#xff1a; 解析&#xff1a; 随机抽的5张牌可以看成5个数字组成的数组&#xff0c;大、小王是特殊的数字&#xff0c;不妨定义为0.接下来只要判断5个数字是不是连续的。最直观的方法是排序&#xff0c;然后用0去补满数组中的空缺。如果排序后的数组不是连续的&…

MVC 根据model.status判断是否显示button

View页面&#xff1a; model ViewModels <div> if(Model.Status!1) { <asp:Button id"btnPublish" Text"Submit" runat"server" /> <asp:Button id"btnSaveDraft" Text"Submit" runat"server" /&…