学习c语言的链表的概念、操作(另一篇链表的笔记在其他的栏目先看这个)

在学习Linux之间我们先插入一下链表的知识

学习链表(一种数据结构思想)

链表和数组的区别和实现:

链表(链表是个好东西)

链表概念(什么是链表)?

链表就是数据结构->数据的存储思想

链表的每一项都是一个结构体

        说到数据存放,我们之前学过数组结构体,而且数组一开始就把大小确认了比如int arr[10],还有地址也都是连续的,因此我们需要对数组或者结构体进行增删改查的时候就会显得很不灵活,因为内存消耗很大所以我们有了链表的概念

Tips回顾:

数组的特点:每个元素的地址是连续的

                                                        链表的原理和解释图

链表的实现

t1是链表头  有点像数组首地址通过p++得到后面的元素

链表的动态遍历

添加上查找和计算链表元素个数的功能

这边定义一个found是很巧妙的,count 不断累加记录节点数,found 记录是否找到目标值

        使用 found 变量后,只需要在循环内部判断是否找到目标值,若找到就将 found 置为 1 ,循环结束后再根据 found 的值进行统一的输出判断,使代码逻辑更加简洁明了。

链表的从指定节点后方插入新节点

主要是insertBehindNum这段代码

因为链表有增删改查这些操作,所以这边我直接把链表的增删改查都写出来

这个代码里面包含了前插法(增),后插法(增),删除指定元素,改元素,查元素其中前插法和后插法

代码在这

#include <stdio.h>

struct Test

{

int data;

struct Test *next;

};

void printfInfo(struct Test *head)

{

struct Test *point;

point = head;

while(point !=NULL){

printf("%d ",point->data);

point =point->next;

}

putchar('\n');

}

int  printfInfo1(struct Test *head,int data)

{

int count = 0;

int found = 0;

struct Test *point;

point = head;

while(point !=NULL){

count++;

if((point->data) == data){

found=1;

}

point = point->next;

}

if(found==1){

printf("have\n");

}else{

printf("no\n");

}

return count;

}

struct Test * gaiNum(struct Test *head,int data,int newdata)

{

struct Test *p;

p = head;

while(p !=NULL){

if(p->data == data){

p->data=newdata;

}

p = p->next;

}

return head;

}

struct Test *insertBehindNum(struct Test *head,int data,struct Test *new)

{

struct Test *p;

p=head;

while(p != NULL){

if(p->data == data){

new->next= p->next;

p->next  = new;

return head;

}

    p = p->next;

}

return head;

}

struct Test *insertbeforeNum(struct Test *head,int data,struct Test *new)

{

struct Test *p;

p=head;

if(p->data == data){

new->next=p;

    printf("insert ok\n");

return new;

}

while(p->next != NULL){

if(p->next->data==data){

new->next = p->next;

  p->next = new;

  printf("insert ok\n");

  return head;

}

p = p->next;

}

return head;

}

struct Test *deleteNum(struct Test *head,int data)

{

struct Test *p;

p=head;

if(p->data == data){

p=p->next;

printf("delete ok\n");

return head;

}

while(p->next != NULL){

if(p->next->data == data){

p->next = p->next->next;

printf("delete ok~\n");

return head;

}

p = p->next;

}

return head;

}

int main()

{

 int count;

 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 new={100,NULL};

 struct Test new2={999,NULL};

 struct Test new3={888,NULL};

 t1.next=&t2;

 t2.next=&t3;

 t3.next=&t4;

 printfInfo(&t1);

 count = printfInfo1(&t1,4);//查

 printf("链表元素个数为%d\n",count);

 head=insertBehindNum(&t1,3,&new);//在后方插入

 printfInfo(head);

 head = insertbeforeNum(&t1,3,&new2);//在前方插入

 printfInfo(head);

 head = insertbeforeNum(&t1,1,&new3);//在前方插入

 printfInfo(head);

 head = deleteNum(&t1,1);//删除

 printfInfo(head);

 head = gaiNum(&t1,1,40);//改

 printfInfo(head);

 return 0;

}

        看完之后是这样的我们是初学者那么我们就不应该考虑链表的效率问题,我们要先理解链表的含义和和操作原理,那么我们之后有更好的基础了之后,就可以去考虑链表的效率问题了。

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

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

