C语言不带头结点链表创建,删除,插入总结

2023-05-16

一、创建链表

1、第一种创建链表的方法,注意对比和第二种创建链表的细微之处,

typedef struct mynode
{
        int num;
        float score;
        struct mynode * next;
}Node,* Pnode;
Pnode createList()
{
        Pnode head,currNode,tail;
        int num;
        float score;
        printf("input a number\n");
        scanf("%d",&num);
        head=NULL;
        tail=NULL;
        while(num!=0)
        {
                printf("input a score:\n");
                scanf("%f",&score);
                currNode=(Pnode)malloc(sizeof(Node));
                currNode->num=num;
                currNode->score=score;
                if(head==NULL) head=currNode;
                if(tail!=NULL) tail->next=currNode;
                tail=currNode;
                printf("input a num:\n");
                scanf("%d",&num);
        }
        tail->next=NULL;
        return head;

}

2、第二种创建链表的方法

typedef struct mynode
{
        int num;
        float score;
        struct mynode * next;
}Node,* Pnode;
void createList(Pnode * node)
{
        Pnode currNode,tail;
        int num;
        float score;
        printf("input a number\n");
        scanf("%d",&num);
        head=NULL;
        tail=NULL;
        while(num!=0)
        {
                printf("input a score:\n");
                scanf("%f",&score);
                currNode=(Pnode)malloc(sizeof(Node));
                currNode->num=num;
                currNode->score=score;
                if(head==NULL) *head=currNode;//直接赋值
                if(tail!=NULL) tail->next=currNode;
                tail=currNode;
                printf("input a num:\n");
                scanf("%d",&num);
        }
        tail->next=NULL;
        return;

}

第一种与第二种的区别之处在于,第一种是通过返回头指针的方法,第二种是通过传递二级指针的方法,在函数体内直接给指针赋值的方法来做的。思考第一种方法通过传递一级指针可以吗?? 不可以的,具体可以看我博客中的C语言一级指针和二级指针的区别。

二、遍历指针比较简单就不记录了

三、插入指针以及删除指针

单向链表插入指针和删除指针的核心点就是找到要插入位置和删除指针位置的前一个指针,具体是因为我们要前一个指针的next然后执行插入或者删除操作。

插入链表的编程中的四种情况:

1、插入的链表为空

2、要插入的元素的位置在链表中找不到,比如上边我们新建立的链表,我们要按照num的顺序插入,假如之前的链表是按照num的顺序的。

3、插入的元素位于头

4、插入的元素位于中间的任意一个位置

删除链表元素的四种情况:

1、要删除的元素找不到

2、要删除的元素在头部

3、要删除的元素位于中间的任何一个位置

4、要删除的链表为空,则不删除,直接退出.

下边编程实现,插入操作

Pnode insertNode(Pnode head,int num,float score)
{
        Pnode Prenode,Currnode=head;
        //新建节点
        Pnode Newnode=(Pnode)malloc(sizeof(Node));
        Newnode->num=num;
        Newnode->score=score;
        if(head==NULL)//第一种情况
        {
                head=Newnode;
        }else//第2,3,4中情况需要查找,这里就是出现的难点,要记录要插入的前一个节点      
        {
                while(Currnode!=NULL && Currnode->num<num)
                {
                        Prenode=Currnode;//前一个指针
                        Currnode=Currnode->next;
                }
                //区分找没找到
                if(Currnode==NULL)
                {
                        //没找到插入最后一个
                        Prenode->next=Newnode;
                        Newnode->next=NULL;
                }else
                {
                        //找到了
                        if(head==Currnode)
                        {
                                head=Newnode;
                        }else
                        {
                                Prenode->next=Newnode;
                        }
                        Newnode->next=Currnode;

                }

        }
        return head;
}

