c语言-链表1

news2024/11/26 8:35:45

10 链表

一、链表是什么?

                --  数据的一种存储方式         -- 链式存储

(1)线性存储         -- 地址连续         -- 自动开辟,自动释放         -- 默认是线性存储

(2)链式存储         -- 地址不连续         -- 手动开辟,手动释放

二、链式存储所使用的常用函数

1、malloc

函数功能:开辟内存空间

函数头文件:#include<stdlib.h>

函数原型:void *malloc(size_t size);

函数参数:size -- 要开辟的空间大小

函数返回值:void *         -- 开辟的空间的地址         -- 任意类型    -- 方便强转成你需要的类型

注:因为返回值是任意类型,所以一定不要忘记强转!!!

2、perror

函数功能:打印某个函数的执行结果(错误信息)

函数头文件:#include<stdio.h>

函数原型:void perror(const char *s);

函数参数:

                s -- 字符串,函数名

        //因为参数是个字符串类型,所以函数名作为参数时,要用""引起来

函数返回值:无

3、memset

函数功能:初始化内存空间

函数头文件:#include<string.h>

函数原型:void *memset(void *s,int c,size_t n);

函数参数:
        s         -- 要初始化的空间地址
        c         -- 初始化的内容 -- 一般初始化为0
        n         -- 要初始化的空间大小

函数返回值:不用

4、bzero

函数功能:初始化内存空间为0

函数头文件:#include<strings.h>

函数原型:void bzero(void *s,size_t n);

函数参数:
        s         -- 要初始化的空间地址
        n         -- 要初始化的空间大小

函数返回值:无

4、free

函数功能:释放内存空间 --地址依然存在,但是不能够使用

函数头文件:#include<stdlib.h>

函数原型:void free(void *ptr);

函数参数:
                ptr -- 要释放的空间地址

函数返回值:无

三、链表的存储形式

alt text

1、链表是由多个节点组成的

alt text

2、节点的组成:

(1)保存数据                 -- 数据域

(2)保存下一个节点的地址                 -- 指针域

alt text

地址:默认都是首地址

alt text

四、链表操作

        tip: 在vscode中,按住ctrl的同时点击鼠标,就会产生超链接,进到其函数定义处或者是.h文件里。

                ctrl+F,有查询和替换的功能

1、创建节点

alt text

#include "create.h"

struct node *create()
{
    struct node *p = (struct node *)malloc(sizeof(struct node));  //要强转
    if(p == NULL){
        perror("malloc");   //参数是字符串,所以函数名要用""引起来
        return NULL;
    }

    memset(&p->pnext,0,sizeof(p->data));//将数据初始化为0,因为不能把指针初始化为0,所以指针和数据分开初始化
    p->pnext = NULL;
    printf("创建成功!\n");
    return p;
} 

2、新增链表

alt text

#include "add.h"

struct node *ADD(struct node *phead)
{
    struct node *pnew = create();
    printf("请输入你想增加的数据:\n");
    scanf("%d",&pnew->data);

    struct node *ptemp = phead;
    while(ptemp->pnext != NULL)
    {
        
        ptemp = ptemp->pnext;
        
    }
    ptemp->pnext = pnew;

    printf("添加成功!\n");
}

3、删除链表、修改、查询

alt text

(1)删除

#include "del.h"

void DEL(struct node *phead)
{
    if(phead->pnext == NULL)
    {
        printf("链表为空!\n");
        return;
    }
    int n;
    printf("请输入你想删除的数据:\n");
    scanf("%d",&n);

    struct node *ptemp = phead;


    while(ptemp->pnext !=NULL)
    {
        if(ptemp->pnext->data == n){
            struct node *pdel = ptemp->pnext;
            ptemp->pnext = ptemp->pnext->pnext;
            free(pdel);
            printf("删除成功!\n");
            return;
        }
        ptemp = ptemp->pnext;
    }
    printf("查无数据!\n");
}

(2)修改

#include "update.h"

void UPDATE(struct node *phead)
{
    if(phead->pnext == NULL)
    {
        printf("链表为空!\n");
        return;
    }
    int n;
    printf("请输入你想更新的数据:\n");
    scanf("%d",&n);

    struct node *ptemp = phead;


    while(ptemp->pnext !=NULL)
    {
        if(ptemp->pnext->data == n){
            printf("请输入您要修改的新数据:\n");
            scanf("%d",&ptemp->pnext->data);
            printf("更新成功!\n");
            return;
        }
        ptemp = ptemp->pnext;
    }
    printf("查无数据!\n");
}

