作业Day4: 链表函数封装 ; 思维导图

目录

作业:实现链表剩下的操作:

任意位置删除

按位置修改

按值查找返回地址

反转

销毁

运行结果

思维导图


作业:实现链表剩下的操作:

        1>任意位置删除

        2>按位置修改

        3>按值查找返回地址

        4>反转

        5>销毁

任意位置删除

思路:

遍历到将要删除的位置的        前一个;

链接"本空间"与"下下个空间";

释放下一个空间,并置空指针

代码:

/*
函数功能:删除指定位置数据
输入参数:链表(头节点);删除位置
返回值:无
*/
void delData(linkListPtr H,int i)
{
    //判断地址是否合法
    //判断是否为空
    //判断删除位置是否合理:针对用户1~H->len
    if(NULL==H||ifEmpty(H)||i<=0||i>H->len)
    {
        printf("地址或插入位置不合法!\n");
        return;
    }
    //遍历到将要删除的位置的 前一个
    linkListPtr temp=H;
    i--;
    while(i--)
    {
        temp=temp->next;
    }
    //创建临时指针:指向将被"删除"的空间地址
    linkListPtr temp2=temp;
    temp2=temp2->next;
    //链接:将本节点指向下一个节点的下一个节点
    temp->next=temp->next->next;
    //释放内存 并指针置NULL
    free(temp2);
    temp2=NULL;
    //链表长度-1
    H->len--;
}

按位置修改

思路:略

代码

/*
函数功能:数据修改
参数列表:链表地址;修改位置,修改数据
返回值无
*/
void cortData(linkListPtr H,int i,DataType e)
{
    //判断地址是否合法
    //判断修改位置是否合理:针对用户1~H->len
    if(NULL==H||i<=0||i>H->len)
    {
        printf("地址或插入位置不合法!\n");
        return;
    }

    //遍历到将要修改的位置
    linkListPtr temp=H;
    while(i--)
    {
        temp=temp->next;
    }
    temp->data=e;
}

按值查找返回地址

思路:略

代码

//按值查找,返回地址
linkListPtr findData(linkListPtr H,DataType e)
{
    //判断是否合法
    //判断是否为空
    if(NULL==H||ifEmpty(H))
    {
        printf("地址或不合法!\n");
        return NULL;
    }
    linkListPtr temp=H;
    for(int i=0;i<H->len;i++)
    {
        temp=temp->next;
        if(temp->data==e)
        {
            return temp;
        }
    }
    return NULL;
}

反转

思路:

每次循环使倒数第一个、倒数第二个、倒数第三个......回头指向;

使原来的头节点指向原来的最后一位数据

使原来的首个节点置NULL

代码

void trap(linkListPtr H)
{
    //判断地址是否合法
    //判断是否为空
    if(NULL==H||ifEmpty(H))
    {
        printf("地址不合法或者链表数据为空!\n");
        return;
    }
    //创建(预备)头地址:指向最后一个元素;
    linkListPtr tempH=H;
    for(int i=0;i<H->len;i++)//定位到最后一个数据
    {
        //使(预备)头指针指向最后一个节点
        tempH=tempH->next;
    }
    
    //思路:多次循环:每次分别使最后一个、倒数第二个......回指
    linkListPtr temp=H;
    for(int i=0;i<H->len-1;i++)//决定循环总轮数
    {
        temp=H;
        for(int j=0;j<H->len-1-i;j++)//每次循环向后遍历的次数
        {
            temp=temp->next;
        }
        //回指:使下一个节点指向本节点
        temp->next->next=temp;
    }
    //当前temp所代表节点变为最后一个节点:需置空
    temp->next=NULL;
    //更新头地址
    H->next=tempH;
 
}

思路:

遍历链表:在遍历过程中,依次使遍历到的元素改变朝向:

销毁

思路

检查传入地址是否合法

释放传入地址所指向的空间

释放后,指针置空

代码

//销毁链表
void freeList(linkListPtr *HH)
{
    //判断地址是否合法
    if(NULL==*HH)
    {
        printf("地址不合法!\n");
        return;
    }
    //释放指针指向的堆区空间
    free(*HH);
    //修改传入地址的指向:将传入的指针置空
    *HH=NULL;
    //本指针也置空
    HH=NULL;
    printf("链表已销毁!\n");
}

修正:

        链表地址并非连续;free不能一次性释放所有节点