相关文章

NVM完全指南:安装、配置与最佳实践

发布于 2025年5月7日 • 阅读时间&#xff1a;10分钟 &#x1f4a1; TL;DR: 本文详细介绍了如何完整卸载旧版Node.js&#xff0c;安装NVM&#xff0c;配置阿里云镜像源&#xff0c;以及设置node_global与node_cache目录&#xff0c;打造高效Node.js开发环境。 &#x1f4cb; 目…

转换算子和行动算子的区别

转换算子和行动算子主要是在分布式计算框架&#xff08;如 Apache Spark&#xff09;里常用的概念&#xff0c;它们在功能、执行机制、返回结果等方面存在明显区别&#xff0c;以下为你详细介绍&#xff1a; 定义与功能 返回结果 如何在使用转换算子和行动算子时避免出现内存溢…

Windows命令行软件管理器:Chocolatey

文章目录 Windows命令行软件管理器&#xff1a;Chocolatey1.Chocolatey使用1.1 安装1.2 常用命令1.3 使用流程 2.常用shell命令汇总 Windows命令行软件管理器&#xff1a;Chocolatey Chocolatey 是一款强大的 Windows 命令行软件管理器&#xff0c;目前在 GitHub 上已斩获 10.…

MySQL 8.0 OCP(1Z0-908)英文题库(11-20)

目录 第11题题目分析正确答案 第12题题目分析正确答案 第13题题目分析正确答案 第14题题目分析正确答案 第15题题目分析正确答案 第16题题目分析正确答案 第17题题目分析正确答案&#xff1a; 第18题题目分析正确答案 第19题题目分析正确答案 第20题题目分析正确答案 第11题 W…

mac 使用 Docker 安装向量数据库Milvus独立版的保姆级别教程

Milvus 特点&#xff1a;开源的云原生向量数据库&#xff0c;支持多种索引类型和GPU加速&#xff0c;能够在亿级向量规模下实现低延迟高吞吐。具有灵活的部署选项和强大的社区支持。 适用场景&#xff1a;适合处理超大规模数据和高性能需求的应用&#xff0c;如图像搜索、推荐…

一款独立于游戏外的键盘源按键辅助工具他来了

一款独立于游戏外的键盘源按键辅助工具 一&#xff01;不需要安装&#xff0c;下载即用 二&#xff01;只要熟悉hekili体系 三&#xff01;略懂wa定制 四&#xff01;知道如何循环并且会自行模拟 五&#xff01;会simc最好 直接就上手了&#xff01; 我们的不是一键宏&…

python学生作业提交管理系统-在线作业提交系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…

Spring Boot + Vue 实现在线视频教育平台

一、项目技术选型 前端技术&#xff1a; HTML CSS JavaScript Vue.js 前端框架 后端技术&#xff1a; Spring Boot 轻量级后端框架 MyBatis 持久层框架 数据库&#xff1a; MySQL 5.x / 8.0 开发环境&#xff1a; IDE&#xff1a;Eclipse / IntelliJ IDEA JDK&…

引文索引数据库在科研中的应用

如何利用引文索引数据库高效检索、分析研究论文&#xff0c;发现高水平论文&#xff0c;锁定特定领域的经典文献&#xff1f;如何跟踪最新研究进展&#xff1f; 回放链接 image.png image.png image.png image.png image.png image.png image.png image.png image.png image.pn…

《供应链网络攻击的风险与防范》

