【数据结构】链表
目录
编辑
1.2链表
1.2.1 链表的特性
1.2.2 单向链表
遍历无头单向链表
遍历有头单向链表
链表尾插法练习
1.2.3 单向链表的函数操作
单向链表的特点:
1.2链表
链表又称单链表、链式存储结构,用于存储逻辑关系为“一对一”的数据。
和顺序表不同同,使用链表存储数据,不强制要求数据在内存中集中存储,各个元素可以分散存储在内存中。
例如存数据1 2 3
需要通过指针链接
所以在链表中,每个数据元素可以配有一个指针用于找到下一个元素即节点,这意味着,链表上的每个“元素”都长下图这个样子:
1.2.1 链表的特性
逻辑结构:线性结构
存储结构:链式存储
特点:内存不连续,大小不固定,通过指针链接。可以解决顺序表的长度固定的问题,以及插入删除麻烦的问题。
操作:增删改查
struct node
{int data; //数据域:存放数据struct node *next; //指针域:存放下一个节点的地址
}
1.2.2 单向链表
有头链表:存在一个头节点,头节点数据域无效,指针域有效。
无头链表:每一个数据域和指针域都有效
遍历无头单向链表
#include <stdio.h>
#include <stdlib.h>typedef char datatype;
typedef struct node
{datatype data; //数据域:用来存放数据struct node *next; //指针域:用来存放下一个节点的地址
} link_node_t, *link_node_p;int main(int argc, char const *argv[])
{//1. 定义4个节点link_node_t A = {'a', NULL};link_node_t B = {'b', NULL};link_node_t C = {'c', NULL};link_node_t D = {'d', NULL};//2. 将4个节点连接起来A.next = &B;B.next = &C;C.next = &D;//3. 定义一个头指针,指向第一个节点,用于遍历链表。link_node_p p = &A;//4. 遍历无头单向链表while (p != NULL){printf("%c ", p->data); //打印节点中的数据p = p->next; //让p指向下一个节点}printf("\n");return 0;
}
遍历有头单向链表
#include <stdio.h>
#include <stdlib.h>typedef char datatype;
typedef struct node
{datatype data; //数据域:用来存放数据struct node *next; //指针域:用来存放下一个节点的地址
} link_node_t, *link_node_p;int main(int argc, char const *argv[])
{//1. 定义4个节点link_node_t A = {'a', NULL};link_node_t B = {'b', NULL};link_node_t C = {'c', NULL};link_node_t D = {'d', NULL};//2. 将4个节点连接起来A.next = &B;B.next = &C;C.next = &D;//3. 定义一个头节点,数据域无效,指针域要赋值为第一个有效节点的地址。link_node_t H = {'\0', &A};//4. 定义一个头指针,指向头节点,用于遍历链表。link_node_p p = &H;//5. 遍历有头链表#if 0 //条件编译,相当于代码的开关,条件为真就编译以下代码//方法一:p = p->next; //先跨越头节点,指向有效的第一个节点while (p != NULL) //相当于遍历无头链表{printf("%c ", p->data);p = p->next;}printf("\n");#else//方法二while (p->next!=NULL){p=p->next;printf("%c ",p->data);}printf("\n");#endifreturn 0;
}
链表尾插法练习
写一个有头单向链表,用于保存输入的学生成绩,实现一输入学生成绩就创建一个新的节点,将成绩保存起来。再将该节点链接到链表的尾,直到输入-1结束。
要求:每个链表的节点由动态内存分配得到 , 也就是用malloc。
过程:
1. malloc申请空间link_node_t大小作为头节点
2. 将新节点放到链表尾部
#include <stdio.h>
#include <stdlib.h>typedef struct node
{int score;struct node *next;
} link_node_t, *link_node_p;int main(int argc, char const *argv[])
{link_node_p pnew=NULL; //用于指向新节点link_node_p ptail=NULL; //用于指向尾节点int score = -1;//1. 定义一个头节点,定义一个头指针指向头节点link_node_p h = (link_node_p)malloc(sizeof(link_node_t));if(NULL==h){perror("h malloc err");return -1;}h->next=NULL; //初始化头节点ptail=h; //尾指针一开始指向头节点,因为只有一个头节点此时//2. 循环输入学生成绩,新建节点存入并且链接到链表中,直到-1结束while (1){scanf("%d", &score);if (score == -1)break;//(1)创建一个新节点用来保存学生成绩pnew=(link_node_p)malloc(sizeof(link_node_t));if(NULL==pnew){perror("pnew malloc err");return -1;}//(2)对新节点的数据域和指针域赋值pnew->score=score;pnew->next=NULL;//(3)将新节点链接到链表尾部ptail->next=pnew;//(4)移动尾指针到新节点,因为有了新尾巴ptail=pnew;}//3. 遍历有头链表while (h->next!=NULL){h=h->next;printf("%d ",h->score);}return 0;
}
1.2.3 单向链表的函数操作
创空:
插入:
按位置删除:
按数据删除:
#include <stdio.h>
#include <stdlib.h>typedef int datatype;
typedef struct node
{datatype data; //数据域:用来存放数据struct node *next; //指针域:用来存放下一个节点的地址
} link_node_t, *link_node_p;//创建一个空的有头单项链表
link_node_p createEmptyLinkList()
{//创建头节点link_node_p h = (link_node_p)malloc(sizeof(link_node_t));if (NULL == h){perror("h malloc err");return NULL;}h->next = NULL;return h;
}//计算链表的长度。
int lengthLinkList(link_node_p p)
{int len = 0;while (p->next != NULL){len++;p = p->next;}return len;
}//向单向链表的指定位置插入数据
//p保存链表的头指针 post 插入的位置 data插入的数据
int insertIntoPostLinkList(link_node_p p, int post, datatype data)
{int i;link_node_p pnew;//1. 容错判断if (post < 0 || post > lengthLinkList(p)){printf("insertIntoPostLinkList err\n");return -1;}//2. 让指针移动到插入位置的前一个节点for (i = 0; i < post; i++)p = p->next;//3. 开辟一个新节点pnew = (link_node_p)malloc(sizeof(link_node_t));if (NULL == pnew){perror("pnew malloc err");return -1;}//4. 初始化新节点pnew->data = data;pnew->next = NULL;//5. 链接:先连后面,再连前面pnew->next = p->next;p->next = pnew;return 0;
}//遍历单向链表
void showLinkList(link_node_p p)
{while (p->next != NULL){p = p->next;printf("%d ", p->data);}printf("\n");
}// 删除单向链表中指定位置的数据 post 代表的是删除的位置
int deletePostLinkList(link_node_p p, int post)
{link_node_p pdel = NULL;int i;//1. 容错判断if (post < 0 || post >= lengthLinkList(p)){printf("deletePostLinkList err\n");return -1;}//2. 移动p到删除节点的前一个节点for (i = 0; i < post; i++)p = p->next;//3. 定义指针pdel记录要删除节点,也就是记录p所指节点的的下一个节点pdel = p->next;//4. 跨过被删除节点,也就是p的next要指向pdel的nextp->next = pdel->next;//5. 释放被删除节点free(pdel);pdel = NULL;return 0;
}//判空
int isEmptyLinkList(link_node_p p)
{return p->next == NULL;
}//清空
// 思想:
// 循环进行删除,每次删除的头节点的下一个节点:
// (1)定义一个pdel,指向被删除节点
// (2)跨过被删除节点
// (3)释放被删除节点
void clearLinkList(link_node_p p)
{link_node_p pdel = NULL;while (p->next != NULL){pdel = p->next; //每次删除的都是头节点的后一个p->next = pdel->next;free(pdel);pdel = NULL;}
}//查找指定数据出现的位置 data被查找的数据 //search 查找
int searchDataLinkList(link_node_p p, datatype data)
{int post = 0; //记录查找的位置//遍历有头链表while (p->next != NULL){p = p->next;if (p->data == data)return post;post++;}return -1;
}//修改链表中指定的数据
int changePostLinkList(link_node_p p, int post, datatype data)
{//1. 容错判断if (post < 0 || post >= lengthLinkList(p)){perror("changePostLinkList err");return -1;}//2. 将指针移动到要修改的节点for (int i = 0; i <= post; i++)p = p->next;//3.修改数据p->data = data;return 0;
}//删除单向链表中出现的指定数据,data代表将单向链表中出现的所有data数据删除
int deleteDataLinkList(link_node_p p, datatype data)
{link_node_p pdel = NULL; //用于指向删除的节点//1. 定义一个指针q指向头的后一个,用于遍历遍历链表。相当于遍历无头链表。link_node_p q = p->next;//2. 用q去遍历无头链表,将每个节点的数据域和data比较,判断成功就删除节点,不成功p和q都向后走while (q != NULL){if (q->data == data) //相等{//删除操作//(1)将pdel指向被删除节点pdel = q;//(2)跨过被删除节点p->next = pdel->next;//(3)释放被删除节点free(pdel);//(4)让q向后移动继续遍历链表q = p->next;}else //不相等{//q和p都向后走一个单位p = p->next;q = p->next;}}
}//链表倒置(转置)
// 解题思想:
// 1)将头节点与当前链表断开,断开前保存下头节点的下一个节点,保证后面链表能找得到,定义一个q保存头节点的下一个节点,断开后前面相当于一个空的链表,后面是一个无头的单向链表。
// 2)遍历无头链表的所有节点,将每一个节点当做新节点插入空链表头节点的下一个节点(每次插入的头节点的下一个节点位置)。
void reverseLinkList(link_node_p p)
{link_node_p temp = NULL; //用来临时保存q的下一个节点,防止头插以后老链表找不到。//1.定义一个q保存头节点的下一个节点,用于遍历一个无头链表。link_node_p q = p->next;//2. 将头节点和老链表断开,需要用头插法做一个新的转置以后的链表p->next = NULL;//3.用q遍历无头链表while (q != NULL){//头插//(1)头插之前用temp保存q的下一节点,以免插入以后老链表找不到temp = q->next;//(2)头插:先连后面,再连前面q->next = p->next;p->next = q;//(3)q移动到temp处,继续找下一个节点来插入。q = temp;}
}int main(int argc, char const *argv[])
{link_node_p p = createEmptyLinkList();insertIntoPostLinkList(p, 0, 1);insertIntoPostLinkList(p, 1, 2);insertIntoPostLinkList(p, 2, 3);insertIntoPostLinkList(p, 3, 100);insertIntoPostLinkList(p, 4, 100);insertIntoPostLinkList(p, 5, 100);reverseLinkList(p);showLinkList(p);deletePostLinkList(p, 0);showLinkList(p);changePostLinkList(p, 4, 1000);showLinkList(p);// clearLinkList(p);// printf("is empty? %d\n", isEmptyLinkList(p));deleteDataLinkList(p, 100);showLinkList(p);return 0;
}
单向链表的特点:
- 链表内存空间不连续
- 大小不固定
- 查和改麻烦,增和删简单
相关文章:
【数据结构】链表
目录 编辑 1.2链表 1.2.1 链表的特性 1.2.2 单向链表 遍历无头单向链表 遍历有头单向链表 链表尾插法练习 1.2.3 单向链表的函数操作 单向链表的特点: 1.2链表 链表又称单链表、链式存储结构,用于存储逻辑关系为“一对一”的数据。 和顺序表…...
RabbitMQ解决消息积压的方法
目录 减少发送mq的消息体内容 增加消费者数量 批量消费消息 临时队列转移 监控和预警机制 分阶段实施 最后还有一个方法就是开启队列的懒加载 这篇文章总结一下自己知道的解决消息积压得方法。 减少发送mq的消息体内容 像我们没有必要知道一个的中间状态,只需…...
机器学习是?
机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科; 是人工智能(AI)的一个分支,也是AI的核心领域,它专注于开发算法和模型&#…...
jupyter出现“.ipynb appears to have died. It will restart automatically.”解决方法
原因 解决方法:更新jupyter的版本 1.打开anaconda prompt 2、更新jupyter版本 在anaconda prompt输入以下指令 conda update jupyter如图:...
计算机毕业设计PyHive+Hadoop深圳共享单车预测系统 共享单车数据分析可视化大屏 共享单车爬虫 共享单车数据仓库 机器学习 深度学习
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
c++开源协程库libgo介绍及使用,srs协程,boost协程 Boost::fiber
https://www.cnblogs.com/qwsdcv/p/9115364.html Boost - 从Coroutine2 到Fiber - 开学五年级了 - 博客园 协程就是由程序员控制跑在线程里的“微线程”。它可以由程序员调度,切换协程时代价小(切换根据实现不同,消耗的CPU周期从几十到几百不等)&#x…...
微服务实现高并发 秒杀系统,前后端实现
一、前端实现 前端项目初始化 首先,我们需要创建一个新的 Vue 3 项目。你可以使用 Vue CLI 来快速搭建项目。 安装 Vue CLI(如果尚未安装) bash npm install -g vue/cli 创建 Vue 项目 bash vue create seckill-frontend cd seckill-f…...
Eureka缓存机制
一、Eureka的CAP特性 Eureka是一个AP系统,它优先保证可用性(A)和分区容错性(P),而不保证强一致性(C)。这种设计使得Eureka在分布式系统中能够应对各种故障和分区情况,保…...
PHP语言的学习路线
PHP语言的学习路线 PHP(Hypertext Preprocessor)是一种广泛使用的开源服务器端脚本语言,尤其适用于Web开发。由于其易学易用、功能强大,PHP成为了许多动态网站和Web应用程序开发的首选语言。随着Web3.0和云计算的兴起,…...
python学opencv|读取图像(二十八)使用cv2.warpAffine()函数平移图像
【1】引言 前序已经对图像操作进行了广泛的学习,包括读取、放大缩小,改变BGR通道值等,相关链接包括且不限于: python学opencv|读取图像-CSDN博客 python学opencv|读取图像(三)放大和缩小图像_python(1)使…...
[Linux]Mysql9.0.1服务端脱机安装配置教程(redhat)
前言 本教程适用于在yum源不可用的LInux主机上安装Mysql的场景。 以redhat系主机做操作示例,debian系主机可参照步骤,将对应的rpm -ivh命令换成dpkg -i。 1. 官网下载安装包 https://dev.mysql.com/downloads/mysql/ 1.1 版本分类 MySQL Enterprise…...
个人 ALL IN ONE 方案搭建方案分享(从硬件到软件)及内网穿透方案
这里只做大概方案分享,每个虚拟机的部署细节滤过。 个人 ALL IN ONE 方案搭建方案分享 本指南将详细介绍如何基于现有硬件搭建一体化家庭/个人服务器解决方案,涵盖从软硬件配置、系统安装到功能实现以及性能优化的全过程。实现集 软路由、旁路由、NAS 网…...
TrustRAG:增强RAG系统鲁棒性与可信度的创新框架
在人工智能飞速发展的今天,大语言模型(LLMs)凭借其强大的语言处理能力在诸多领域大放异彩。检索增强生成(RAG)系统(面向企业RAG(Retrieval Augmented Generation)系统的多维检索框架…...
使用证件照制作软件的常见问题及解决方案
在数字化时代,证件照的制作变得越来越简单。借助各种证件照制作软件,我们可以轻松在家中制作出符合要求的证件照。然而,用户在使用这些软件时,可能会遇到一些常见问题。为了帮助您顺利制作出满意的证件照,我们整理了一…...
通过gradle发布aar或jar携带sources-jar到maven nexus
找了很久,没有找到满意的。终于找到一个好的办法。 gradle7.x适用。比以前的写法简洁。 发布传统的jar工程 比如okhttp,fastjson等项目,纯java工程。 直接创建新文件publish.gradle: apply plugin: maven-publishProperties properties …...
SAP推出云端ERP解决方案,加速零售行业数字化转型
2025年1月9日,SAP发布了一款专为零售行业设计的云端ERP行业解决方案——S/4HANA Cloud Public Edition,进一步推动企业向云端迁移。这款解决方案旨在集中运营数据,整合财务、采购和商品管理流程,以帮助零售企业优化运营效率。 核…...
RK3568 Android 13 内置搜狗输入法小计
问:为什么写? 答:网上搜出来的都试过了,不行!下面直接上代码和注意事项! 首先到这个目录(/RK3568/Rockchip_Android13_SDK_Release/device/rockchip/rk356x/tl3568_evm/preinstall)…...
微服务-Nacos(注册中心)
Nacos Nacos可以看作注册中心配置中心,比Eureka更加强大。 注册中心 在父工程中引入SpringCloudAlibaba的版本依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId&g…...
【数据结构:前缀树Trie】
目录 前言前缀树介绍和应用一、前缀树的定义前缀树的问题和思考前缀树的映射思想前缀树三大性质 二.前缀树节点结构三. 前缀树接口介绍和实现四个接口API1. insert(String word)2. search(String word)3. startsWith(String pre)4. delete(String word) API实现1. 查询操作sear…...
如何让QPS提升20倍
一、什么是QPS QPS,全称Queries Per Second,即每秒查询率,是用于衡量信息检索系统(例如搜索引擎或数据库)或请求-响应系统(如Web服务器)每秒能够处理的请求数或查询次数的一个性能指标。以下是…...
时间复杂度简介
定义 时间复杂度是用来衡量算法运行时间随着输入规模增长而增长的量级。简单来说,它描述了算法执行时间与数据规模之间的关系。我们通常用大O符号( O O O)来表示时间复杂度。例如,对于一个简单的加法运算,它的执行时间…...
记一次sealos部署k8s集群之delete了第一台master如何恢复
记一次sealos部署k8s集群之delete了第一台master如何恢复 一、背景描述 使用sealos部署了一套K8S集群 master信息:172.27.100.1、172.27.100.2、172.27.100.3 node信息:172.27.100.4、172.27.100.5 sealos安装在172.27.100.1节点,根目录下/root/.sealos/文件还在! [root…...
【json】
JSON JSON是一种轻量级的,按照指定的格式去组织和封装数据的数据交互格式。 本质上是一个带有特定格式的字符串(py打印json时认定为str类型) 在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互,类似于计算机普通话 python与json关系及相互转换…...
TypeScript语言的并发编程
TypeScript语言的并发编程 引言 随着现代应用程序的复杂性不断增加,性能和用户体验的重要性显得尤为突出。在这种背景下,并发编程应运而生,成为提升应用程序效率的重要手段。在JavaScript及其超集TypeScript中,尽管语言本身是单…...
左值引用(Lvalue Reference)和右值引用(Rvalue Reference)详解
左值引用(Lvalue Reference)和右值引用(Rvalue Reference)详解 文章目录 左值引用(Lvalue Reference)和右值引用(Rvalue Reference)详解1. 什么是左值和右值?左值&#x…...
音视频入门基础:RTP专题(1)——RTP官方文档下载
一、引言 实时传输协议(Real-time Transport Protocol,简写RTP)是一个网络传输协议,由IETF的多媒体传输工作小组1996年在《RFC 1889》中公布的。 RTP作为因特网标准在《RFC 3550》有详细说明。而《RFC 3551》详细描述了使用最小…...
【Flutter】使用ScrollController配合EasyRefresh实现列表预加载:在还未滑动到底部时加载下一页数据
需求/背景 在我们的业务场景中,列表的加载使用easy_refresh组件: https://pub.dev/packages/easy_refresh 大概效果是往上滑动到一定的offset会触发一个上滑加载,可以触发一些网络请求拉取列表后面的数据来展示。 这种模式一般在一页翻完…...
js实现md5加密
要在JavaScript中实现MD5加密并截取特定位置的字符,你可以使用像crypto-js这样的库。首先,你需要确保你的项目中包含了crypto-js库。如果你是在浏览器环境中,可以通过CDN引入;如果是在Node.js环境中,可以通过npm安装。…...
[java基础-集合篇]LinkedList源码粗析
LinkedList 的数据结构 实现List、Deque 接口,基于 双向链表实现的列表。与基于数组的 ArrayList 不同,基于链表的LinkedList 允许在列表的任何位置快速地插入和删除元素。 Java中LinkedList实现了Deque,它提供了 add, offer, remove, poll, …...
【Rust自学】11.1. 编写和运行测试
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.1.1. 什么是测试 在Rust里一个测试就是一个函数,它被用于验证非测试代码的功能是否和预期一致。 在一个测试的函数体里通…...
移动端屏幕分辨率rem,less
谷歌模拟器:能直接看到移动端效果 屏幕分辨率 右键电脑桌面 ,点击显示设置 PC端是逻辑分辨率,移动端代码也是参考逻辑分辨率 网页端宽度和逻辑分辨率尺寸相同 手机屏幕尺寸不同,网页宽度均为 100% 所以就需要添加视口标签&#x…...
rk3568 , buildroot , qt ,使用sqlite, 动态库, 静态库
问题说明: 客户反馈 ,buildroot 系统 ,使用qt 使用sqlite ,有报错,无法使用sqlite. 测试情况说明: 我自己测试,发现, buildroot 自己默认就是 使能了 sqlite 的。 是否解决说明&…...
web-app uniapp监测屏幕大小的变化对数组一行展示数据作相应处理
web-app uniapp监测屏幕大小的变化对数组一行展示数据作相应处理 1.uni.getSystemInfoSync().screenWidth; 获取屏幕宽度 2.uni.onWindowResize() 实时监测屏幕宽度变化 3.根据宽度的大小拿到每行要展示的数量itemsPerRow 4.为了确保样式能够根据 items…...
Airflow:TimeSensor感知时间条件
在数据管道工作流中,任务可能需要在特定的时间执行,或者在继续之前等待一定的时间。为了满足这些需求,Apache Airflow提供了TimeSensor,这是一种内置Sensor,可以监控当前时间,并在达到指定时间时触发后续任…...
使用Python和Neo4j驱动程序来实现小规模数据的CSV导入
要将CSV数据导入到Neo4j数据库中,你可以使用Neo4j提供的工具,比如neo4j-admin import命令(适用于大规模数据导入),或者使用Python的Neo4j驱动程序通过Cypher查询逐行插入数据(适用于小规模数据导入…...
网络安全测评技术与标准
网络安全测评概况 网络安全测评是网络信息系统和IT技术产品的安全质量保障。本节主要阐述网络安全测评的概念,给出网络安全测评的发展状况。 18.1.1 网络安全测评概念 网络安全测评是指参照一定的标准规范要求,通过一系列的技术和管理方法,获…...
某漫画网站JS逆向反混淆流程分析
文章目录 1. 写在前面1. 接口分析2. 反混淆分析 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Pyth…...
如何获取文件的MIME类型
文章目录 1. 概念介绍2. 方法与类型2.1 使用方法2.2 常见类型3. 示例代码4. 内容总结我们在上一章回中介绍了"如何加载本地图片"相关的内容,本章回中将介绍如何获取文件类型.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中提到的文件类型是指MI…...
Three.js 基础概念:构建3D世界的核心要素
文章目录 前言一、场景(Scene)二、相机(Camera)三、渲染器(Renderer)四、物体(Object)五、材质(Material)六、几何体(Geometry)七、光…...
Linux web服务器
Linux 作为 Web 服务器操作系统 安装 Web 服务器软件(以 Apache 为例) 步骤一:更新系统软件包列表 在 CentOS 系统中,使用命令 yum update -y 这个命令会连接到 CentOS 的软件包仓库,检查所有已安装软件包是否有更…...
Linux 下信号的保存和处理
信号的几个状态 信号抵达: 当接收到的信号被处理时, 此时就成为信号的抵达信号的未决: 从信号的产生到信号抵达这个时间段之间, 称为信号未决信号阻塞: 当进程设置了某个信号为阻塞后, 这个进程就不会在接收到这个信号信号忽略: 将信号设置为忽略后, 接收到这个信号, 对这个信…...
宝塔安装教程,bt怎么安装 linux
Centos安装脚本 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 37a09b35 Ubuntu/Deepin安装脚本 wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo b…...
java通过ocr实现识别pdf中的文字
需求:识别pdf文件中的中文 根据github项目mymonstercat 改造,先将pdf文件转为png文件存于临时文件夹,然后通过RapidOcr转为文字,最后删除临时文件夹 1、引入依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId&g…...
基于SpringBoot的养老院管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
阿里云发现后门webshell,怎么处理,怎么解决?
当收到如下阿里云通知邮件时,大部分管理员都会心里一惊吧!出现Webshell,大概是网站被入侵了。 尊敬的 xxxaliyun.com: 云盾云安全中心检测到您的服务器:47.108.x.xx(xx机)出现了紧急安全事件…...
韩顺平老师Linux学习笔记【持续更新...】
1、课程内容 1.1、课程大纲 1.2、Linux使用在哪些地方 Linux运维工程师Linux嵌入式工程师Linux下开发项目:JavaEE、大数据、Python、PHP、C/C、Go 1.3、Linux的应用领域 个人桌面领域服务器领域(最强领域)嵌入式领域 2、Linux入门 2.1、…...
Cognitive architecture 又是个什么东东?
自Langchain: https://blog.langchain.dev/what-is-a-cognitive-architecture/ https://en.wikipedia.org/wiki/Cognitive_architecture 定义 A cognitive architecture refers to both a theory about the structure of the human mind and to a computational…...
【css】浏览器强制设置元素状态(hover|focus……)
直接上步骤: 打开浏览器控制台 → 找到样式选项 → 找到:hov选项 → 点击:hov选项,会展开【设置元素状态】。 只要选中就会展示出自己写在css里面的该种状态下的样式了。...
leetcode热题100——NO.160相交链表——JAVA
一、题目描述 题目:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后,链表必…...
基于Media+Unity的手部位姿三维位姿估计
使用mediapipe Unity 手部位姿三维位姿估计 参考文章 基于Mediapipe的姿势识别并同步到Unity人体模型中 MediapipeUnity3d实现虚拟手_unity mediapipe-CSDN博客 需求 我的需求就是快速、准确的跟踪手部位姿并实现一个三维显示。 主要思路 搭建mdeiapipe系统,…...