当前位置: 首页 > 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应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...