(3)查询

#include "find.h"

void FIND(struct node *phead)
{
    if(phead->pnext == NULL)
    {
        printf("链表为空!\n");
        return;
    }
    int n;
    printf("请输入你想查询的数据:\n");
    scanf("%d",&n);

    struct node *ptemp = phead;


    while(ptemp->pnext !=NULL)
    {
        if(ptemp->pnext->data == n){
            printf("%d\n",ptemp->pnext->data);
            printf("查询成功!\n");
            return;
        }
        ptemp = ptemp->pnext;
    }
    printf("查无数据!\n");
}

4、遍历链表

alt text

#include "query.h"

void QUERY(struct node *phead)
{
    if(phead->pnext == NULL)
    {
        printf("链表为空!\n");
        return;
    }

    struct node *ptemp = phead->pnext;

    printf("链表存放的数据为:\n");
    while(ptemp!=NULL)
    {
        
        printf("%d\n",ptemp->data);
        ptemp = ptemp->pnext;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Git】git 从入门到实战系列(二)—— Git 介绍以及安装方法

文章目录 一、前言二、git 是什么三、版本控制系统是什么四、本地 vs 集中式 vs 分布式本地版本控制系统集中式版本控制系统分布式版本控制系统 五、安装 git 一、前言 本系列上一篇文章【Git】git 从入门到实战系列&#xff08;一&#xff09;—— Git 的诞生&#xff0c;Lin…

S硅谷-AI大模型实战训练

课程概述 AI大模型实战训练课程是一门专为有志于深入学习人工智能领域的学员设计的高级课程。本课程以当前人工智能领域的前沿技术——大模型为核心&#xff0c;通过理论与实践相结合的教学方式&#xff0c;培养学员在AI领域的实战能力。 课程目标 理解大模型的基本原理和架构。…

python爬虫之用scrapy下载中间件爬取网易新闻

python爬虫之用scrapy下载中间件爬取网易新闻 相关资源如下&#xff1a; 采用scrapy下载中间件爬取网易新闻国内、国际、数读、军事、航空五大板块新闻标题和内容 程序wangyi.py主代码&#xff1a; import scrapy from selenium import webdriver from selenium.webdriver.e…

PDF——分割pdf的10个工具

PDF分割器是一种可用于将PDF文档分割成更小的文档甚至单个页面的工具。分割 PDF 文档的主要原因是为了更容易共享。 但该过程的成功取决于您用于拆分 PDF 的工具。较简单的工具仅提供几个选项&#xff0c;可能并不适合所有类型的文档。我们将在本文中列出的 10 个最佳 PDF 分割…

gemini api 应用

安装 gemini Prerequisites To complete this quickstart locally, ensure that your development environment meets the following requirements: Python 3.9 An installation of jupyter to run the notebook. Install the Gemini API SDK The Python SDK for the Gemin…

手机在网时长查询接口如何对接?(一)

一、什么是手机在网时长查询接口&#xff1f; 传入手机号码&#xff0c;查询该手机号的在网时长&#xff0c;返回时间区间&#xff0c;支持携号转网号码查询。 二、手机在网时长查询接口适用于哪些场景&#xff1f; 例如&#xff1a;客户画像与精准营销 &#xff08;1&…

2个一键生成PPT目录的AI软件,轻松搞定PPT目录制作!

在各种信息都在努力争夺每个人的注意力的当下&#xff0c;一份精心制作的PPT可能成为决定成败的关键因素。而PPT目录&#xff0c;作为整个PPT演示文稿的门面和导航&#xff0c;其重要性往往被低估。 每个人的时间都是有限的&#xff0c;如果PPT目录没有让潜在观众Get到重点&am…

Vue常见问题(一)组件的使用

Failed to resolve component. 报错原因&#xff1a; 组件注册错误&#xff1a;我们在组件中使用了未注册的组件。在Vue中&#xff0c;组件必须先注册才能使用。 解决方法&#xff1a; 引用组件 &#xff1a; import ItemPage from "/components/itemPage.vue";…

Python NumPy数组维度和坐标轴的含义(ndarray demension axis)

Numpy是Python中科学计算的基础包&#xff0c;而其核心对象就是ndarray&#xff08;n维数组&#xff09;。关于如何创建n维度数组可以参考下面的文章&#xff1a; Python NumPy数组的创建方法 为了对ndarray进行数学处理&#xff0c;很多函数中都要指定一个叫做坐标轴的参数(a…

创建Apple开发者ID及ABM账号教程

申请苹果开发者账号和ABM &#xff08;Apple Business Manager&#xff09; 账号&#xff0c;以便在iPhone&#xff08;IOS平台&#xff09;上发布和管理汽应用。申请需要遵循一系列步骤。以下是详细的申请流程&#xff1a; 一、苹果开发者账号申请流程 1. 注册Apple ID - 访问…

打卡第34天------动态规划

我目前刷leetcode上的题的时候,不仅每天按照代码随想录的算法训练营的进度来刷题,也会自己开始在leetcode上刷题了,有些简单的题目,不用看题解就能做出来了,这也是一种进步呀。希望可以尽快找到下家工作单位,分秒必争,不浪费自己的一分一毫时间,与时间赛跑的过程呀。 一…

文心一言 VS 讯飞星火 VS chatgpt (319)-- 算法导论22.3 11题

十一、请解释有向图的一个结点u怎样才能成为深度优先树中的唯一结点&#xff0c;即使结点u同时有入边和出边。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 在一个有向图中&#xff0c;如果结点u在深度优先搜索&#xff08;DFS&#xff09;的过程中成为深度优…

【面试高频,必知必会】OpenGL渲染流程

&#x1f60e; 作者介绍&#xff1a;欢迎来到我的主页&#x1f448;&#xff0c;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff08;领取大厂面经等资料&#xff09;&#xff0c;欢迎加我的…

建议收藏:如何快速搭建一套仓库管理系统?

在工作中碰到仓库出错或因统计繁琐而加班到天亮都是常有的事情&#xff0c;工作效率真的很低。我相信这种的困境&#xff0c;不少同行朋友定能深有体会&#xff01; 实话说&#xff0c;我们公司之前也曾尝试斥巨资引入传统仓库管理系统&#xff0c;但效果却不尽人意。不仅操作…

面试中的算法 [ 持续更新中 ] 基于Python语言 如何判断链表有环

本文主要介绍了如何判断链表有环的问题&#xff0c;并进行了延伸&#xff1a; 如果链表有环如何求出环的长度&#xff0c;入环节点... ...嗯&#xff0c;点个赞总可以不&#xff01;&#xff01;&#xff01; 目录 5.1如何判断链表有环 5.1.1 有一个单向链表&#xff0c;链表…

动态规划之——背包DP(进阶篇)

文章目录 概要说明多重背包(朴素算法)模板例题思路code 多重背包&#xff08;二进制优化&#xff09;模板例题思路code 多重背包(队列优化)模板例题思路 混合背包模板例题思路code1code2 二维费用背包模板例题思路code 概要说明 本文讲多重背包、混合背包以及二维费用背包&…

汇聚行业实践,树立应用典范——《Serverless应用实践案例集》重磅发布

云计算已经成为数字时代的基础设施&#xff0c;借助其规模效应实现资源的集约化利用&#xff0c;最大化发挥计算的价值。Serverless进一步优化了云服务供给模式&#xff0c;简化了云上应用的构建方式&#xff0c;代表了云计算的重要发展趋势。 2024年7月24日&#xff0c;2024可…

【Java】二维码生成工具

一、引入相关依赖 <!-- 引入Hutool工具库&#xff0c;简化Java开发&#xff0c;提高开发效率 --> <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.5</version> </dependency&…

LearnOpenGL之摄像机

前序 AndroidLearnOpenGL是本博主自己实现的LearnOpenGL练习集合&#xff1a; Github地址&#xff1a;https://github.com/wangyongyao1989/AndroidLearnOpenGL 系列文章&#xff1a; 1、LearnOpenGL之入门基础 2、LearnOpenGL之3D显示 3、LearnOpenGL之摄像机 4、LearnOpenG…

UNION ALL 在单个子查询中排序不生效问题

业务场景 有两张表&#xff1a;表A&#xff0c;和表B&#xff0c;需要对A中数据按排序字段排序&#xff0c;对B表也按排序字段排序&#xff0c;然后返回并集。 写出如下SQL&#xff08;已简化&#xff09;&#xff1a; (select id from A order by sort desc) union all (se…