当前位置: 首页 > 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 …...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...