单链表的插入和删除
一、插入操作
按位序插入(带头结点):
ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。
typedef struct LNode{ElemType data;struct LNode *next;
}LNode,*LinkList;//在第i 个位置插插入元素e (带头结点)
bool ListInsert(LinkList &L, int i,ElemType e){if( i<1)return false;LNode *p; //指针p指向当前扫描到的结点int j=0; //当前p指向的是第几个结点p = L; //L指向头结点,头结点是第0个结点(不存数据)
while (p!=NULL &&j<i-1){ //循环找到第i-1个结点p=p->next;j++;
}if(p==NULL) //i值不合法return false;
LNode *s = (LNode *)malloc(sizeof( LNode) ) ;
s->data = e;
s->next=p->next;
p->next=s; //将结点s连到p之后
return true; //插入成功
}
注意:上述代码s->next=p->next与p->next=s不能颠倒。
按位序插入(不带头节点):
ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。
typedef struct LNode{ElemType data;struct LNode *next;
}LNode,*LinkList;//在第i 个位置插插入元素e (带头结点)
bool ListInsert(LinkList &L, int i,ElemType e){if( i<1)return false;if(i==1){ //插入第一个节点的操作与其他节点操作不同
LNode *s = ( LNode *)malloc(sizeof( LNode) ) ;s->data = e;s->next=L;L=s; //头指针指向新结点return true;
}
LNode *p; //指针p指向当前扫描到的结点
int j=1; //当前p指向的是第几个结点
p = L; // p指向第1个结点(注意:不是头结点)while (p!=NULL &&j<i-1){ //循环找到第i-1个结点p=p->next;j++;
}if(p==NULL) //i值不合法return false;
LNode *s = (LNode *)malloc(sizeof( LNode) ) ;
s->data = e;
s->next=p->next;
p->next=s; //将结点s连到p之后
return true; //插入成功
}
指定节点的后插操作:
typedef struct LNode{ElemType data;struct LNode *next;
}LNode,*LinkList;//后插操作:在p结点之后插入元素e
bool InsertNextNode ( LNode *p,ElemType e){if ( p==NULL)return false;LNode *s = ( LNode *)malloc(sizeof( LNode) ) ;if (s==NULL) //内存分配失败return false;
s->data = e; //用结点s保存数据元素e
s->next=p->next;
p->next=s; //将结点s连到p之后
return true;
}
指定节点的前插操作:
//前插操作:在p结点之前插入元素e
bool InsertPriorNode (LNode *p,ElemType e)
无法找到他的前驱节点,可以传入头指针
//前插操作:在p结点之前插入元素e
bool InsertPriorNode ( LinkList L,LNode *p,ElemType e)
但如果不能传入头指针上述方法就不能使用,依然无法解决问题。
可以申请一个新的节点s作为p的后继节点,把p中的数据复制到s中再把插入的数据放到p中完成前插操作。如下图所示:
//前插操作:在p结点之前插入元素e
bool InsertPriorNode (LNode *p,ElemType e){if ( p==NULL)return false;LNode *s = ( LNode *)malloc(sizeof( LNode ) ) ;if ( s==NULL) //内存分配失败return false;s->next=p->next;p->next=s; //新结点s 连到p之后s->data=p->data; //将p中元素复制到s中p->data=e; // p中元素覆盖为ereturn true;
}
二、删除操作
按位序删除(带头结点):
ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。
typedef struct LNode{ElemType data;struct LNode *next;
}LNode,*LinkList;bool ListDelete( LinkList &L, int i,ElemType &e){if(i<1)return false;LNode *p; //指针p指向当前扫描到的结点int j=0; //当前p指向的是第几个结点p = L; //L指向头结点,头结点是第0个结点(不存数据)
while (p !=NULL && j<i-1){ //循外找到第i-1个节点p=p->next;j++;
}
if( p==NULL) //i值不合法return false;
if( p->next == NULL) //第i-1个结点之后已无其他结点return false;
LNode *q=p->next; //令q指向被删除结点
e = q->data; //用e返回元素的值
p->next=q->next; //将*q结点从链中“断开
free(q); //释放结点的存储空间
return true; //删除成功
}
指定节点的删除:
//删除指定结点p
bool DeleteNode ( LNode *p)
方法1:传入头指针,循环寻找p 的前驱结点
方法2:类似于结点前插的实现
//删除指定结点p
bool DeleteNode ( LNode *p){if (p==NULL)return false;LNode *q=p->next; //令q指向*p的后继结点p->data=p->next->data; //和后继结点交换数据域p->next=q->next; //将*q结点从链中“断开”free(q); //释放后继结点的存储空间return true;
}
相关文章:
单链表的插入和删除
一、插入操作 按位序插入(带头结点): ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。 typedef struct LNode{ElemType data;struct LNode *next; }LNode,*LinkList;//在第i 个位置插插入元素e (带头结点) bool Li…...
全量知识系统 之“程序”详细设计 之 “絮”---开端“元素周期表”表示的一个“打地鼠”游戏
全量知识系统 之“程序”详细设计 概述-概要和纪要 序 絮(一个极简的开场白--“全量知识系统”自我介绍) 将整个“人生”的三个阶段 比作“幼稚园”三班 : 第一步【想】-- “感性”思维游戏:打地鼠 。学前教育-新生期&#x…...
【详细讲解WebView的使用与后退键处理】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
【Linux多线程】生产者消费者模型
【Linux多线程】生产者消费者模型 目录 【Linux多线程】生产者消费者模型生产者消费者模型为何要使用生产者消费者模型生产者消费者的三种关系生产者消费者模型优点基于BlockingQueue的生产者消费者模型C queue模拟阻塞队列的生产消费模型 伪唤醒情况(多生产多消费的…...
Django屏蔽Server响应头信息
一、背景 最近我们被安全部门的漏洞扫描工具扫出了一个服务端口的漏洞。这个服务本身是一个Django启动的web服务,并且除了登录页面,其它页面或者接口都需要进行登录授权才能进行访问。 漏洞扫描信息和提示修复信息如下: 自然这些漏洞如何修复,…...
前端对数据进行分组和计数处理
js对数组数据的处理,添加属性,合并表格数据。 let data[{id:1,group_id:111},{id:2,group_id:111},{id:3,group_id:111},{id:4,group_id:222},{id:5,group_id:222} ]let tempDatadata; tempDatatempData.reduce((arr,item)>{let findarr.find(i>i…...
synchronized 和 lock
synchronized 和 Lock 都是 Java 中用于实现线程同步的机制,它们都可以保证线程安全。 # synchronized 介绍与使用 synchronized 可用来修饰普通方法、静态方法和代码块,当一个线程访问一个被 synchronized 修饰的方法或者代码块时,会自动获…...
ssh 公私钥(github)
一、生成ssh公私钥 生成自定义名称的SSH公钥和私钥对,需要使用ssh-keygen命令,这是大多数Linux和Unix系统自带的标准工具。下面,简单展示如何使用ssh-keygen命令来生成具有自定义名称的SSH密钥对。 步骤 1: 打开终端 首先,打开我…...
LangChain入门:8.打造自动生成广告文案的应用程序
在这篇技术博文中,我们将探讨如何利用LangChain框架的模板管理、变量提取和检查、模型切换以及输出解析等优势,打造一个自动生成广告文案的应用程序。 LangChain框架的优势 在介绍应用程序之前,让我们先了解一下LangChain框架的几个优势: 模板管理: 在大型项目中,文案可…...
AI如何影响装饰器模式与组合模式的选择与应用
🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章:设计模式深度解析:AI如何影响…...
【C语言环境】Sublime中运行C语言时MinGW环境的安装
要知道,GCC 官网提供的 GCC 编译器是无法直接安装到 Windows 平台上的,如果我们想在 Windows 平台使用 GCC 编译器,可以安装 GCC 的移植版本。 目前适用于 Windows 平台、受欢迎的 GCC 移植版主要有 2 种,分别为 MinGW 和 Cygwin…...
Ubuntu18.04 下Ublox F9P 实现RTK (利用CORS服务无需自建基站)
本内容参考如下连接:Ubuntu下Ublox F9P利用CORS服务无需自建基站实现RTK-CSDN博客 一、Ublox F9P 硬件模块示意图 图中展示了Ublox F9P的接口,包括串口2(`UART1`和`UART2`),USB1。需要人为通过u-center(Ublox F9P的显示软件)软件设置以下功能: Ublox通过`UART1`向PC端发送…...
springboot+vue在idea上面的使用小结
1.在mac上面删除java的jdk方法: sudo rm -rfjdk的路径 sudo rm -rf /Users/like/Library/Java/JavaVirtualMachines/corretto-17.0.10/Contents/Home 2.查询 Mac的jdk版本和路径: /usr/libexec/java_home -V 3.mac上面查询和关闭idea的网页端口&…...
MyEclipse将项目的开发环境与服务器的JDK 版本保持一致
前言 我们使用MyEclipse开发Java项目开发中,偶尔会遇到因项目开发环境不协调,导致这样那样的问题,在这里以把所有环境调整为JDK1.6 为例。 操作步骤 1.Window-->Preferences-->Java-->Installed JRES 修改为 1.6版本 2.Window-->…...
为BUG编程:函数重载的烦恼 char *匹配bool而不是string
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 这是一个BUG。 运行环境为linu…...
C++第十四弹---模板初阶
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、泛型编程 2、函数模板 2.1、函数模板的概念 2.2、函数模板的格式 2.3、函数模板的原理 2.4、函数模板的实例化 2.5、模板参数的匹配原则 …...
C++--内联函数
当调用一个函数时,程序就会跳转到该函数,函数执行完毕后,程序又返回到原来调用该函数的位置的下一句。 函数的调用也需要花时间,C中对于功能简单、规模小、使用频繁的函数,可以将其设置为内联函数。 内联函数ÿ…...
java数组与集合框架(一) -- 数据结构,数组
数据结构 概述 为什么要讲数据结构? 任何一个有志于从事IT领域的人员来说,数据结构(Data Structure)是一门和计算机硬件与软件都密切相关的学科,它的研究重点是在计算机的程序设计领域中探讨如何在计算机中组织和存储…...
React 应用实现监控可观测性最佳实践
前言 React 是一个用于构建用户界面的 JavaScript 框架。它采用了虚拟 DOM 和 JSX,提供了一种声明式的、组件化的编程模型,以便更高效地构建用户界面。无论是简单还是复杂的界面,React 都可以胜任。 YApi 是使用 React 编写的高效、易用、功…...
批处理(Batch)把Excel文件xls格式和xlsx格式进行互换
批处理(Batch)把Excel文件xls格式改成xlsx格式以及xlsx格式改为xls格式。 Case1:xls转xlsx - 单个文件.bat $Excel New-Object -ComObject Excel.Application $Excel.Visible $false $Workbook $Excel.Workbooks.Open("C:\Test\Excel\1.xls&qu…...
Adobe ColdFusion 任意文件读取漏洞复现(CVE-2024-20767)
0x01 产品简介 Adobe ColdFusion是美国奥多比(Adobe)公司的一套快速应用程序开发平台。该平台包括集成开发环境和脚本语言,将可扩展、改变游戏规则且可靠的产品的愿景变为现实。 0x02 漏洞概述 由于 Adobe ColdFusion 的访问控制不当,未经身份认证的远程攻击者可以构造恶…...
搜索与图论——Floyd算法求最短路
floyd算法用来求多源汇最短路 用邻接矩阵来存所有的边 时间复杂度O(n^3) #include<iostream> #include<cstring> #include<algorithm>using namespace std;const int N 20010,INF 1e9;int n,m,k; int g[N][N];void floyd(){for(int k 1;k < n;k ){f…...
春招冲刺百题计划--矩阵篇
289. 生命游戏 题目: 给定一个包含 m n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态: 1 即为 活细胞 (live),或 0 即为 死细胞 (dead)。每个细胞与…...
LLM大语言模型(八):ChatGLM3-6B使用的tokenizer模型BAAI/bge-large-zh-v1.5
背景 BGE embedding系列模型是由智源研究院研发的中文版文本表示模型。 可将任意文本映射为低维稠密向量,以用于检索、分类、聚类或语义匹配等任务,并可支持为大模型调用外部知识。 BAAI/BGE embedding系列模型 模型列表 ModelLanguageDescriptionq…...
MySQL中的三种日志
MySQL 包括三种类型的⽇志,分别是 binlog、 redolog 和 undolog,它们分别有不同的作⽤和特点。 binlog (存档日志) binlog(Binary log)是 MySQL 中的⼆进制⽇志⽂件,是 Server 层⽣成的的⽇志…...
Codeforces Round 932 (Div. 2)(A,B,C,D)
比赛链接 AB都是思维,更确切地说,A考了字符串字典序,很经典的贪心考点,B考了MEX运算。C出的还是比较好的,dp方法值得学习。D题是个不太好想的容斥,主要是变量有点多,容易搞混。 A. Entertainme…...
初识C++ · 入门(2)
目录 1 引用 1.1引用的概念 1.2 引用的特性 2 传值,传引用的效率 3 引用和指针的区别 4 内联函数 4.1 内联函数的定义 4. 2 内联函数的特性 5 关键字auto 5.1关于命名的思考 5.2 关于auto的发展 5.3 auto使用规则 6 范围for的使用 7 空指针 1 引用 …...
【opencv】教程代码 —ShapeDescriptors
检测和显示图像的轮廓 在图像中搜索并显示轮廓边缘多边形、轮廓矩形和包围圆 获取包含检测到的轮廓的椭圆和旋转的矩形 图像轮廓检测和轮廓凸包 计算图像中的轮廓的矩(包括面积、重心等)并进行显示 创建和绘制一个多边形图像然后计算并显示图像上每个点到…...
2024-03-28 Java8之Collectors类
Collectors类常用方法 文章目录 Collectors类常用方法1.toList、toSet、toMap2.joining、counting、summingInt、minBy3.groupingBy 1.toList、toSet、toMap Collector<T, ?, List<T>> toList(); //收集为List集合 Collector<T, ?, Set<T>> toSet()…...
第116讲:使用Mycat-eye管理Mycat数据库服务
文章目录 1.Mycat的管理工具2.Mycat-eye介绍3.部署Mycat-eye3.1.安装Zookeep3.2.安装Mycat-eye3.3.访问Mycat-eye 4.在Mycat-eye中导入Mycat服务的信息 1.Mycat的管理工具 Mycat默认开通2个端口,可以在server.xml中进行修改。 8066 数据访问端口,即进行…...
wordpress 提示要安装/soe搜索优化
作为2017世界物联网博览会的重要活动之一,由中国经济信息社江苏中心研撰的《2016-2017中国物联网发展年度报告》(下称《年报》)近日在无锡发布。《年报》认为,我国智慧城市步入实质发展阶段,企业广泛参与、营收能力增强。 2016年以来,我国智慧城市建设开放合作特征进一步凸显,B…...
网站宝二级域名怎么设置/产品如何做线上推广
情景一:两个bat文件在同一个目录下 有时候我们需要在一个bat文件中调用另一个bat文件,比如我们想在a.bat中调用b.bat,如下。 a.bat echo off echo I am a.bat… echo now run the b.bat call b.bat echo over b.bat echo off echo I am b…...
做网站需要租服务器/技能培训有哪些
以前做过一个自动收集网页内容的工具,使用的还可以,用Indy的IdHttp组件来获取网页内容然后分析处理。 现在很多网站都采用了Ajax技术,网页内容异步刷新,所以使用IdHttp组件就无法获取完整的网页内容了。我在 http://www.cnblogs.c…...
网站怎么做免费seo搜索/云南百度公司
哈希表1.定义2.哈希函数的构造方法2.1直接定址法2.2 数字分析法2.3 平方取中法2.4 折叠法2.5 除留余数法2.6随机数法3.处理冲突的方法3.1 开放定址法3.2 再哈希法3.3 链地址法3.4 公共溢出区法4.hash表的查找5.python-hash表以及哈希查找的实现6.小结1.定义 \quad \quad哈希表&…...
建设网站那个好/淘宝美工培训
1.模型建立 [dmodel,perf]dacefit(S,Y,regr,corr,theta0) [dmodel,perf]dacefit(S,Y,regr,corr,theta0,lob,upb) 输入参数: S:设计点,一个m*n的矩阵。 Y:一个S的响应值矩阵 m*q regr:回归模型(0阶多项式&#…...
企业网站建设现状/全国十大婚恋网站排名
本文是讲使用微软企业库来实现AOP和IoC/DI的,大家先装下微软企业库5.0,地址:http://www.microsoft.com/en-us/download/details.aspx?id15104 AOP的实现,使用PIAB(Policy Injection Application Block) 比如想给这个T…...