C语言学习笔记—链表(三)链表的插入

C语言实现有序单链表的插入 我们先来声明本文演示所用的链表的节点: 阅读详情

在这里插入图片描述

从指定节点后方插入新节点

假设我们已有五个节点,我们要把一个新节点new插入到3后边。
需要三个步骤:

  1. 找到 3 这个节点。
  2. 把新节点指向3这个节点的下一个节点(3->next = new->next)。
  3. 把3指向新节点。(3->next = new)
    在这里插入图片描述
#include <stdio.h>
//定义结构体
struct Test 
{
	int data;
	struct Test *next;//链表有一个指向自己的指针
};
//输出链表数据
void printLink(struct Test *head)
{
	struct Test *piont = head;
	while(piont != NULL){
		printf("%d ",piont->data);
		piont = piont->next;
	}
	putchar('\n');
}
int insertFromBehind(struct Test *head,int data,struct Test *new)
{
	struct Test *point = head;
	while(point != NULL){
		if(point->data == data){
			new->next = point->next;	
			point->next = new;
			return 1;
		}
		//跳到下一节点
		point = point->next;
	}
	return 0;
}

int main()
{
	
	//定义结构体变量
	struct Test t1 = {1,NULL};
	struct Test t2 = {2,NULL};
	struct Test t3 = {3,NULL};
	struct Test t4 = {4,NULL};
	struct Test t5 = {5,NULL};
	struct Test new = {100,NULL};
	//指向对应节点地址形成链表
	t1.next = &t2;
	t2.next = &t3;
	t3.next = &t4;
	t4.next = &t5;
	//插入前输出
	printLink(&t1);
	int ret = insertFromBehind(&t1,3,&new);	
	//插入反馈
	if(ret){
		printf("insert Succeed\n");	
	}else{
		printf("insert Fail\n");	
	}
	//插入后输出
	printf("after inerst \n");
	printLink(&t1);

	return 0;
}

执行结果:
在这里插入图片描述

从指定节点前方插入新节点

从指定节点前插入新节点要考虑到两种情况:
一、从第一个节点(头结点)前插入
假设我们已有五个节点,我们要把一个新节点new插入到头节点前。只需把新节点指向原来的头结点并将其变为新的头结点即可。
在这里插入图片描述
二、不在头节点前插入
在这里插入图片描述

假设我们已有五个节点,我们要把一个新节点new插入到3前边。

  1. 如果不是头结点,我们首先判断当前所指向的节点是不是尾结点。
  2. 假设我们要插入到 3 这个节点前, 在函数中piont刚好指向到了 2 这个节点,我们就判断 2 这个节点的下一个节点的 data 是否与我们所要插入的节点数据相同(point->next->data == data)。如果相同则把该节点指向 3 节点(new->next = point->next)。
  3. 把2指向新节点。(2->next = new)
#include <stdio.h>
//定义结构体
struct Test 
{
	int data;
	struct Test *next;//链表有一个指向自己的指针
};
//输出链表数据
void printLink(struct Test *head)
{
	struct Test *piont = head;
	while(piont != NULL){
		printf("%d ",piont->data);
		piont = piont->next;
	}
	putchar('\n');
}
struct Test *insertFromFront(struct Test *head,int data,struct Test *new)
{
	struct Test *point = head;
	if(point->data == data){
		new->next = head;
		return new;
	}
	while(point->next != NULL){
		if(point->next->data == data){
			new->next = point->next;	
			point->next = new;
			printf("Insert succeed!\n");
			return head;
		}
		//跳到下一节点
		point = point->next;
	}
	printf("Insert faulat!\n");
	return head;
}

int main()
{
	
	//定义结构体变量
	struct Test *head = NULL;
	struct Test t1 = {1,NULL};
	struct Test t2 = {2,NULL};
	struct Test t3 = {3,NULL};
	struct Test t4 = {4,NULL};
	struct Test t5 = {5,NULL};
	struct Test new = {100,NULL};
	//指向对应节点地址形成链表
	t1.next = &t2;
	t2.next = &t3;
	t3.next = &t4;
	t4.next = &t5;
	head = &t1;
	//输出
	printLink(head);

	struct Test new2 = {222,NULL};
	head = insertFromFront(head, 3, &new2);
	printLink(head);
	return 0;
}

执行结果:
非头结点:
在这里插入图片描述
头结点:
在这里插入图片描述

