当前位置: 首页 > news >正文

C语言——单链表(增删改查)

C语言——单链表(增删改查)

一·链表一

#include<stdio.h>
#include<stdlib.h>
#include<string.h>typedef struct Test
{int data;struct  Test *next;
}Link;Link *head=NULL;Link* creatHead(Link* head);
void  AddLinkNode(Link* head,Link newnode);
void  printLinkNode(Link *head);
void  deleteLinkNode(Link* head,int data);
void  searchLink(Link* head,int data);
void  searchLink(Link* head,int data);
void  modifiLink(Link* head,int data,int newdata);int main(int argc,char** argv)
{   int i=0;Link tmp={0};int data=0;head=creatHead(head);for(i=0;i<5;i++){printf("输入第%d个节点的数据\n",i+1);scanf("%d",&tmp.data);AddLinkNode(head,tmp);}printLinkNode(head);printf("输入要删除的数据\n");scanf("%d",&data);deleteLinkNode(head,data);printLinkNode(head);searchLink(head,3);modifiLink(head,3,100);printLinkNode(head);return 0;
}//创建节点
Link* creatHead(Link* head)
{if(head==NULL){head=(Link*)malloc(sizeof(Link));head->next=NULL;}return head;
}//增加节点(尾插法)
void AddLinkNode(Link* head,Link newnode)
{Link *p=head;Link *new=(Link*)malloc(sizeof(Link));while(p->next!=NULL){p=p->next;}memcpy(new,&newnode,sizeof(Link));new->next=NULL;p->next=new;
}//遍历链表
void printLinkNode(Link *head)
{int cnt=0;Link* p=head;while(p->next!=NULL){cnt++;p=p->next;printf("%d ",p->data);}putchar('\n');
}//删除节点
void deleteLinkNode(Link* head,int data)
{Link* p=head;Link* tmp=NULL;while(p->next!=NULL){tmp=p;p=p->next;if(p->data==data){ tmp->next=p->next;free(p);p=head;}}
}//查找节点
void searchLink(Link* head,int data)
{Link* p=head;while(p->next!=NULL){if(p->data==data){printf("找到对应的节点:%d\n",p->data);}p=p->next;}if(p->next!=NULL){printf("未找到对应的节点\n");}
}    //修改节点
void modifiLink(Link* head,int data,int newdata)
{Link* p=head;while(p->next!=NULL){if(p->data==data){p->data=newdata;printf("把对应的节点修改为:%d\n",p->data);}p=p->next;}if(p->next!=NULL){printf("未找到对应的节点\n");}}

二·链表二

#include<stdio.h>
#include<stdlib.h>
#include<string.h>typedef  struct Test  
{char name[32];int  number;struct Test *next;
}Link; Link* head=NULL;Link*creatLinkNode(Link* head);
void AddLinkNode(Link* head,Link data);
void printLinkNode(Link* head);
void deleteLinkNode(Link* head,int num);int main(int argc,char** argv)
{Link data ={"xie",100};Link data1={"wen",200};Link data2={"hui",300};head=creatLinkNode(head);AddLinkNode(head,data);AddLinkNode(head,data1);AddLinkNode(head,data2);printLinkNode(head);deleteLinkNode(head,200);printLinkNode(head);return 0;
}//创建节点
Link* creatLinkNode(Link* head)
{if(head==NULL){head=(Link*)malloc(sizeof(Link));head->next=NULL;}return   head; 
}//增加节点(尾插法)
void AddLinkNode(Link* head,Link data)
{Link* p=head;Link* new=(Link*)malloc(sizeof(Link));while(p->next!=NULL){p=p->next;}memcpy(new,&data,sizeof(Link));p->next=new;new->next=NULL;
}//遍历链表
void printLinkNode(Link* head)
{Link* p=head->next;while(p!=NULL){printf("%s,%d\n",p->name,p->number);p=p->next;}// putchar('\n');
}//删除节点
void deleteLinkNode(Link* head,int num)
{Link* p=head;Link* tmp=NULL;while(p->next!=NULL){tmp=p;p=p->next;if(p->number==num){tmp->next=p->next;free(p);p=head;}}
}

三·链表三

