C语言-链表的创建头插法和尾插法(有无头节点)

2024-03-06 19:38

本文主要是介绍C语言-链表的创建头插法和尾插法(有无头节点),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 结构声明
    • 1 头插法(有头节点)
    • 2 头插法(无头节点)
    • 3 尾插法(有头节点)
    • 4 尾插法(无头节点)

结构声明

typedef int ElementType;typedef struct Node {ElementType data;struct Node *Next;
} *List;

1 头插法(有头节点)

/* 建立链表 - 头插法 - 有头节点 +------+	     +------+	 +------+	 +------+| head |   =>    |node_1| -> |node_2| -> |node_3| -> NULL+------+	     +------+	 +------+	 +------+\			  /+------+|   p  |+------+*/
List HeadCreate(void)
{ElementType x; // 保存 Node 中的 data 数据List p; // 临时指针,用于保存声明的节点List head; // 整个链表的头结点;head = (List)malloc(sizeof(struct Node));head->Next = NULL;head->data = 0; // 头节点的 data 域用于保存链表的长度scanf("%d", &x);while (x != -1) { // 当 x 等于 -1 的时候,停止创建链表p = (List)malloc(sizeof(struct Node));p->data = x;p->Next = head->Next;head->Next = p;head->data++; // 链表的长度加 1scanf("%d", &x); // 读取下一个节点的数据}return head;
}

2 头插法(无头节点)

/*建立链表 - 头插法 - 没有头节点+------+	  +------+	   +------+	   +------+| head | -> |node_1| ->  |node_2| -> |node_3| -> NULL^  	  +------+	  +------+	   +------+	   +------+|+------+|  p   |+------+*/
List HeadCreate(void)
{ElementType x; // 保存 Node 中的 data 数据List p;List head;head = NULL;scanf("%d", &x);while (x != -1) {p = (List)malloc(sizeof(struct Node));p->data = x;if (head == NULL) {	// 若第一次创建节点,则将该点设置为头节点head = p;p->Next = NULL;} else { // 若不是第一次创建节点,则直接将新节点接到链表头p->Next = head;head = p;}scanf("%d", &x);}return head;
}

3 尾插法(有头节点)

/* 创建链表 - 尾插法 - 有头节点+------+	+------+	+------+| head | -> |node_1| -> |node_2|   ____+------+	+------+	+------+	  |v+------+ 	  +------+| rear |  ->  |   p  |+------+	  +------+*/
List TailCreate(void)
{ElementType x; // 保存 Node 中的 data 数据List p;List head; // 头结点List rear; // 因为尾插法需要在尾部插入,所以要有个指针来保存尾的位置head = (List)malloc(sizeof(struct Node));head->Next = NULL;rear = head; // 链表为空,头和尾指向同一个位置scanf("%d", &x);while (x != -1) {p = (List)malloc(sizeof(struct Node));p->data = x;rear->Next = p;rear = p;}rear->Next = NULL; // 链表建立结束后将最后一个节点指向 NULLreturn head;
}

4 尾插法(无头节点)

/* 创建链表 - 尾插法 - 没有头节点 +------+	+------+	+------+|node_1| -> |node_2| -> |node_3| 	____+------+	+------+	+------+	   |v+------+	+------+| rear | ->	|   p  |+------+	+------+*/
List TailCreate(void)
{ElementType  x;List p;List head;List rear;head = NULL;rear = NULL;scanf(%d, &x);while (x != -1) {p = (List)malloc(sizeof(struct Node));p->data = x;if (head == NULL) { // 创建链表的第一个节点head = p;rear = p;p->Next = NULL;} else {rear->Next = p;rear = p;}scanf("%d", &x);}rear->Next = NULL; // 链表建立结束后将最后一个节点指向 NULL(尾插法中不要遗漏)return head;
}

这篇关于C语言-链表的创建头插法和尾插法(有无头节点)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/781102

相关文章

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点