//销毁链表
void freeList(linkListPtr *HH)
{
    //判断地址是否合法
    if(NULL==*HH)
    {
        printf("地址不合法!\n");
        return;
    }
    //思路:循环遍历:每次销毁最后一个
    linkListPtr temp=*HH;
    while((*HH)->next!=NULL)//循环条件:头指针指向的空间不为NULL
    {
        temp=*HH;
        while(temp->next->next!=NULL)//定位到最后一个节点   的前一个节点
        {
            temp=temp->next;
        }
        //释放指针指向的堆区空间(节点)
        free(temp->next);
        //本节点变为最后一个节点:指向置NULL
        temp->next=NULL;
    }
    //释放头节点
    free(*HH);
    //修改传入的地址指向:置NULL
    *HH=NULL;
    //本指针也置NULL
    HH=NULL;
    printf("链表已销毁!\n");
}

运行结果

思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/940180.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker:Dockerfile(补充四)

这里写目录标题 1. Dockerfile常见指令1.1 DockerFile例子 2. 一些其他命令 1. Dockerfile常见指令 简单的dockerFile文件 FROM openjdk:17LABEL authorleifengyangCOPY app.jar /app.jarEXPOSE 8080ENTRYPOINT ["java","-jar","/app.jar"]# 使…

jmeter中的prev对象

在jmeter中通过beanshell、JSR223的各种处理器编写脚本时&#xff0c;都会看到页面上有这样的说明 这些ctx、vars、props、OUT、sampler、prev等等都是可以直接在脚本中使用的对象&#xff0c;由jmeter抛出 今天主要讲一下prev的使用 SampleResult prev jmctx.getPreviousRe…

数据库管理系统——数据库设计

摘要&#xff1a;本博客讲解了数据库管理系统中的数据库设计相关内容&#xff0c;包括概念结构设计&#xff1a;E-R模型&#xff0c;逻辑结构设计&#xff1a;E-R模型到关系设计等内容。 目录 一、数据库设计和数据模型 1.1.数据库设计概述 1. 2.数据库结构概述 1.3.数据库…

Mac配置 Node镜像源的时候报错解决办法

在Mac电脑中配置国内镜像源的时候报错,提示权限问题,无法写入配置文件。本文提供解决方法,青测有效。 一、原因分析 遇到的错误是由于 .npm 目录下的文件被 root 用户所拥有,导致当前用户无法写入相关配置文件。 二、解决办法 在终端输入以下命令,输入管理员密码即可。 su…

【原生js案例】前端封装ajax请求及node连接 MySQL获取真实数据

上篇文章&#xff0c;我们封装了ajax方法来请求后端数据&#xff0c;这篇文章将介绍如何使用 Node.js 来连接 MySQL&#xff0c;并对数据库进行操作。 实现效果 代码实现 后端接口处理 const express require("express"); const connection require("../da…

使用FakeSMTP创建本地SMTP服务器接收邮件具体实现。

以下代码来自Let’s Go further节选。具体说明均为作者本人理解。 编辑邮件模版 主要包含三个template: subject&#xff1a;主题plainBody&#xff1a; 纯文本正文htmlBody&#xff1a;超文本语言正文 {{define "subject"}}Welcome to Greenlight!{{end}} {{def…

在Linux系统安装配置 MySQL 和 hive,hive配置为远程模式

前提&#xff1a;已安装配置好了Hadoop环境&#xff0c;因为hive的底层是Hadoop 1 Mysql安装 搜索Centos7自带的mariadb rpm -qa|grep mariadb 卸载mariadb rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps 再搜索一次看看是否还存在 rpm -qa|grep mariadb 安装mysql 创…

【JetPack】Room数据库笔记

Room数据库笔记 ORM框架&#xff1a;对齐数据库数据结构与面向对象数据结构之间的关系&#xff0c;使开发编程只考虑面向对象不需要考虑数据库的结构 Entity : 数据实体&#xff0c;对应数据库中的表 <完成面向对象与数据库表结构的映射> 注解&#xff1a; 类添加注解…

OpenHarmony-4.HDI 框架

HDI 框架 1.HDI介绍 HDI&#xff08;Hardware Device Interface&#xff0c;硬件设备接口&#xff09;是HDF驱动框架为开发者提供的硬件规范化描述性接口&#xff0c;位于基础系统服务层和设备驱动层之间&#xff0c;是连通驱动程序和系统服务进行数据流通的桥梁&#xff0c;是…