中国古语有云&#xff1a;“千里之堤&#xff0c;溃于蚁穴。”供应链攻击正是利用这种系统性弱点发起攻势。近年来&#xff0c;随着国内数字化转型加速&#xff0c;供应链安全问题频发。从某盟删库事件到某头部物流企业数据泄露&#xff0c;从某国产工业软件遭恶意代码植入到某…

ETL介绍及kettle等工具学习

ETL介绍及kettle等工具学习 1. 什么是ETL&#xff1f; ETL&#xff08;Extract, Transform, Load&#xff09;是数据集成领域的核心流程&#xff0c;用于将数据从多个分散的源系统中抽取、清洗、转换后加载到目标数据仓库或数据湖中&#xff0c;以支持分析、报表和决策。其核…

图形渲染+事件处理最终版

基于之前做的项目图形移动处理-CSDN博客添加了相机&#xff0c;透视投影&#xff0c;鼠标控制图形旋转。虽然个人感觉这个项目用的是一个二维的三角形&#xff0c;给他加透视投影和相机意义不大&#xff0c;因为透视投影是近大远小&#xff0c;我这个程序设置了放大缩小的限制&…

G口大带宽服务器线路怎么选

G口大带宽服务器线路选择指南 ​​一、线路类型与特点​​ ​​单线&#xff08;电信/联通/移动&#xff09;​​ ​​优势​​&#xff1a;带宽独享、价格低、延迟稳定&#xff0c;适合单一运营商用户集中场景。​​劣势​​&#xff1a;跨运营商访问延迟高&#xff08;如电信…

HTML10:iframe内联框架

iframe内部框架 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>内联框架学习</title> </head> <body> <!--iframe内联框架 src:地址 width-height:高度宽度 --> <iframe…

基于 Spring Boot 瑞吉外卖系统开发(十一)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;十一&#xff09; 菜品启售和停售 “批量启售”、“批量停售”、操作列的售卖状态绑定单击事件&#xff0c;触发单击事件时&#xff0c;最终携带需要修改售卖状态的菜品id以post请求方式向“/dish/status/{params.status}”发送…

springboot war包tomcat中运行报错,启动过滤器异常,一个或多个筛选器启动失败。

错误信息&#xff1a; "level": "ERROR", "thread": "localhost-startStop-1", "class": "o.a.c.c.C.[.[localhost].[/Crmeb-admin]", …

Cursor —— AI编辑器 使用详解

Cursor - The AI Code Editor 一、Cursor 是什么&#xff1f; Cursor 是一款优秀的AI代码编辑器&#xff0c;它内置了 Deepseek-R1、GPT-4、Claude等 AI 模型。 简单说&#xff0c;就是&#xff1a;Cursor VS Code 编辑器 AI 大模型 Cursor 功能特性&#xff08;代码补全、…

在Excel图表添加辅助线

前言&#xff1a;博主最近是有点忙&#xff0c;好吧&#xff0c;就是很忙&#xff0c;但我也不想水文章的&#xff0c;每一篇文章都是本人精心编辑&#xff0c;觉得对大家有用才发布的。而且同一个类型的文章&#xff0c;我基本都会写在同一篇中方便大家集中获取。本来这篇文章…

2025.5.8总结(中期审视)

今日记录&#xff1a; 晚上&#xff0c;主管找我聊了关于中期绩效审视的问题。 首先就是让我汇报上半年的工作进展&#xff0c;汇报完后&#xff0c;感觉体现不出自己的工作量&#xff0c;这确实考验个人的汇报能力。 汇报完工作后&#xff0c;主管开始给我提了一些建设性的…

Excel模版下载文件导入

工作中经常遇到Excel模板下载&#xff0c;然后填好后再导入的情况&#xff0c;简单记录下&#xff0c;方便下次使用 Excel模版下载&#xff08;返回Base64&#xff09; 模板文件存放位置 import java.util.Base64; import org.apache.commons.io.IOUtils; import org.sprin…