测试效果,成功插入

 测试代码下载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言不带头结点链表创建,删除,插入总结 的相关文章

  • 2016年终总结

    关键点 xff1a 程序员修炼之道Java编程思想 xff08 Java并发 异常处理 xff09 代码大全2Bat批处理Shell编程正则表达式Shader之初体验Unity5 x资源打包和加载Android单机游戏 xff0c 医疗项目
  • 嵌入式debian没有lsusb命令解决

    问题 bash lsusb command not found 解决
  • Postman抓包教程

    目录 什么是抓包 xff1f 如何使用 Postman 进行抓包 查看历史抓包数据 使用抓包数据进行接口测试和开发 抓包技巧和注意事项 什么是抓包 xff1f 在计算机网络中 xff0c 抓包是指捕获网络流量的过程 抓包工具可以截获进出计算
  • Cmakelists 使用 gcc/g++

    转载 https blog csdn net afei article details 81201039 常用变量 预定义变量 PROJECT SOURCE DIR xff1a 工程的根目录 PROJECT BINARY DIR xff1a
  • ROS 环境配置问题

    如果 roslaunch beginner tutorials turtlemimic launch 发现 turtlemimic launch is neither a launch file in package beginner tu
  • getdate()函数

    定义和用法 getdate 函数取得日期 xff0f 时间信息 语法 getdate timestamp 参数 描述 timestamp 可选 规定 Unix 时间格式中的时间 说明 返回一个根据 timestamp 得出的包含有日期信息的
  • linux系统的嵌入式设备调试422串口

    1 登陆linux系统 xff0c 查看当前可用的设备 xff0c 在终端输入 xff1a dmesg grep ttyS 例如会显示如下 xff0c 当前ttyS0可用 2 可先使用linux系统中的串口调试工具 cutecom 检查线路
  • Windows核心编程之邮槽实现进程间通信

    邮槽是Windows系统提供的一种单向通信的机制 即进程中的一方只能写入或读取数据 xff0c 而另一方则只能读取或写入数据 通过邮槽 xff0c 用户可以实现一对多或跨网络的进程之间的通信 但是 xff0c 邮槽能传输的数据非常小 xff
  • 图像连通域分析

    转自 xff1a https blog csdn net tiandijun article details 51279643 xff0c 转载仅为方便学习 一 前言 二值图像的图像的亮度值只有两个状态 xff1a 黑 0 和白 255 二
  • C++ wchar_t *和char * 互转

    转自 xff1a https blog csdn net lightspear article details 54695123 说道wchar t和char两个类型大家都不会陌生 wchar t xff1a 在windows下是Unico
  • element table中加入input、checkbox 数据无法正常渲染问题

    需要注意的是template 的 scope属性 xff0c 最重要的就是一定要加 lt div gt 标签 lt el table key 61 34 tableUpdate 34 data 61 34 list 34 gt lt el
  • mfc连接access数据库

    ADO Active Data Object xff0c 活动数据对象 实际上是一种基于 COM 组件对象模型 的自动化接口 IDispatch 技术 xff0c 并以 OLE DB 对象连接和镶入的数据库 为基础 xff0c 经过 OLE
  • STM32串口之空闲中断

    背景 在做Nbiot的一个路灯项目 xff0c NBiot模块一般都是串口接口 xff0c 使用AT指令集 xff0c 对接中国移动onenet平台 先用串口助手去测试 xff0c 流程测试OK之后需要在MCU上重新写一遍 一开始用的STC
  • C/C++程序的编译过程

    前言 C C 43 43 代码是如何变成一个可以在硬件上运行的程序的呢 xff0c 我们从一个简单的 34 Hello World 34 程序说起 Hello World编译 有个流传挺广的笑话 xff1a 某程序员对书法十分感兴趣 xff
  • OKR研发管理工具

    OKR是一种目标管理的工具和方法 xff0c 目前在互联网公司中被广泛应用 接下来 xff0c 我就从以下 6 方面对OKR进行拆解 xff1a OKR是什么 xff1f OKR起源OKR五大特点如何制定OKR xff1f OKR如何在团队
  • 车载监控平台(VIMS)介绍

    一 概述 VIMS 作为车辆的眼睛 xff0c 可直接观察车内用户的行为 xff0c 从而推断用户的需求 xff0c 借此可辅助其他产品 xff0c 如语音 导航 场景引擎等 xff0c 为提供用户贴心 周到的服 务 VIMS 包括 DMS
  • 智能驾驶汽车之自动泊车发展阶段

    一 背景介绍 xff1a 早期的自动泊车系统 xff0c 属于ADAS范畴 xff0c 就是我们常说的倒车雷达 xff0c 通过超声波雷达和360环视摄像头等传感器 xff0c 来辅助驾驶员进行泊车 xff0c 通过滴滴滴的提示音 xff0
  • ANDROID系统5层系统架构

    Android 是一套基于linux内核的开源系统 xff0c 主要应用于移动端 xff0c 在移动互联网时代 xff0c 应运而生 下面主要介绍一下整个Android 的5层系统架构 xff0c 如图自上而下 xff08 高层到底层 xf
  • 耳机降噪功能(ANC、ENC、CVC、DSP)

    被动式降噪也称物理降噪 xff0c 被动式降噪是指利用物理特性将外部噪声与耳朵隔绝开 xff0c 主要通过耳机的头梁设计得紧一些 耳罩腔体进行声学优化 耳罩内部放上吸声材料 等等来实现耳机的物理隔音 被动降噪对高频率声音 xff08 如人声