#include<stdio.h>
#include<stdlib.h>
#include<string.h>typedef struct Test 
{char  name[32];int number;struct Test *next;
}Link;Link*  head=NULL;
Link* creatLink(Link* head);
void  printLink(Link* head);
void  AddLink(Link* head,Link data);
void  deleteLink(Link* head,int num);
void  saveLink(Link* head);
void  getLink(Link* head);#if 1
int main(int argc,char** argv)
{Link data={"xie",100};Link data1={"wen",200};Link data2={"hui",300};head=creatLink(head);AddLink(head,data);AddLink(head,data1);AddLink(head,data2);printLink(head);deleteLink(head,100);printLink(head);saveLink(head);getLink(head);printLink(head);return 0;
}
#endif#if 0
int main(int argc,char**  argv)
{head=creatLink(head);getLink(head);printLink(head);return  0;
}
#endifLink* creatLink(Link* head)
{if(head==NULL){head=(Link*)malloc(sizeof(Link));head->next=NULL;}return head;
}void printLink(Link* head)
{/*Link* p=head->next;while(p!=NULL){printf("%s,%d\n",p->name,p->number);p=p->next;}*/Link* p=head->next;while(p!=NULL){printf("%s,%d\n",p->name,p->number);p=p->next;}
}void AddLink(Link* head,Link data)
{ Link* p=head;Link* new=(Link*)malloc(sizeof(Link));while(p->next!=NULL){p=p->next;}memcpy(new,&data,sizeof(Link));p->next=new;new->next=NULL;
}void deleteLink(Link* head,int num)
{Link* p=head;Link* tmp=NULL;while(p->next!=NULL){tmp=p;p=p->next;if(p->number==num){tmp->next=p->next;free(p);p=head;}}
}void saveLink(Link* head)
{Link* p=head;FILE *fp=NULL;fp=fopen("./text.txt","w+");if(fp==NULL){printf("文件打开失败\n");return;}while(p->next!=NULL){fwrite(p,1,sizeof(Link),fp);p=p->next;}fclose(fp);
}/*void getLink(Link* head){Link* p=head;Link* new=(Link*)malloc(sizeof(Link));FILE* fp=NULL;Link  data;fp=fopen("./text.txt","rb");if(fp==NULL){printf("文件打开失败\n");return;}while(!feof(fp)){fread(&data,sizeof(Link),1,fp);AddLink(p,data);}fclose(fp);}*/
/*void  getLink(Link* head){FILE *fp=NULL;Link* p=head;Link* new=(Link*)malloc(sizeof(Link));new->next=NULL;fp=fopen("./text.txt","r+");{printf("打开文件失败\n");return ;}while((fread(new,sizeof(Link),1,fp))==1){p->next=new;p=new;new=(Link*)malloc(sizeof(Link));new->next=NULL;}free(new);fclose(fp);}*/void getLink(Link* head)
{Link* p=head;FILE* fp=NULL;Link data={0};fp=fopen("./text.txt","r+");if(fp==NULL){printf("文件打开失败\n");return;}while(!feof(fp)){fread(&data,1,sizeof(Link),fp);AddLink(head,data);}fclose(fp);
}

四·链表四

#include<stdio.h>
#include<stdlib.h>typedef struct ListNode
{int data;struct ListNode* next;
}ListNode;//创建节点
ListNode* createNode(int data)
{ListNode *node=(ListNode*)malloc(sizeof(ListNode));node->data=data;node->next=NULL;return node;
}//头插法
ListNode* insertNodeHead(ListNode *head,int data)
{ListNode *node=createNode(data);node->next=head;return node;
}//尾插法
ListNode *insertNodeTail(ListNode *head,int data)
{ListNode* node=createNode(data);ListNode* point=head;if(head==NULL){return NULL;}while(point->next!=NULL){point=point->next;}point->next=node;return head;
}//删除节点
ListNode* deleteNode(ListNode* head,int data)
{ListNode* point=head;if(head==NULL){return NULL;}if(head->data==data){head=head->next;free(point);return head;}while(point->next!=NULL&&point->next->data!=data){point=point->next;}if(point->next!=NULL){ListNode* node=point->next;point->next=node->next;free(node);  }return head;
}//修改节点
void updateNode(ListNode* head,int data,int newdata)
{ListNode* point=head;while(point!=NULL){if(point->data==data){point->data=newdata;}point=point->next;}
}//遍历节点
void printNode(ListNode* head)
{ListNode* point=head;while(point!=NULL){printf("%d ",point->data);point=point->next;}putchar('\n');
}//清楚节点
void clearNode(ListNode* head)
{while(head!=NULL){ListNode* point=head;head=head->next;free(point);}
}int main(int argc,char** argv)
{ListNode* head=NULL;head=insertNodeHead(head,1);head=insertNodeHead(head,2);head=insertNodeTail(head,3);printNode(head); head=deleteNode(head,2);printNode(head);updateNode(head,1,4);printNode(head);clearNode(head);return 0;
}