AI Agent与MEME:技术与文化融合驱动Web3创新

AI Agent如何引领Web3新时代&#xff1f; 随着Web3与区块链技术的迅速发展&#xff0c;AI Agent作为人工智能与区块链的交汇点&#xff0c;正在逐步成为推动去中心化生态的重要力量。同时&#xff0c;MEME文化凭借其强大的社区驱动力和文化渗透力&#xff0c;在链上生态中扮演着…

接口测试-Fidder及jmeter使用

一、接口测试的基础 1.接口的含义 也叫做API&#xff0c;是一组定义、程序及协议的集合&#xff0c;提供访问一组例程的能力&#xff0c;无需访问源码获理解内部工作细节 2.接口的分类 代码内部的接口&#xff0c;程序模块间的接口&#xff0c;对于程序接口测试&#xff0c;需…

【数据集】医学常见9种皮肤疾病检测数据集11294张YOLO+VOC格式(已增强)

数据集格式&#xff1a;VOC格式YOLO格式 压缩包内含&#xff1a;3个文件夹&#xff0c;分别存储图片、xml、txt文件 JPEGImages文件夹中jpg图片总计&#xff1a;11294 Annotations文件夹中xml文件总计&#xff1a;11294 labels文件夹中txt文件总计&#xff1a;11294 标签种类数…

JavaSE——绘图入门

一、Java绘图坐标体系 下图说明了Java坐标系&#xff0c;坐标原地位于左上角&#xff0c;以像素为单位。在Java坐标系中&#xff0c;第一个是x坐标&#xff0c;表示当前位置为水平方向&#xff0c;距离坐标原点x个像素&#xff1b;第二个是y坐标&#xff0c;表示当前位置为垂直…

探索 Seaborn Palette 的奥秘:为数据可视化增色添彩

一、引言 在数据科学的世界里&#xff0c;视觉传达是不可或缺的一环。一个好的数据可视化不仅能传递信息&#xff0c;还能引发共鸣。Seaborn 是 Python 中一款广受欢迎的可视化库&#xff0c;而它的调色板&#xff08;palette&#xff09;功能&#xff0c;则为我们提供了调配绚…

Sigrity System Explorer Snip Via Pattern From Layout模式从其它设计中截取过孔模型和仿真分析操作指导

Sigrity System Explorer Snip Via Pattern From Layout模式从其它设计中截取过孔模型和仿真分析操作指导 Sigrity System Explorer Snip Via Pattern From Layout模式支持从其它设计中截取过孔模型用于仿真分析,同样以差分模板为例 具体操作如下 双击打开System Explorer软件…

数据分析实战—玻璃类别分类

1.实战内容 (1) 加载玻璃类别数据集&#xff0c;划分训练集、测试集 import pandas as pd import numpy as np pd.set_option(display.max_columns, None) pd.set_option(display.max_rows, None) # 读取数据集 glass pd.read_csv(glass.csv, encodinggbk, headerNone) glas…

Hive是什么,Hive介绍

官方网站&#xff1a;Apache Hive Hive是一个基于Hadoop的数据仓库工具&#xff0c;主要用于处理和查询存储在HDSF上的大规模数据‌。Hive通过将结构化的数据文件映射为数据库表&#xff0c;并提供类SQL的查询功能&#xff0c;使得用户可以使用SQL语句来执行复杂的​MapReduce任…

GIN

gin是什么 Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API&#xff0c;但性能比 Martini 快 40 倍。如果你需要极好的性能&#xff0c;使用 Gin 吧。 特点&#xff1a;gin是golang的net/http库封装的web框架&#xff0c;api友好&#xff0c;注…

初始Python篇(13)—— 模块以及Python中常用的内置模块

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; Python 目录 模块的概念 模块的导入 包的概念以及使用 主程序运行 Python中常用的内置模块 random模块 time模块 datetime模块 …

时间序列异常值检测方法

文章目录 一、基于统计的方法1.1、标准差1.2、箱线图1.3、Z-Score法 二、基于机器学习算法的方法2.1、K-NN2.2、孤立森林 三、基于密度的方法3.1、LOF3.2、DBSCAN密度聚类 时间序列相关参考文章&#xff1a; 时间序列预测算法—ARIMA 时间序列预测算法—Prophet 时间序列分类任…