【C语言】单链表建立、插入删除操作 C语言-单链表 阅读详情

相关推荐

C/C++编程笔记:链接列表(链表)丨插入节点的三种方法

在上一篇文章中,我们介绍了链接列表。我们还创建了一个具有3个节点的简单链表,并讨论了链表遍历。 本文讨论的所有程序均考虑以下链表的表示形式。 C ++ C 在这篇文章中,讨论了在链表中插入新节点的方法。可以通过三种方式添加节点: 1)在链表的最前面 2)在给定节点之后。 3)在链接列表的末尾。 在前面添加一个节点:(4个步骤) 将新节点始终添加到给定链接列表的开头之前。新添加的节点成为链接列表的新头。例如,如果给定的链接列表为10-> 15-> 20-> ...

致力于C语言C++知识分享! 5084

链表插入详解

单链表速成——增与删 众所周知,链表是数据结构的重中之重,但有许多朋友对此并不感冒,甚至想骂#¥……#……#。本文主要介绍小编对于链表的喜与悲,乐于忧。 先上图,添加结点 单链表结点类型声明 typedef int ElemType;//假设ElemType为自定义int型 //单链表存储结构 typedef struct LinkNode { ElemTyp...

专业^团队的博客 1万+

c语言单链表的创建、插入、删除

由于之前的下位机开发要求比较低,很少使用链表,后来换了份工作,跟另外一个同事共同开发一个主控程序,链表成为了最基本的数据结构,所以花了一段时间对链表进行了比较认真的学习,以下内容为个人对链表的一些理解。 1:链表的结构 链标的单位为节点,节点包含数据及指向下一个节点的地址。 2:链表的创建 将各个节点按上图的结构串联在一起 3:链表的插入 4、删除一个节点 5

qq_29673441的博客 4298

链表的三种插入方法(头插法,尾插法,任意位置插入)

插入作为链表的四大基本操作之一(增删改查),通常都会借助插入的方法增添信息,这一部分为大家着重讲解插入法。 1.头插法 简而言之,就是从链表的头部进行一个插入,定义一个结构体指针的新节点,并且为这个新的节点动态的分配内存。 如图所示: 这个是原来的链表,现在要进行一个头插法的操作 如图所示: 增添一个新结点Pnew 代码段如下: Pnew->next = headNode->next; headNode->next = Pnew; 2.尾插法 类似于头插法..

weixin_63032791的博客 3万+

C语言——链表的插入(头、尾、有序插入)

1、头部插入 //在链表的头部之前 插入 STU* insert_link(STU *head, STU tmp) { //1、从堆区申请一个待插入的节点空间 STU *pi = (STU *)calloc(1,sizeof(STU)); if(pi == NULL) { perror("calloc"); return head; } //2、将tmp的值 赋值 给*pi *pi = tmp; pi->next = NULL;//注意 //3、将pi插入到链表中

weixin_53391957的博客 4236

【C语言学习笔记】算法篇——栈、队列、链表

#学习资料:《啊哈!算法》、《算法图解》 队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 生活实例:排队买票 原则:FIFO 用处:广度优先搜索以及队列优化的BELLMAN-FORD最短算法的核心数据结构 代码展示(取自啊哈!算法中的解密) #include <stdio.h> int main() { int

z 486

链表插入的三种方式