相关文章:

C语言——单链表(增删改查)

C语言——单链表(增删改查) 一链表一 #include<stdio.h> #include<stdlib.h> #include<string.h>typedef struct Test {int data;struct Test *next; }Link;Link *headNULL;Link* creatHead(Link* head); void AddLinkNode(Link* head,Link newnode); vo…...

Jenkins 保姆级教程

一、什么是流水线 jenkins 有 2 种流水线分为声明式流水线与脚本化流水线&#xff0c;脚本化流水线是 jenkins 旧版本使用的流水线脚本&#xff0c;新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。 声明式流水线 在声明式流水线语法中&#xff0c;流水线过程定…...

基于 GPS 定位信息的 Pure-Pursuit 轨迹跟踪实车测试(1)

基于 GPS 定位信息的 Pure-Pursuit 轨迹跟踪实车测试&#xff08;1&#xff09; 进行了多组实验&#xff0c;包括顺逆时针转向&#xff0c;直线圆弧轨迹行驶&#xff0c;以及Pure-Pursuit 轨迹跟踪测试 代码修改 需要修改的代码并不多&#xff0c;主要对 gps_sensor 功能包和…...

4.25每日一题(通过被积函数和积分区域(不等式)选正确的坐标系求二重积分)

一、正确画出积分区域&#xff1b;通过积分区域和被积函数选择方法 二、如何根据被积函数和积分区域正确选择通过极坐标还是根据直角坐标方程计算&#xff1a; &#xff08;1&#xff09;适合极坐标的积分区域&#xff1a;圆或者部分圆 &#xff08;2&#xff09;适合极坐标的…...

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(八)

套餐模块功能开发 1. 新增套餐1.1 需求分析和设计1.1.1产品原型&#xff1a;1.1.2接口设计&#xff1a;1.1.3数据库设计&#xff1a; 1.2 代码开发1.2.1 DishController层1.2.2 DishService接口类1.2.3 DishServiceImpl接口实现类1.2.4 DishMapper层1.2.5 DishMapper.xml1.2.6 …...

Visual NLP:图像信息自动提取的未来

本文旨在以简单的方式解释 Visual NLP 的关键概念&#xff0c;让你了解 Visual NLP 的含义、它的用例是什么、如何使用它以及为什么它是构建自动提取管道的未来 。 NSDT在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在…...

力扣118双周赛