随机推荐

  • 智能化汽车3D ToF摄像头

    理想L9 xff08 理想ONE之后的第二款车 xff09 将搭载3D ToF传感器 xff0c 除了驾驶员眼睛注视和头部跟踪监控 xff0c 还将作为理想自研的深度学习 43 多模态三维空间交互技术的主要硬件载体 而此前 xff0c 大部
  • 汽车驾驶自动化分级L1~L5

    在 汽车驾驶自动化分级 里面 xff0c 自动驾驶的标准称呼是 驾驶自动化 xff0c 指车辆以自动的方式持续地执行部分或全部动态驾驶任务的行为 自动驾驶级别分级 基于驾驶自动化系统能够执行动态驾驶任务的程度 xff0c 驾驶自动化分成 0
  • 质量管理五大工具详解

    1 统计过程控制 xff08 SPC xff0c Statistical Process Control xff09 xff1b Statistical Process Control 是一种制造控制方法 xff0c 是将制造中的控制项目
  • 用pyinstaller打包python遇到的坑

    最近写了一个小程序 xff0c 用到了pandas xff0c matplotlib模块 xff0c 打包时出现各种问题 xff0c 总结下走过的坑 因为之前使用openpyxl写过一个更简单的程序 xff0c 仅用来读写excel xff
  • 8D报告组成部分

    8D问题解决法 xff08 Eight Disciplines Problem Solving xff0c 缩写 xff1a 8D xff09 也称为团队导向问题解决方法或8D report xff0c 是一个处理及解决问题的方法 xff0
  • 高通cDSP介绍汇总

    Qualcomm Hexagon Compute DSP cDSP 是高通平台上专门用来做通用计算的硬件加速单元 xff0c 与主机 CPU 相比 xff0c DSP 通常以较低的时钟速度运行 xff0c 并提供更多的并行指令级 这使得 D
  • PCB拼板方式

    Pcb拼板方式一般有三种 xff1a V割 V CUT 邮票孔以和空心连接条 PCB拼板方式 V割 V割 xff0c 又称V CUT xff0c 在规则板中使用较多 V割是在两个板子的连接处画一个槽 xff0c 只要将两个板子拼在一起 xf
  • 车联网名词缩写含义

    TSP xff1a Telematics Service Provider xff1b DSRC xff1a 专用短程通信技术是一种新型的技术 xff0c Dedicated Short RangeCommunication DSRC xf
  • 质量管理PPAP说明

    PPAP是英文Production Part Approval Process的缩写 xff0c 中文翻译为生产件批准程序 PPAP是TS16949质量管理体系五大工具之一 xff0c 用于汽车整车或零部件生产过程的质量管控 各种质量管理类
  • Vlookup最经典的10种用法

    该函数的语法规则如下 xff1a VLOOKUP lookup value table array col index num range lookup 参数 简单说明 输入数据类型 lookup value 要查找的值 数值 引用或文本字
  • 宝马项目化流程标准(BMW ABC flyer requirement)

    ABC flyer BMWQMT build phase requirement 宝马的项目流程标准叫做ABC flyer 也叫QMT build phase requirement 为什么叫这么名字 xff0c 是因为宝马项目的产品零件分
  • 数字无线广播(DAB、DRM)

    1 什么是数字广播 数字化技术指的是运用0和1两位数字编码 xff0c 通过电子计算机 光缆 通信卫星等设备 xff0c 来表达 传输和处理所有信息的技术 数字化技术一般包括 数字编码 数字压缩 数字传输 数字调制 与解调 等技术 所谓的数
  • 什么是IPD管理体系?

    集成产品开发 xff08 Integrated Product Development 简称IPD xff09 是一套产品开发的模式 理念与方法 源于美国PRTM公司出版的 产品及生命周期优化法 一书 最具有代表实践者有IBM和华为 IPD
  • 全球整车开发流程(GVDP)

    整车开发流程用于整车开发的管理控制 xff0c 其中换代开发 换型开发 年度改型开发和变型开发可以根据所开发产品的特点或资源环境需求 产品开发流程图 产品开发参考周期 如下 xff1a 1 平台项目 开发全新的车型平台 xff0c 采用全新
  • DataFrame 切片取值

    基本格式 xff1a dataframe 列名 1 取多列 列名要用中括号括起来 xff0c 所以下述命令 dataframe P4 profit rate P3PS P3NS 没问题 返回pandas core frame DataFra
  • APQP(advanced product quality planning先期产品质量策划)

    APQP xff08 advanced product quality planning先期产品质量策划 xff09 xff0c 圈子里面无论是做研发 做项目还是做SQE的都不陌生 xff0c 很多时候 xff0c 尤其是SQE会比较困惑
  • 8D和A3报告

    8D和3A报告 xff0c 他们都不仅仅是记录问题的一种文书 xff0c 而是解决问题的工具 A3发展于TPS xff08 Toyota Production system xff09 xff0c 可以用来解决问题 xff0c 沟通 xff
  • Ubuntu出现包依赖错误的解决方法

    大家在使用apt get安装软件时经常会出现这种包依赖错误 这主要是因为apt get的源中没有所要安装的package的依赖包 主要有以下两种解决方案 xff1a xff11 将CD加入Ubuntu的apt get源 参见我的另一篇博客
  • stm32 类型转换

    stm32怎么把uint8 t类型转换成int类型 可以使用强制类型转换 xff1a int n 61 int uint8 t 参考例子 xff1a include lt stdio h gt int main void uint8 t a
  • C语言不带头结点链表创建,删除,插入总结

    一 创建链表 1 第一种创建链表的方法 xff0c 注意对比和第二种创建链表的细微之处 xff0c typedef struct mynode int num float score struct mynode next Node Pnod