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 种流水线分为声明式流水线与脚本化流水线,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。 声明式流水线 在声明式流水线语法中,流水线过程定…...
基于 GPS 定位信息的 Pure-Pursuit 轨迹跟踪实车测试(1)
基于 GPS 定位信息的 Pure-Pursuit 轨迹跟踪实车测试(1) 进行了多组实验,包括顺逆时针转向,直线圆弧轨迹行驶,以及Pure-Pursuit 轨迹跟踪测试 代码修改 需要修改的代码并不多,主要对 gps_sensor 功能包和…...
4.25每日一题(通过被积函数和积分区域(不等式)选正确的坐标系求二重积分)
一、正确画出积分区域;通过积分区域和被积函数选择方法 二、如何根据被积函数和积分区域正确选择通过极坐标还是根据直角坐标方程计算: (1)适合极坐标的积分区域:圆或者部分圆 (2)适合极坐标的…...
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(八)
套餐模块功能开发 1. 新增套餐1.1 需求分析和设计1.1.1产品原型:1.1.2接口设计:1.1.3数据库设计: 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 的关键概念,让你了解 Visual NLP 的含义、它的用例是什么、如何使用它以及为什么它是构建自动提取管道的未来 。 NSDT在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在…...
力扣118双周赛
第 118 场双周赛 文章目录 第 118 场双周赛查找包含给定字符的单词最大化网格图中正方形空洞的面积购买水果需要的最少金币数找到最大非递减数组的长度 查找包含给定字符的单词 模拟 class Solution { public:vector<int> findWordsContaining(vector<string>&am…...
网络编程基本概念
网络编程基本概念 为什么需要网络编程? 用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,获取到网络上的一个视频资源。 与本地打开视频文件类似,只是视频文件这个资源的来源是网络。 相…...
Flutter模板
简介 这个项目是Flutter应用程序的起点。与创建的官方默认模板相比,该项目实现了状态管理等功能,用于Url、本地化等的Navigator 2.0路由。 开始 该项目的入口文件为 ‘lib/init/init.dart’ 特性 状态管理 基于provider. Navigator 2.0适配 代码…...
坐标变换(其一)CSP
坐标变换(其一) 问题描述 对于平面直角坐标系上的坐标 (x,y),小 P 定义了一个包含 n 个操作的序列 T(t1,t2,⋯,tn)。其中每个操作 ti(1≤i≤n)包含两个参数 dxi 和 dyi,表示将坐标 (x,y) 平移至 (xdxi,yd…...
C语言实现万年历
C语言实现万年历 一、项目介绍 需求和功能是用纯C语言实现一个可以属于年份,属于一个年份就可以显示该年各个月份的日历,如同日历一般,每个月当中每天对应的星期均可查看,即万年历,要求格式整齐,星期对照直…...
arp报文及使用go实现
一、ARP协议报文格式及ARP表 ARP(Address Resolution Protocal,地址解析协议)是将IP地址解析为以太网的MAC地址(或者称为物理地址)的协议。在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设备…...
C++ 文件和流、异常处理、动态内存、预处理器
一、C文件和流: 在C中进行文件处理,需要包含头文件<iostream>和<fstream>。fstream标准库定义的三个新的数据类型: 数据类型 描述 ofstream 该数据类型表示输出文件流,用于创建文件并向文件写入信息。 ifstream …...
夜神模拟器 burp抓包 ADB 微信小程序
夜神模拟器 burp抓包 ADB 微信小程序 初始环境准备应用连接证书转换设置夜神模拟器环境ADB配置测试burp抓包 初始环境准备 既然想了解如何抓包,我想大多数是已经安装好 夜神模拟器 和 Burp 了,这里就不在赘述,直接开始操作。 openssl 的下载…...
WPF实战项目十七(客户端):数据等待加载弹框动画
1、在Common文件夹下新建文件夹Events,新建扩展类UpdateLoadingEvent public class UpdateModel {public bool IsOpen { get; set; }}internal class UpdateLoadingEvent : PubSubEvent<UpdateModel>{} 2、新建一个静态扩展类DialogExtensions来编写注册和推…...
22-Python与设计模式--状态模式
22-Python与设计模式–状态模式 一、电梯控制器 电梯在我们周边随处可见,电梯的控制逻辑中心是由电梯控制器实现的。电梯的控制逻辑,即使简单点设计, 把状态分成开门状态,停止状态和运行状态,操作分成开门、关门、运…...
电脑键盘推荐
一、键盘分类 (1)键位个数 目前有75,84,87,98,104,108的。 (2)薄膜键盘和机械键盘 薄膜键盘就是大多数办公室常见的键盘,主要打一个便宜,耐造…...
大数据-之LibrA数据库系统告警处理(ALM-37001 MPPDBServer实例Redo日志缺失)
告警解释 当DN主实例有未同步到DN备实例的xlog日志被删除时,产生该告警。 告警属性 告警ID 告警级别 可自动清除 37001 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产生告警的主机名…...
C#关键字、特性基础及扩展合集(持续更新)
一、基础 Ⅰ 关键字 1、record record(记录),编译器会在后台创建一个类。支持类似于结构的值定义,但被实现为一个类,方便创建不可变类型,成员在初始化后不能再被改变 (C#9新增) …...
单例模式-支持并发的C语言实现
代码实现: c #include <stdio.h> #include <stdlib.h> #include <pthread.h>// 定义单例对象结构体 typedef struct {// 单例对象的数据成员int value; } Singleton;// 静态变量,用于保存唯一实例的指针 static Singleton* instance …...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
Python爬虫实战:研究Restkit库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...
