【数据结构】双向链表
目录
1. 双向链表
1.1特性
1.2双向链表相关操作
1.3 双向循环链表
1. 双向链表
1.1特性
逻辑结构:线性结构
存储结构:链式存储
操作:增删改查
typedef int datatype;
typedef struct node
{datatype data; //数据域struct node *next; //指向后继节点指针struct node *prior; //指向前驱节点指针
} link_node_t, *link_node_p;//将头尾指针封装到一个结构体里,思想上有点像链式队列
typedef struct doublelinklist
{link_node_p head; //链表头指针link_node_p tail; //链表尾指针int len; //用来保存当前链表的长度
} doublelinklist_t, *doublelinklist_p;
1.2双向链表相关操作
创空:
插入:
删除:
删除指定数据
需要注意的是,与单链表不同,双链表创建过程中,每创建一个新节点都要与其前驱节点建立两次联系,分别是:
(1) 将新节点的 prior 指针指向直接前驱节点。
(2) 将直接前驱节点的 next 指针指向新节点。
#include <stdio.h>
#include <stdlib.h>typedef int datatype;
typedef struct node
{datatype data; //数据域struct node *next; //指向后继节点指针struct node *prior; //指向前驱节点指针
} link_node_t, *link_node_p;//将头尾指针封装到一个结构体里,思想上有点像链式队列
typedef struct doublelinklist
{link_node_p head; //链表头指针link_node_p tail; //链表尾指针int len; //用来保存当前链表的长度
} doublelinklist_t, *doublelinklist_p;//创建一个空双向链表
doublelinklist_p createEmptyDoubleLinkList()
{//1.申请空间存放头尾指针结构体doublelinklist_p p = (doublelinklist_p)malloc(sizeof(doublelinklist_t));if (NULL == p){perror("p malloc err");return NULL;}//2. 初始化结构体空间p->len = 0;p->head = p->tail = (link_node_p)malloc(sizeof(link_node_t));if (NULL == p->head){perror("p->head malloc err");return NULL;}//3. 初始化头节点p->head->next = NULL;p->head->prior = NULL;return p;
}//向双向链表的指定位置插入数据 post位置, data数据
int insertIntoDoubleLinkList(doublelinklist_p p, int post, datatype data)
{int i;link_node_p temp = NULL;//1. 容错判断if (post < 0 || post > p->len){printf("insertIntoDoubleLinkList err\n");return -1;}//2. 新建一个节点,用来保存数据link_node_p pnew = (link_node_p)malloc(sizeof(link_node_t));if (NULL == pnew){perror("pnew malloc err");return -1;}pnew->data = data;pnew->next = NULL;pnew->prior = NULL;//3. 将新节点链接到链表中//分情况:尾插和中间插入if (post == p->len) //尾插{//将新节点链接到链表尾部pnew->prior = p->tail;p->tail->next = pnew;//移动尾指针p->tail = pnew;}else //中间插入(分前后半段){//(1) 将temp移动到插入位置if (post < p->len / 2) //前半段{temp = p->head;for (i = 0; i <= post; i++)temp = temp->next;}else //后半段{temp = p->tail;for (i = p->len - 1; i > post; i--)temp = temp->prior;}//(2)将新节点插入到链表中(先连前面,再连后面)pnew->prior = temp->prior;temp->prior->next = pnew;pnew->next = temp;temp->prior = pnew;}//长度加一p->len++; //新多了节点,链表长+1return 0;
}//遍历双向链表
void showDoubleLinkList(doublelinklist_p p)
{link_node_p temp = NULL;//正向遍历printf("正向遍历: ");temp = p->head;while (temp->next != NULL) //类似于遍历有头单向链表{temp = temp->next;printf("%d ", temp->data);}printf("\n");//反向遍历printf("反向遍历: ");temp = p->tail;while (temp != p->head) //类似于遍历无头单向链表{printf("%d ", temp->data);temp = temp->prior;}printf("\n");
}//判断双向链表是否为空
int isEmptyDoubleLinkList(doublelinklist_p p)
{return p->len == 0;
}//删除双向链表指定位置数据
int deletePostDoubleLinkList(doublelinklist_p p, int post)
{int i;//1. 容错判断if (isEmptyDoubleLinkList(p) || post < 0 || post >= p->len){printf("deletePostDoubleLinkList err\n");return -1;}//2. 对删除位置进行分析,分两种情况if (post == p->len - 1) //删除尾巴节点{//(1)往前移动尾指针p->tail = p->tail->prior;//(2)释放要被删除节点,也就是此时尾指针所指节点后一个节点free(p->tail->next);//(3)此时尾巴节点next为空p->tail->next = NULL;}else //中间删除{//定义一个指针,移动到被删除节点link_node_p temp = NULL;if (post < p->len / 2) //前半段{temp = p->head;for (i = 0; i <= post; i++)temp = temp->next;}else //后半段{temp = p->tail;for (i = p->len - 1; i > post; i--)temp = temp->prior;}//进行删除操作,也就是跨过要被删除节点。temp->prior->next = temp->next;temp->next->prior = temp->prior;free(temp);temp = NULL;}//3.长度-1p->len--;
}//修改指定位置的数据,post修改的位置 data被修改的数据
int changeDataDoubleLinkList(doublelinklist_p p, int post, datatype data)
{int i;link_node_p temp = NULL;//1. 容错判断if (isEmptyDoubleLinkList(p) || post < 0 || post >= p->len){printf("deletePostDoubleLinkList err\n");return -1;}//2. 将指针temp移动到要修改节点if (post < p->len / 2) //前半段{temp = p->head;for (i = 0; i <= post; i++)temp = temp->next;}else //后半段{temp = p->tail;for (i = p->len - 1; i > post; i--)temp = temp->prior;}//3. 修改数据temp->data = data;return 0;
}//查找指定数据出现的位置 data被查找的数据
int searchPostDoubleLinkList(doublelinklist_p p, datatype data)
{link_node_p temp = p->head;int post = 0;while (temp->next != NULL){temp = temp->next;if (temp->data == data)return post;post++;}return -1;
}//删除双向链表中的指定数据 data代表删除所有出现的data数据
//思想:从头节点后节点开始用指针h遍历,相当于遍历无头链表,遇到需要删除节点的就用h指向它然后删除,如果不需要删除则h继续往后走一个。这里因为是双向链表可以找到前驱,所以不需要每次指向被删除节点的前一个然后跨过了。
void deleteDataDoubleLinkList(doublelinklist_p p, datatype data)
{link_node_p pdel = NULL; //用于删除节点link_node_p h = p->head->next; //用于相当于遍历无头链表//相当于遍历无头链表,遇见相等的就删除,否则向后遍历while (h != NULL){if (h->data == data) //相等{if (h == p->tail) //尾节点{//删除尾巴节点p->tail = p->tail->prior;free(p->tail->next);p->tail->next = NULL;}else //删除中间节点{h->prior->next = h->next;h->next->prior = h->prior;pdel = h;h = h->next; //释放前要让h向后走一个以便继续遍历free(pdel);}p->len--;}else //不等{h = h->next; //往后继续遍历}}
}int main(int argc, char const *argv[])
{doublelinklist_p p = createEmptyDoubleLinkList();insertIntoDoubleLinkList(p, 0, 1);insertIntoDoubleLinkList(p, 1, 2);insertIntoDoubleLinkList(p, 2, 3);insertIntoDoubleLinkList(p, 3, 4);showDoubleLinkList(p);deletePostDoubleLinkList(p, 3);showDoubleLinkList(p);changeDataDoubleLinkList(p, 2, 100);showDoubleLinkList(p);printf("post = %d\n", searchPostDoubleLinkList(p, 100));insertIntoDoubleLinkList(p, 3, 1);deleteDataDoubleLinkList(p, 1);showDoubleLinkList(p);return 0;
}
1.3 双向循环链表
doublecirclelink.c
#include <stdio.h>
#include <stdlib.h>typedef int datatype;
typedef struct node_t
{datatype data;struct node_t * prior;struct node_t * next;
}link_node_t,*link_node_p;typedef struct doublelinklist
{link_node_p head;link_node_p tail;
}double_node_t,*double_list_t;int main(int argc, const char *argv[])
{int i;int all_num = 8;//猴子总数int start_num = 3;//从3号猴子开始数int kill_num = 3;//数到几杀死猴子 link_node_p h = NULL;link_node_p pdel = NULL;//用来指向被杀死猴子的节点printf("请您输入猴子的总数,开始号码,出局号码:\n");scanf("%d%d%d",&all_num,&start_num,&kill_num);//1.创建一个双向的循环链表double_list_t p = (double_list_t)malloc(sizeof(double_node_t));//申请头指针和尾指针if(NULL == p){perror("malloc failed");return -1;}p->head = p->tail = (link_node_p)malloc(sizeof(link_node_t));if(NULL == p->tail){perror("p->tail malloc failed");return -1;}p->head->data = 1;p->head->prior = NULL;p->head->next = NULL;//将创建n个新的节点,链接到链表的尾for(i = 2; i <= all_num; i++){link_node_p pnew = (link_node_p)malloc(sizeof(link_node_t));if(NULL == pnew){perror("pnew malloc failed");return -1;}pnew->data = i;pnew->prior = NULL;pnew->next = NULL;//(1)将新的节点链接到链表的尾p->tail->next = pnew;pnew->prior = p->tail;//(2)尾指针向后移动,指向当前链表的尾p->tail = pnew;}//(3)形成双向循环链表 p->tail->next = p->head;p->head->prior = p->tail;//调试程序 #if 0while(1){printf("%d\n",p->head->data);p->head = p->head->next;sleep(1);}#endif//2.循环进行杀死猴子h = p->head;//(1)先将h移动到start_num处,也就是开始数数的猴子号码处for(i = 1; i < start_num; i++)h = h->next;printf("start is:%d\n",h->data);while(h->next != h)//当h->next == h 就剩一个节点了,循环结束{//(2)将h移动到即将杀死猴子号码的位置for(i = 1; i < kill_num; i++)h = h->next;//(3)进行杀死猴子,经过上面的循环后,此时的h指向即将杀死的猴子h->prior->next = h->next;h->next->prior = h->prior;pdel = h;//pdel指向被杀死猴子的位置printf("kill is -------%d\n",pdel->data);h = h->next;//需要移动,从杀死猴子后的下一个位置开始数free(pdel);}printf("猴王是%d\n",h->data);return 0;
}
单向链表与双向(循环)链表的区别:
存储空间方面:双向存储空间大,因为每个节点中有两个指针。
效率方面:双向链表效率高,因为可以从后往前遍历。
请完成如下双向链表的删除过程: (云尖软件开发笔试试题)
A.p-> next=p->prior->next;
p->prior=p->next->prior;
free(p);
B. P->prior = p->next;
p->nest = p->prior;
free(p);
C. p->prior->next = p->next;
p->next >prior = p->prior:
free(p);
D.p->prior->next = p->next->prior;
p->next->prior=p->prior->next;
free(p);
相关文章:
【数据结构】双向链表
目录 1. 双向链表 1.1特性 1.2双向链表相关操作 1.3 双向循环链表 1. 双向链表 1.1特性 逻辑结构:线性结构 存储结构:链式存储 操作:增删改查 typedef int datatype; typedef struct node {datatype data; //数据域struct node …...
android进入fastboot
安装windows驱动。android进入fastboot模式后,需要Windows驱动来跟adb通信,所以需要预先安装Windows usb驱动,否则进入fastboot模式后,无法使用adb连接手机。 下载网址:https://developer.android.com/studio/run/win-…...
verilogHDL仿真详解
前言 Verilog HDL中提供了丰富的系统任务和系统函数,用于对仿真环境、文件操作、时间控制等进行操作。(后续会进行补充) 正文 一、verilogHDL仿真详解 timescale 1ns/1ps //时间单位为1ns,精度为1ps, //编译…...
见微知著:Tripo 开创 3D 生成新时代
关于 VAST VAST 成⽴于 2023 年 3 ⽉,是⼀家致⼒于通⽤ 3D 大模型研发的 AI 公司,公司⽬标是通过打造⼤众级别的 3D 内容创作⼯具,建⽴ 3D 的 UGC 内容平台,让基于 3D 的空间成为⽤户体验、内容表达、提升新质⽣产⼒的关键要素。 2024 年初,VAST 推出数⼗亿参数级别的 3…...
【AI自动化渗透】大模型支持的自动化渗透测试,看蚂蚁和浙大的
参考文章: https://mp.weixin.qq.com/s/WTaO54zRxtNMHaiI1tfdGw 最近,美国西北大学,浙江大学,蚂蚁集团的一些专家学者联手发表了一篇论文,介绍了一个PentestAgent的方案,实现了渗透测试自动化。 01 技术方案 图的字…...
React 中事件机制详细介绍:概念与执行流程如何更好的理解
React 的事件机制是一个非常重要的概念,它涉及到 React 如何处理用户的交互事件。React 的事件系统与传统的 DOM 事件系统有所不同,它在底层使用了事件委托和合成事件(Synthetic Events)来优化性能。下面,我们将从 Rea…...
时序数据库InfluxDB—介绍与性能测试
目录 一、简述 二、主要特点 三、基本概念 1、主要概念 2、保留策略 3、连续查询 4、存储引擎—TSM Tree 5、存储目录 四、基本操作 1、Java-API操作 五、项目中的应用 六、单节点的硬件配置 七、性能测试 1、测试环境 2、测试程序 3、写入测试 4、查询测试 一…...
解决idea中无法拖动tab标签页的问题
1、按 Ctrl Alt S 打开设置,找到路径 File | Settings | Appearance & Behavior | Appearance 2、去掉勾选 Drag-and-drop with Alt pressed only 即可...
ffplay 命令行 从视频第N帧开始读取 ffmpeg 命令行 提取第N帧图片
ffmpeg中没有直接的命令读取第N帧 但是可以通过 t N/framerate 来获取到具体第N帧的时间 然后用 -ss t进行跳转。 比如帧率(frame rate)为24fps的视频G:/1/1.mp4文件从第1000帧开始进行播放,先计算出时间为 t 41.66666 ffplay -i G:/1/1.…...
【web靶场】之upload-labs专项训练(基于BUUCTF平台)
前言 该靶场,是通过平台BUUCTF在线评测中的靶场进行的,基于linux搭建的 当然若是想要该靶场,可以采用github上的醒目,点击后面文字即可访问c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场 或者本人分享在网盘中&a…...
HTML5 Audio(音频)
HTML5 Audio(音频) HTML5 的 <audio> 元素是一个重要的革新,它为网页开发者提供了一种简单的方式来嵌入音频内容。在这篇文章中,我们将探讨 HTML5 <audio> 元素的特性、用法、浏览器兼容性,以及如何通过 JavaScript 和 CSS 对其进行控制和定制。 1. HTML5 <…...
go语言学习
字典(映射)类型 (Map) 以键值对为元素去存储元素 Map的特点: 键不能重复。 键必须是(int,bool,float,string,array)这些可以哈希的 (如果自定义类型想要作为键,需要自…...
OpenCV相机标定与3D重建(53)解决 Perspective-3-Point (P3P) 问题函数solveP3P()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 根据 3 个 3D-2D 点对应关系找到物体的姿态。 cv::solveP3P 是 OpenCV 中的一个函数,用于解决 Perspective-3-Point (P3P) 问题。该问…...
【西北工业大学主办 | EI检索稳定 | 高H值专家与会报告】2025年航天航空工程与材料技术国际会议(AEMT 2025)
2025 年航天航空工程与材料技术国际会议(AEMT 2025)将于2025年2月28日至3月2日在中国天津召开。本届会议由西北工业大学主办,由北京航空航天大学、北京理工大学作为支持单位加入,AEIC 学术交流中心协办。 AEMT 2025 旨在汇聚来自全…...
卷积神经02-CUDA+Pytorch环境安装
卷积神经02-CUDAPytorch环境安装 在使用Python进行pytorch的使用过程中遇到各种各样的版本冲突问题,在此进行记录 0-核心知识脉络 1)根据自己电脑的CUDA版本安装对应版本的Pytorch,充分的使用GPU性能2)电脑要先安装【CUDA ToolKi…...
监听器与RBAC权限模型
目录 1、监听器ServletContextListener1.1、主要用途1.2、接口方法1.3、实现步骤1.4、示例代码1.5、使用场景 2、德鲁伊数据源2.1、主要特性2.2、配置 DruidDataSource 3、RBAC权限模型3.1、什么是RBAC3.2、RBAC 的核心概念3.3、RBAC 的优势3.4、RBAC 的实现步骤 1、监听器Serv…...
根据浏览器的不同类型动态加载不同的 CSS 文件
实现思路: 安装并引入 vue 项目相关的 CSS 文件:首先确保你有为不同浏览器准备了不同的 CSS 文件(例如,style-chrome.css,style-firefox.css,style-ie.css 等)。 在 index.js 中根据浏览器类型…...
[ComfyUI]接入Google的Whisk,巨物融合玩法介绍
一、介紹 前段时间,谷歌推出了一个图像生成工具whisk,有一个很好玩的图片融合玩法,分别提供三张图片,就可以任何组合来生成图片。 最近我发现有人开发了对应的ComfyUI插件,对whisk做了支持,就来体验了下&#…...
3DGabor滤波器实现人脸特征提取
import cv2 import numpy as np# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # 相位偏移# 生成 Gabor 滤…...
一文流:Maven精讲
一文流系列是作者苦于技术知识学了-忘了,背了-忘了的苦恼,决心把技术知识的要点一笔笔✍️出来,一图图画出来,一句句讲出来,以求刻在🧠里。 该系列文章会把核心要点提炼出来,以求掌握精髓&#…...
10.STM32F407ZGT6-内部温度传感器
参考: 1.正点原子 前言: 本笔记的主要目的和意义就是,再次练习ADC的使用。 32.1 内部温度传感器简介 STM32F407 有一个内部的温度传感器,可以用来测量 CPU 及周围的温度(TA)。对于STM32F407 系列来说,该温度传感器在…...
软件测试预备知识④—NTFS权限管理、磁盘配额与文件共享
在软件测试的实际环境搭建与管理过程中,了解和掌握NTFS权限管理、磁盘配额以及文件共享等知识至关重要。这些功能不仅影响系统的安全性和稳定性,还对测试数据的存储、访问以及多用户协作测试有着深远的影响。 一、NTFS权限管理 1.1 NTFS简介 NTFS&am…...
Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能
Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能 基于SpringBoot3Vue3前后端分离的Java快速开发框架 项目简介:基于 JDK 17、Spring Boot 3、Spring Security 6、JWT、Redis、Mybatis-P…...
科研绘图系列:R语言绘制Y轴截断分组柱状图(y-axis break bar plot)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍特点意义加载R包数据下载导入数据数据预处理画图输出总结系统信息介绍 Y轴截断分组柱状图是一种特殊的柱状图,其特点是Y轴的刻度被截断,即在某个范围内省略了部分刻度。这种图表…...
省森林防火应急指挥系统
森林防火形势严峻 我国森林防火形势十分严峻,森林火灾具有季节性强、发现难、成灾迅速等特点,且扑救难度大、影响范围广、造成的损失重。因此,构建森林防火应急指挥系统显得尤为重要。 系统建设模式与架构 森林防火应急指挥系统采用大智慧…...
HTML 迷宫游戏
HTML 迷宫游戏 相关资源文件已经打包成压缩文件,可双击index.html直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢࿰…...
【面试题】技术场景 4、负责项目时遇到的棘手问题及解决方法
工作经验一年以上程序员必问问题 面试题概述 问题为在负责项目时遇到的棘手问题及解决方法,主要考察开发经验与技术水平,回答不佳会影响面试印象。提供四个回答方向,准备其中一个方向即可。 1、设计模式应用方向 以登录为例,未…...
Autoencoder(李宏毅)机器学习 2023 Spring HW8 (Boss Baseline)
1. Autoencoder 简介 Autoencoder是一种用于学习数据高效压缩表示的人工神经网络。它由两个主要部分组成: Encoder 编码器将输入数据映射到一个更小的、低维空间中的压缩表示,这个空间通常称为latent space或bottleneck。 这一过程可以看作是数据压缩,去除冗余信息,仅保留…...
Python的循环
Python的循环 Python的循环有两种,分别是for…in循环和while循环。 for…in 循环 假设我们要循环输出一个列表里的元素: names [张三,李四,王五] for name in names:print(name)执行这段代码后,会依次打印names的每一个元素:…...
车联网安全--TLS握手过程详解
目录 1. TLS协议概述 2. 为什么要握手 2.1 Hello 2.2 协商 2.3 同意 3.总共握了几次手? 1. TLS协议概述 车内各ECU间基于CAN的安全通讯--SecOC,想必现目前多数通信工程师们都已经搞的差不多了(不要再问FvM了);…...
Git | git stash命令详解
关注:CodingTechWork 引言 在日常开发中,使用Git版本控制系统时,可能会遇到需要暂时中断当前工作,去处理其他任务的情况。这时,如果直接切换分支,可能会导致当前的修改未提交而丢失或需要暂时保存修改的状…...
LeetCode hot100-100
287. 寻找重复数 给定一个包含 n 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。你设计的解决方案必须 不修改 数组…...
AWS re:Invent 2024 现场实录 - It‘s all about Scale
时隔五年,再度造访美国,也是同样的主题,参加在拉斯维加斯举行的 AWS re:Invent 大会。 会场 从 2012 起第一届开始,每年的 re:Invent 大会都放在拉斯维加斯,主会场也都放在威尼斯人酒店 (Venetian)。有小伙伴好奇这背…...
qt-C++笔记之自定义继承类初始化时涉及到parents的初始化
qt-C笔记之自定义继承类初始化时涉及到parents的初始化 code review! 参考笔记 1.qt-C笔记之父类窗口、父类控件、对象树的关系 2.qt-C笔记之继承自 QWidget和继承自QObject 并通过 getWidget() 显示窗口或控件时的区别和原理 3.qt-C笔记之自定义类继承自 QObject 与 QWidget …...
[微服务]redis数据结构
介绍 我们常用的Redis数据类型有5种,分别是: StringListSetSortedSetHash 还有一些高级数据类型,比如Bitmap、HyperLogLog、GEO等,其底层都是基于上述5种基本数据类型。因此在Redis的源码中,其实只有5种数据类型。 …...
android四大组件之一——Service
目录 一、Service概述 二、生命周期 三、权限 四、进程生命周期 五、组件与绑定Service的通信方式 1.扩展 Binder 类 2.Messenger信使 3.AIDL 七、总结 场景使用区别 一、Service概述 Service 是应用组件,代表一个应用的长时间后台运行的操作࿰…...
PythonOpenCV图片识别
在windows下面,使用python opencv 进行识别,获取到坐标。 依赖安装: pip install opencv-python pip install numpy pip install pyautogui pip install pywin32代码: import cv2 import numpy as np import pyautogui import o…...
ASP.NET Core 中使用 Cookie 身份验证
在 ASP.NET Core 中使用 Cookie 身份验证,通常是为了实现用户的登录和授权。以下是配置 Cookie 身份验证的步骤。 1. 安装必要的 NuGet 包 首先,确保项目中包含 Microsoft.AspNetCore.Authentication.Cookies 包。你可以通过 NuGet 包管理器或命令行安…...
2021 年 3 月青少年软编等考 C 语言五级真题解析
目录 T1. 红与黑思路分析T2. 密室逃脱思路分析T3. 求逆序对数思路分析T4. 最小新整数思路分析T1. 红与黑 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的…...
LeetCode带环链表题深度解析(是否带环、寻找环的入口结点)
目录 一、链表是否带环 常规方法解析: 拓展问题:那么fast一次走三步,走四步...是否还会相遇? fast :3 ,low :1 fast :4 ,low :1 总结: 二、…...
Redis--20--大Key问题解析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 大Key问题1.什么是 Redis 大 Key?在 Redis 中,大 Key 是指单个键值对的数据量非常大,可能包含大量数据。 2. Redis大Key的危害3.…...
如何使用Yarn Workspaces实现Monorepo模式在一个仓库中管理多个项目
Yarn Workspaces是Yarn提供的一种依赖管理机制,它支持在单个代码仓库中管理多个包的依赖。这种机制非常适合需要多个相互依赖的包的项目,能够减少重复依赖,加快依赖安装速度,并简化依赖管理。下面将详细介绍如何使用Yarn Workspac…...
测试ip端口-telnet开启与使用
前言 开发过程中我们总会要去测试ip通不通,或者ip下某个端口是否可以联通,为此我们可以使用telnet 命令来实现。 一、telnet 开启 可能有些人使用telnet报错,不是内部命令,可以如下开启: 1、打开控制面板ÿ…...
c#版本、.net版本、visual studio版本之间的对应关系
最近这几年一直没用过c#开发,都是从事Qt c开发工作,回想一下之前c#还要追溯到2019年,算算时间大概都已过去4,5年了,时间飞快。 2019真是个神奇的数字,vs2019是我用的时间最长的一个IDE,新冠起始…...
大语言模型训练
步骤 Self-Supervised Pre-Training,简称SPTSupervised Fine-Tuning,简称SFTLearning from Human Feedback,简称LfHF Self-Supervised Pre-Training 自监督预训练(Self-Supervised Pre-Training,简称SPT)…...
ElasticSearch | Elasticsearch与Kibana页面查询语句实践
关注:CodingTechWork 引言 在当今大数据应用中,Elasticsearch(简称 ES)以其高效的全文检索、分布式处理能力和灵活的查询语法,广泛应用于各类日志分析、用户行为分析以及实时数据查询等场景。通过 ES,用户…...
idea快捷键
IDEA常见快捷键 Ctrl A 全写 Ctrl C 粘贴 Ctrl V 复制 Ctrl F 搜索 Ctrl R 替换 Ctrl Z 撤销 Ctrl D 复制行 Ctrl X 删除行,并且被删除的行复制到剪贴板中 Ctrl Y 删除一行 Ctrl Shift Z 反撤销 IDEA重要快捷键 Ctrl / 单行注释&…...
2024年全国信息素养大赛-图形化编程-省赛-绘制正方和三角形
绘制正方和三角形 【编程实现】 使用自制积木,绘制正方形和三角形。 【具体要求】 *程序尽量简洁。 1.画出喜庆的红色图形。 2.先画正方形,再画三角形。 3.正方形和三角形不重叠。 4.正方形和三角形不超出背最中红框的范围。 题目程序演示可点击…...
二进制编码 和 Base64编码
我需要将音频数据存为字符串,不知道存为 二进制编码 和 Base64编码 以下内容来自 DeepSeek : 1. 二进制编码 优点: 高效:二进制编码直接存储原始数据,占用空间小,处理速度快。适合传输:在需要高效传输的…...
微信小程序防止重复点击事件
直接写在app.wpy里面,全局可以调用 // 防止重复点击事件preventActive(fn) {const self this;if (this.globalData.PageActive) {this.globalData.PageActive false;if (fn) fn();setTimeout(() > {self.globalData.PageActive true;}, 3000); //设置该时间内…...