链表的插入: 一、头插 1、判断空链 : a:新节点指向NULL b: 头指向新节点 2、非空链 a: 新节点指向头(第一个节点) b: 头指向new 综上: 不需判断直接在头操作 代码: void insert_head(Node * head , Node new) { new = * head; * head = new;

致终将努力的我们 1万+

用Python实现四叉树(quad tree)

import numpy as np #正方形类 class square: #lx、ly为左上角坐标(x对应行号,y对应列号),rx、ry为右下角坐标 def __init__(self,lx,ly,rx,ry): self.lx=lx self.ly=ly self.rx=rx self.ry=ry #检查该矩阵中是否满足条件 #参数:原矩阵,阈值 #返回值:布尔类型 def check(s

weixin_44164489的博客 5868

C语言数据结构(链表概念讲解和插入操作)

本篇文章带大家正式的来学习数据结构,数据结构是学习操作系统,和深入C语言必不可少的,所以这篇文章开始带大家学习数据结构的知识。链表(Linked List)是一种常见的数据结构,用于存储和组织数据元素。它由一系列节点(Node)组成,每个节点包含存储的数据(或称为元素/值)以及指向下一个节点的引用(或链接/指针)。链表中的节点可以通过指针连接在一起,形成一个链式结构,而不像数组那样在内存中连续存储。每个节点只需要存储指向下一个节点的引用,而不需要预先分配固定大小的内存空间。

m0_49476241的博客 4339

彻底解决Win11 Android模拟器驱动权限问题:手动修改silent_install.bat的保姆级教程

本文提供了一份详细的Win11 Android模拟器驱动权限问题解决方案,重点介绍了手动修改silent_install.bat脚本的两种方法。通过分析问题根源并给出具体代码修改方案,帮助开发者彻底解决Android Studio在Windows 11上安装时遇到的UAC循环弹窗问题,确保android-emulator-hypervisor-driver顺利安装。

dengliugong3918的博客 461

周志华《机器学习》课程系列笔记——目录导航页

最近自学机器学习课程,注意到了南京大学周志华老师的课程。我是在学堂在线平台观看的,注意到b站上也有相应视频,但b站上并未获得授权,随时有消失的可能。周志华老师的网络教学视频中,与其西瓜书相比确实少了一些内容。但幸运的是,缺失的内容实际上对于初学者来说并不会产生太大影响。目前这一笔记也遵循视频内容,相比西瓜书中也会有一些缺失,敬请谅解。可能以后如果有机会和时间,我会再阅读周志华老师的书籍将缺失内容补全。一切内容敬请关注我的个人Page页面。

Sinocifengs的博客 1687

c语言链表&数据插入

第一个珠子称为链表的头节点,最后一个珠子则没有箭头,表示链表的末尾。在链表中,我们可以通过遍历链表的节点来访问和操作数据。从头节点开始,我们可以顺着箭头一直走到最后一个节点,这样就可以依次访问到链表中的所有数据。链表有多种类型,包括单向链表、双向链表和循环链表等。不同类型的链表在节点之间的连接方式上略有不同,但基本的概念是相同的。链表是一种数据结构,它由一个个节点组成,每个节点包含两部分:一个是存储数据的元素,另一个是指向下一个节点的指针。在链表中插入数据有几种不同的方式,具体取决于插入的位置和需求。

weixin_44738632的博客 1989

告别效率低谷:用ADS仿真手把手教你设计高回退Doherty功放(附1:2非对称案例)

本文详细解析了如何使用ADS仿真设计高回退Doherty功放,特别针对1:2非对称架构进行深入探讨。通过优化功率分配比、峰值管开启阈值等关键参数,显著提升功放在9dB回退点的效率至75%以上,适用于LTE等高PAPR信号场景。文章还提供了ADS仿真环境搭建、参数优化及工程化设计的实用技巧。

weixin_33743248的博客 456

C语言学习记录(13)链表实验题目 && 有序链表

C语言学习记录 前言 一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流! 不当之处请斧正!在此感谢!这边就先从学习C语言写起,自己本身对程序语言方面不擅长,所以决定对此从基础开始学习, 大牛们对此文可以忽略! 学校OJ实验 链表实验题目 Problem Description 链表结点的结构定义为: struct node{ int ...

Hyena__的博客 1734

【Claude】Claude Code 子代理(Subagents)完全指南:多 AI 编排与并行任务管理

子代理是在独立上下文窗口特性主代理子代理上下文窗口与你对话的主上下文完全独立的上下文工具权限拥有所有工具可自定义限制生命周期整个会话完成任务后结束通信方式直接对话结果返回给主代理模型继承主会话设置可指定不同模型你可以创建专属子代理,指定模型、工具权限和系统提示。在对话中,Claude 会根据任务自动选择合适的子代理。

博客 5538

STM32芯片解锁读写保护:更改Option Byte [Error已解决]

解锁读保护:STLink更改Option Byte 变Level从1变为0,点击Apply即可。(程序执行读保护,其实是将Level从0变为1) 默认情况下该保护功能是不开启的,若要开启该功能,需要改写内部FLASH选项字节(Option Bytes)中的配置。 RDP读保护级别 级别0,无保护, 级别1,使能读保护, 这种保护下,若使用调试功能(使用下载器、仿真器)或者从内部SRAM自举时都不能对内部FLASH及备份SRAM作任何访问(读写、擦除都被禁止); 当芯片处于级别1的时候,可以把选项字节

HowieXue 薛永浩的博客 2万+

C语言的链表插入

链表插入操作是链表数据结构的核心操作之一,通过学习不同类型的插入操作,我们可以更好地理解链表的特性及其在实际开发中的应用。尽管链表相较于数组具有一些优势,但在具体使用时,需要结合具体场景来判断选择何种数据结构更为合适。理解其基本操作和优缺点,将对我们在计算机科学的学习和研究有着非常重要的帮助。希望本文对你理解C语言中的链表插入操作有所帮助。如需进一步探讨,可以深入链表的其他操作,如删除、查找等。

2501_91173323的博客 858

YOLOv11改进 | 注意力篇 | YOLOv11引入CBAM注意力机制

我们的实验表明各种模型的分类和检测性能得到了一致的改进,证明了 CBAM 的广泛适用性。简单介绍:CBAM的主要思想是通过关注重要的特征并抑制不必要的特征来增强网络的表示能力。模块首先应用通道注意力,关注"重要的"特征,然后应用空间注意力,关注这些特征的"重要位置"。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~

tsg6698的博客 2万+

【C语言篇】链表的基本操作-创建链表、插入节点、删除节点、打印链表

输入文件的第一行有两个整数n,q,分别表示初始链表中元素个数和对链表操作的次数,第二行有n个整数,表示初始链表的元素,保证这些数字不超过int表示的取值范围。接下来有q行数字,以1开头表示插入操作,以2开头表示删除操作。输出有1行,表示操作后的链表的所有结点的数据,数字间用一个半角空格间隔。💫3,在删除、插入函数中处理结点时要格外小心两个指针q和p循环结束后所指向的位置。2 a表示将链表中第a个元素删除,如果a大于当时链表长度,则忽略此操作。1 a b表示在第a个元素后面插入值为b的元素,

Yaoyao2024的博客 6162

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C语言学习笔记——链表

C语言学习笔记 链表 创建链表 链表是什么: 其实是多个结构体,里面存有数据和指针,其中上一个结构体的指针成员指向了下一个结构体,如此往复,就可以实现链表。 如果我们想在链表后面加入新的内容,只需要再创建(malloc)一个节点,并使之前尾部的节点中的指针指向他。 链表可以分为两种:有空头和无空头,有空头也就是第一个节点使不储存数据的,其他节点都接在他的后面,无空头的链表第一个节点存有数据...

qq_39079631的博客 829

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

三、链表 c语言

链表是一种,由一系列结点组成,每个结点包含数据和指向下一个结点的指针。链表中的元素在内存中不必顺序排列,而是通过指针相互连接,在堆内存中随机分布。① 线性数据结构:数组、链表、栈、队列等;② 非线性数据结构:树、散列表、堆、图等;

2401_87365692的博客 1630

IEM模型,地表粗糙度模拟

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

对链表进行插入排序(C语言实现)

一、题目要求 对链表进行插入排序。 插入排序的动画演示如下。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 重复直到所有输入数据插入完为止。 示例 1: 输入: 4->2->1->3 输出: 1-

唐学长的博客 1万+

C语言学习之链表

双向链表是一种链表结构,其中每个节点不仅包含指向下一个节点的指针 next,还包含指向前一个节点的指针 prev。链表的删除操作是指从链表中移除一个节点,并正确地更新链表结构,以确保链表的连续性。删除节点时,我们需要找到目标节点,并将其前一个节点的指针指向目标节点的下一个节点。查找的过程就是从链表头节点开始,逐个访问节点的数据,并与目标数据进行比较,直到找到相匹配的节点或到达链表的末尾。在双向链表中删除节点时,需要注意更新被删除节点的前后节点的指针。双向链表的插入操作根据插入位置不同,头部、尾部、中间。

zhaozhaoxiyang的博客 1511

C语言单链表插入

C: 定义一个节点 typedef struct NODE { struct NODE *link; int value; }Node; 向有序链表中插入节点: /************************************ ** 1、找到应该插入新节点的位置 ** ** 2、为新节点分配内存(创建新节点)** ** 3、把链表连起来 ** ***************************

lh315936716的博客 6298

链表插入(C语言)

链表插入:头插、尾插、中间插

2401_87345428的博客 1486
上一篇: C语言学习笔记—链表(二)链表的静态添加及动态遍历
下一篇: C语言学习笔记—链表(四)链表的删除
Akzeptieren
博客等级 码龄8年 65粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值