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

相关文章

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

MySQL的触发器全解析(创建、查看触发器)

《MySQL的触发器全解析(创建、查看触发器)》MySQL触发器是与表关联的存储程序,当INSERT/UPDATE/DELETE事件发生时自动执行,用于维护数据一致性、日志记录和校验,优点包括自动执行... 目录触发器的概念:创建触www.chinasem.cn发器:查看触发器:查看当前数据库的所有触发器的定