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

C++ 无/有表头节点单链表——头插法 单链表头插法的算法 阅读详情
AI摘要

本文详细介绍了使用头插法和尾插法构建链表的过程,并分别探讨了有头节点和无头节点的情况。通过具体的代码实现,帮助读者理解不同场景下链表构建的特点。

结构声明

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++; // 链表的长度加 1
		
		scanf("%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; // 链表建立结束后将最后一个节点指向 NULL
	return 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语言来实现链表创建 前言 链表是数据结构中很重要的内容,要想学会数据结构,首先要了解链表 链表的基本知识 1,链表的构成 链表是由一个头指针和一个个节点构成的,如图: 而节点则是一个个结构体,包含数据域和指针域两部分,其中,指针域存储的是指向下一个节点的指针 2,对于链表的操作 1,创建链表 2,初始化链表 3,遍历链表 4,对于链表进行增删查等操作 C语言对于链表的代码的实现 1,创建结构体并命名 创建链表前需要先创建结构体作为节点和头指针: typedef struct Node //typedef方法函数可以对于st 阅读详情

相关推荐

c语言实现链表的基本操作之插入(头插法,尾插法),删除,打印

文章目录1.头插法2.尾插法3.删除元素4.打印元素总结 链表是一种常见的基础数据结构,结构体指针,下面用c语言实现单链表插入,删除,打印等基本操作 1.头插法 头插法:从一个空表开始,重复读入数据,生成新节点,将读入的数据域存放到新结点的数据域中,然后将新结点插入到当前链表的表头结点之后,直至读入结束为止 头插法图解 头插法代码 //插入元素(头插法) int insertheadList...

weixin_46491115的博客 4884

(最详细)c语言尾插法&头插法代码讲解

1.尾插法 尾插法 头指针和尾指针都指向头结点,然后往里边插入元素, 每插入一个元素尾指针就后移一下 其中如下图所示 尾插法的核心代码是: pointer->next = s; //pointer指向新生成的节点 pointer = pointer->next;//pointer移动至新节点位置 尾插法建立单链表的算法如下: #include <stdio.h> #include <stdlib.h> struct Test { int .

HHHSSD的博客 2万+

手把手教你用STM32CubeMX和HAL库驱动DW3000:从SPI配置到第一个测距Demo

本文详细介绍了如何使用STM32CubeMX和HAL库驱动DW3000 UWB定位通信模块,从SPI配置到实现厘米级测距Demo的全过程。涵盖硬件连接、SPI通信调试、驱动移植及双向测距(TWR)算法实现,帮助开发者快速掌握UWB高精度定位技术,适用于仓储物流、智能家居等场景。

weixin_27038245的博客 485

创建不带头结点的单链表之头插法和尾插法并求节点数(C+详细注释)

一、单链表抽象数据类型定义 #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #include&amp;lt;time.h&amp;gt; #define OK 1 #define ERROR 0 #define LEN 10 typedef int Elemtype; //数据类型重

苍之羽 8382

Java开发者必备:Ollama4j客户端库全面指南与实战

在AI应用开发领域,本地部署大型语言模型(LLM)已成为降低成本和提升隐私安全的重要趋势。其核心原理是通过REST API与模型服务器交互,实现文本生成、对话和语义理解等功能。这一技术为Java生态系统带来了显著的工程价值,使开发者能够便捷地将AI能力集成到企业级应用中。Ollama4j作为一款专为Java设计的轻量级客户端库,通过封装底层HTTP通信和JSON处理,提供了类型安全、面向对象的API,极大地简化了与Ollama服务器的交互。它全面支持流式生成、多轮对话、嵌入向量计算以及高级的**工具调用**

weixin_28295799的博客 436

深入解析MOS管电容特性:从基础理论到高频应用

本文深入解析了MOS管的电容特性,从基础物理结构出发,详细拆解了栅氧电容、重叠电容和结电容的成因与影响。文章重点探讨了电容值随工作状态变化的非线性特性,并分析了其在CMOS高频开关电源、射频电路等应用中的关键作用,包括开关损耗、米勒效应、信号完整性挑战以及如何将电容特性转化为可控元件(如MOS变容管)的机遇。最后提供了从选型、仿真到PCB布局的实战设计指南。

weixin_29278805的博客 381

【ADT】栈_链栈_不带头节点(王道课本推荐)

其实区别还蛮大的,1.头插法的时间复杂度O = 1,而尾插法的时间复杂度O = n,造成这个原因的本质原因是链表本身物理实现并不像数组那样是可以按照数组索引(index)对数组的元素进行随机访问,因为链表是我们用指针在堆区开辟的内存并将这些内存用结构体进行人为的设置,结构体内有结构指针,结构指针将堆内的结构内存之间进行了定向链接,注意哦是之间是一对一的关系,而不是一对多,虽然也可以一对多,这样就有点树的感觉了,不过总的来说就是我们定义的结点结构内的结构指针是一个决定了这种结点与结点间是一对一的关系。....

m0_62409781的博客 323

模型预测控制 (MPC, Model Predictive Control) 算法详解及案例分析

模型预测控制是一种基于模型的控制策略,通过在线求解一个有限时域的优化问题,预测系统的未来行为,并根据预测结果调整控制输入,以实现系统的稳定性和性能优化。

闲人编程的博客 2934

不带头结点——尾插法

【代码】不带头结点——尾插法。

weixin_50942741的博客 1045

C++ PCL点云处理实战专栏

工业级点云处理技术学习资源,涵盖电力、建筑、隧道等领域的实战案例。内容分为三阶段:代码原理(算法认知)、动态库(项目验证)和完整代码(定制开发)。

weixin_45196569的博客 1117

【UVM实战】第七章:UVM中的寄存器模型(1)寄存器模型简介

寄存器模型简介~

悟已往之不谏 知来者之可追 2070

c语言单链表的创建,头插法,尾插法

单链表的创建有两种方式:头插法和尾插法。 这两种方法最大的区别在于对输入数据的存储方式不同,头插是逆序,尾插是顺序,尾插较于符合大多数人的习惯。但理解头插法对于理解单链表的插入和删除操作会有很大的帮助。 不论是哪种方法,了解其创建原理理清思路是十分重要的一步,代码其次。 对于一个单链表来说,分为有头节点的单链表和无头节点的单链表,头结点中不含数据域,头指针指向头结点;而无头节点的单链表中第一个节点...

优快云GuoYuying的博客 1万+

想在 Visual Studio Code 里进行 ABAP 开发,需要安装的扩展列表

安装完毕后,我们可以将 SAP 系统配置为 Visual Studio Code 连接的远程文件系统。为了连接到 SAP 系统,需要启用 ABAP 开发工具 (ADT) ICF 节点,这与 SAP Hana Studio 等工具使用的服务相同。打开 SAP GUI 并连接到目标系统,运行事务 SICF,然后激活 ADT_SRV 服务,如下所示。这启用了允许代码编辑器和 IDE 连接到 SAP 系统的服务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3117

头插法和尾插法创建链表(有无头结点)

头插法建表规则: 从一个空表开始,读取字符数组a中的字符,生成新节点,将读取的数据存放到新节点的数据域中,然后将新节点插入到当前链表的表头上,直到读完字符数组a的所有元素为止。 头插法建表简单,但生成的链表中节点的次序和原数组的次序相反,若希望两者的次序一致,可采用尾插法建立 尾插法建表规则: 该算法是将新节点插到当前链表的表尾上,为此必须增加一个尾指针rear,使其始终指向当前链表的尾节点 代码...

夜飘凌的博客 2465

极验点选click3.1.0所对应fullpage.js的逆向分析

极验3代点选验证,本文适用于使用click.3.1.0.js和fullpage919-eyz9lh.js版本的web验证码,没有细节内容,适合有基础的开发者阅读。

shanf7921的博客 647

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C语言头插法尾插法创建单链表

链表 [Linked List]:链表是由一组不必相连【不必相连:可以连续也可以不连续】的内存结构 【节点】,按特定的顺序链接在一起的抽象数据类型。头插法和尾插法建立单链表步骤很相似,而尾插法需要将新插入的节点重新设为尾节点,以上就是两种方法创建单链表。

weixin_62503503的博客 5927

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C语言对链表的基本操作(头插法,尾插法,增加节点,删除节点,链表遍历)

我个人在对C语言的学习中感觉对链表的操作开始是很难理解的,因为一开始是自学,链表这一节是直接跳过了,后来学习数据结构发现链表就是数据结构的基本操作,如果链表不会用C语言代码写出来,数据结构就只能直接手写伪代码,这样也不知道直接的算法是否正确,所以建议初学的时候最好克服困难把链表好好看看,以下是我的一些学习链表基本操作的方法。 1. 链表的结构体定义(结点定义) 链表的一个结点首先肯定包含一个数...

北风 3674

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

头插法、尾插法建立链表(C语言)

头插、尾插 #include "stdio.h" #include "stdlib.h" typedef struct List { int data; //数据域 struct List *next; //指针域 } List; void TailCreatList(List *L) //尾插法建立链表 { List *s, *r;//s用来指向新生成的节点。r始终指向L的终端节点。...

weixin_41036461的博客 2993

C语言——头插法和尾插法动态创建链表

在C语言中,动态创建列表通常指的是使用链表(Linked List)这种数据结构。链表由一系列节点(Node)组成,每个节点包含数据部分和指向下一个节点的指针。根据插入节点的位置不同,链表的插入操作可以分为头插法和尾插法。下面将详细介绍这两种方法。

weixin_45720999的博客 1729

单链表的头插法尾插法及删除节点操作

带头节点的单链表的头插法尾插法及删除节点操作 链表的操作对于初学者来说理解非常有难度,初学的同学们应该在学习链表的过程中多再练习本上画图,写一行代码就画出代码执行后链表各节点图的变化,方便理解。我也是刚学c语言不久,也是第一次写博客,如果有什么不对的地方,还望 大家多~多指教。 首先先看一下单个节点的结构: typedef struct node{ int data; //数据域 struct node*next; //指针域 }Node; (注意我用 typedef 将struct nod

雪月清的博客 3353

尾插法建立链表详解

尾插法,顾名思义,就是把新加入的节点插入到上一个节点的尾部(头插法是把新加入的节点插入到上一个节点的头部),next存储下一个节点位置的地址,开始时,初始化定义头节点 head -> next = NULL; 表示头节点的下一个节点为空,就是该链表只有一个头节点,图形化表示为 由于头插法要把每一个新加入的节点插入到上一个节点的尾部,所以需要定义一个指针,记录每次插入变换后的最后一个节点的指针域信息 r = head; 将头节点赋值给r,r记录每次插入变换后尾部的信息 申请一个节点

qq_40741513的博客 4万+

C语言版-数据结构线性表之头插法与尾插法

头插法和尾插法 主函数如下: LinkList L; ElemType e; Status i; int j,k; i=InitList(&L); printf("初始化L后:ListLength(L)=%d\n",ListLength(L)); i=ClearList(&L); printf("\n清空L后:ListLength(L)=%d\n",ListLength(L)); CreateListHead(&am

u014183815的博客 4913

C语言实现单链表的头插法、尾插法、链表翻转、删除节点和输出

C语言实现单链表的头插法、尾插法、链表翻转、删除节点和输出 1.首先创建单链表的结构体 typedef struct Node{ int data; struct Node* next; }Linklist; 2.创建头节点 //创建头结点 Linklist *creat(){// 创建一个链表,即创建一个头结点 Linklist *head; head=(Linklist *)mal...

IT精英之路的博客 1222

创建带头结点的单链表之头插法和尾插法并求节点数(C+详细注释)

一、单链表抽象数据类型定义: #include&amp;amp;amp;lt;stdio.h&amp;amp;amp;gt; #include&amp;amp;amp;lt;stdlib.h&amp;amp;amp;gt; #include&amp;amp;amp;lt;time.h&amp;amp;amp;gt; #define OK 1 #define ERROR 0 #define LEN 10 typedef

苍之羽 4114

C实现头插法和尾插法来构建单链表(不带头结点)

链表的构建其实也就是不断插入节点的过程。而节点的插入可以分为头插法和尾插法。头插法就是在头结点后插入该节点,始终把该节点作为第一个节点。尾插法就是在链表的最后一个节点处插入元素,作为最后一个节点。如果想要了解链表的概念和其他链表操作,请参考《数据结构与算法之链表》《C语言实现链表的基本操作》两篇文章。示例代码上传至  https://github.com/chenyufeng1991/HeadIn

乞力马扎罗的雪CYF的博客 9419

如何用头插法和尾插法建立双向链表

*如何用头插法建立双向链表 与尾插法不同的是,头插法需要链接两个节点,分别于头节点的链接和与上一个节点的链接,所以需要链接两个节点,而且链接上一个节点的时候需要从第二次连接开始。* 代码如下: //双向链表 include include...

qq_39380114的博客 5232
上一篇: C语言-什么是尾递归
下一篇: Java中的equals方法
syzdev
博客等级 码龄9年 852粉丝 149原创
评论 22
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值