第 118 场双周赛 文章目录 第 118 场双周赛查找包含给定字符的单词最大化网格图中正方形空洞的面积购买水果需要的最少金币数找到最大非递减数组的长度 查找包含给定字符的单词 模拟 class Solution { public:vector<int> findWordsContaining(vector<string>&am…...

网络编程基本概念

网络编程基本概念 为什么需要网络编程&#xff1f; 用户在浏览器中&#xff0c;打开在线视频网站&#xff0c;如优酷看视频&#xff0c;实质是通过网络&#xff0c;获取到网络上的一个视频资源。 与本地打开视频文件类似&#xff0c;只是视频文件这个资源的来源是网络。 相…...

Flutter模板

简介 这个项目是Flutter应用程序的起点。与创建的官方默认模板相比&#xff0c;该项目实现了状态管理等功能&#xff0c;用于Url、本地化等的Navigator 2.0路由。 开始 该项目的入口文件为 ‘lib/init/init.dart’ 特性 状态管理 基于provider. Navigator 2.0适配 代码…...

坐标变换(其一)CSP

坐标变换&#xff08;其一&#xff09; 问题描述 对于平面直角坐标系上的坐标 (x,y)&#xff0c;小 P 定义了一个包含 n 个操作的序列 T(t1,t2,⋯,tn)。其中每个操作 ti&#xff08;1≤i≤n&#xff09;包含两个参数 dxi 和 dyi&#xff0c;表示将坐标 (x,y) 平移至 (xdxi,yd…...

C语言实现万年历

C语言实现万年历 一、项目介绍 需求和功能是用纯C语言实现一个可以属于年份&#xff0c;属于一个年份就可以显示该年各个月份的日历&#xff0c;如同日历一般&#xff0c;每个月当中每天对应的星期均可查看&#xff0c;即万年历&#xff0c;要求格式整齐&#xff0c;星期对照直…...

arp报文及使用go实现

一、ARP协议报文格式及ARP表 ARP&#xff08;Address Resolution Protocal&#xff0c;地址解析协议&#xff09;是将IP地址解析为以太网的MAC地址&#xff08;或者称为物理地址&#xff09;的协议。在局域网中&#xff0c;当主机或其他网络设备有数据要发送给另一个主机或设备…...

C++ 文件和流、异常处理、动态内存、预处理器

一、C文件和流&#xff1a; 在C中进行文件处理&#xff0c;需要包含头文件<iostream>和<fstream>。fstream标准库定义的三个新的数据类型&#xff1a; 数据类型 描述 ofstream 该数据类型表示输出文件流&#xff0c;用于创建文件并向文件写入信息。 ifstream …...

夜神模拟器 burp抓包 ADB 微信小程序

夜神模拟器 burp抓包 ADB 微信小程序 初始环境准备应用连接证书转换设置夜神模拟器环境ADB配置测试burp抓包 初始环境准备 既然想了解如何抓包&#xff0c;我想大多数是已经安装好 夜神模拟器 和 Burp 了&#xff0c;这里就不在赘述&#xff0c;直接开始操作。 openssl 的下载…...

WPF实战项目十七(客户端):数据等待加载弹框动画

1、在Common文件夹下新建文件夹Events&#xff0c;新建扩展类UpdateLoadingEvent public class UpdateModel {public bool IsOpen { get; set; }}internal class UpdateLoadingEvent : PubSubEvent<UpdateModel>{} 2、新建一个静态扩展类DialogExtensions来编写注册和推…...

22-Python与设计模式--状态模式

22-Python与设计模式–状态模式 一、电梯控制器 电梯在我们周边随处可见&#xff0c;电梯的控制逻辑中心是由电梯控制器实现的。电梯的控制逻辑&#xff0c;即使简单点设计&#xff0c; 把状态分成开门状态&#xff0c;停止状态和运行状态&#xff0c;操作分成开门、关门、运…...

电脑键盘推荐

一、键盘分类 &#xff08;1&#xff09;键位个数 目前有75&#xff0c;84&#xff0c;87&#xff0c;98&#xff0c;104&#xff0c;108的。 &#xff08;2&#xff09;薄膜键盘和机械键盘 薄膜键盘就是大多数办公室常见的键盘&#xff0c;主要打一个便宜&#xff0c;耐造…...

大数据-之LibrA数据库系统告警处理(ALM-37001 MPPDBServer实例Redo日志缺失)

告警解释 当DN主实例有未同步到DN备实例的xlog日志被删除时&#xff0c;产生该告警。 告警属性 告警ID 告警级别 可自动清除 37001 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产生告警的主机名…...

C#关键字、特性基础及扩展合集(持续更新)

一、基础 Ⅰ 关键字 1、record record&#xff08;记录&#xff09;&#xff0c;编译器会在后台创建一个类。支持类似于结构的值定义&#xff0c;但被实现为一个类&#xff0c;方便创建不可变类型&#xff0c;成员在初始化后不能再被改变 &#xff08;C#9新增&#xff09; …...

单例模式-支持并发的C语言实现

代码实现&#xff1a; c #include <stdio.h> #include <stdlib.h> #include <pthread.h>// 定义单例对象结构体 typedef struct {// 单例对象的数据成员int value; } Singleton;// 静态变量&#xff0c;用于保存唯一实例的指针 static Singleton* instance …...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...