C语言-数据结构-树
目录
一,树
1,基本术语:
2,树的性质:
3,树的遍历:
4,森林的遍历:
5,树和二叉树的转换:
6,二叉树和森林的转化:
7,树的存储:
1,双亲表示法
2、孩子链存储结构
3、孩子兄弟链存储结构
二,二叉树:
1,二叉树的性质:
2,二叉树的遍历:
3,二叉树的存储结构:
顺序存储:
链式存储:
4,二叉树遍历实现
5,基本算法
(1)查找二叉树:
(2)树的高度:
(3)节点个数:
(4)叶子结点个数:
(4)复制二叉树:
(4)左右孩子进行交换:
(5)找到元素x的层次:
6,练习:
三,线索二叉树
1,相关概念:
2,标志位的确立:
四,哈夫曼树:
1,相关概念:
2,构建哈夫曼树:
3,哈夫曼编码:
树形式化定义:T={D,R}。D是包含n个节点的有限集合 (n≥0)。除非n=0时为空树,否则关系R满足以下条件: 有且仅有一个节点 d0∈D,它对于关系R来说没有前趋节点,节点d0称作树的根节点。 除根节点外,每个节点有且仅有一个前趋节点。 D中每个节点可以有零个或多个后继节点
一,树
1,基本术语:
1、节点的度与树的度:树中一个节点的子树的个数称为该节点 的度。树中各节点的度的最大值称为树的度 |
2、分支节点与叶节点:度不为零的节点称为非终端节点,又叫分 支节点。度为零的节点称为终端节点或叶节点(或叶子节点)。 |
3、孩子节点、双亲节点和兄弟节点:在一棵树中,每个节点的后继,被称作该节点的孩子节点(或子女节点)。相应地,该节点被称作孩子节点的双亲节点(或父母节点)。 具有同一双亲的孩子节点互为兄弟节点。 |
4、子孙节点和祖先节点:在一棵树中,一个节点的所有子树中的节点称为该节点的子孙节点。 从根节点到达一个节点的路径上经过的所有节点被称作该节点的祖先节点 |
5、节点的层次和树的高度:树中的每个节点都处在一个层次上。 节点的层次从树根开始定义,根节点为第1层,它的孩子节点为第2层。 树中节点的最大层次称为树的高度(或树的深度)。 |
6、森林:n(n>0)个互不相交的树的集合称为森林。 |
2,树的性质:
性质1 :树中的节点数等于所有节点的度数加1。 |
性质2 度为m的树中第i层上至多有m^(i-1)个节点(i≥1)二叉树:2^(i-1) |
性质3 高度为h的m次树至多有(m^h-1)/(m-1)个节点。二叉树:2^h-1 |
性质4 具有n个节点的m次树的最小高度为[logm (n(m-1))+1](向下取整)。二叉树:log2(n)+1 |
性质5 度为m的树中:n = n0+ n1 + … + nm |
3,树的遍历:
先根遍历 : 若树不空,则先访问根节点,然后依次先根遍历各棵子树。 |
后根遍历 : 若树不空,则先依次后根遍历各棵子树,然后访问根节点。 |
层次遍历: 若树不空,则自上而下、自左至右访问树中每个节点 |
4,森林的遍历:
先序遍历:从左至右依次对森林中的每一棵树进行先根遍历 |
中序遍历:依次从左至右对森林的每一棵树进行后根遍历 |
5,树和二叉树的转换:
树->二叉树:每个节点的第一个孩子,变成左孩子,一个节点的兄弟变成右孩子
二叉树->树:二叉树节点的右孩子变成自己的兄弟,左孩子依旧是孩子
树 | 二叉树 | |
树T->二叉树 | 先根遍历 | 先序遍历 |
树T->二叉树 | 后根遍历 | 中序遍历 |
一棵树的先根遍历和后根遍历可以唯一确定这棵树 | ||
将森林T转换为二叉树B,若T中有n个非叶子节点, 则二叉树B中无右孩子的节点个数是n+1 |
6,二叉树和森林的转化:
森林->二叉树:
将森林中的每一棵树都转化成二叉树,每一棵树的根结点互为兄弟,按照兄弟变右孩子的思路进行转换即可
二叉树->森林:
二叉树根结点的右孩子变成自己的兄弟,再将每一棵二叉树转换成森林
7,树的存储:
1,双亲表示法
第一列表示节点的数据,第二列表示双亲节点的位置下标
2、孩子链存储结构
3、孩子兄弟链存储结构
二,二叉树:
1,二叉树的性质:
性质1 非空二叉树上叶节点数等于双分支节点数加1。即: n0=n2+1。 |
性质2 非空二叉树上第i层上至多有2^(i-1)个节点(i≥1)。 |
性质3 高度为h的二叉树至多有2h-1个节点(h≥1)。 |
性质4 具有n个节点的二叉树最小高度为log2(n)+1(向下取整) |
性质5 (完全二叉树)若编号为i的节点有左孩子节点,则左孩子节点的编号为2i; 若编号为i的节点有右孩子节点,则右孩子节点的编号为2i+1。(i≥1) |
性质6 (完全二叉树)n1的个数可由n来决定,如果n为奇数,则n1=0,如果n为偶数,则n1=1 |
性质7 含有n个节点不相似的二叉树有:![]() |
2,二叉树的遍历:
1、先序遍历:访问根节点; 先序遍历左子树; 先序遍历右子树。 |
2、中序遍历:中序遍历左子树; 访问根节点; 中序遍历右子树。 |
3、后序遍历:后序遍历左子树; 后序遍历右子树; 访问根节点。 |
4, 层次遍历: 若树不空,则自上而下、自左至右访问树中每个节点 |
3,二叉树的存储结构:
顺序存储:
存储特点:对于 对于 完全二叉树来说,其顺序存储是十分合适的。 一般的二叉树,特别是对于那些单分支节点较多的二叉树来说 是很不合适的,因为可能只有少数存储单元被利用,特别是对退化 的二叉树(即每个分支节点都是单分支的),空间浪费更是惊人。
链式存储:
二叉存储的特点:除了指针外,二叉链 比较节省存储空间。占用的存储空间与树形 没有关系,只与树中节点个数有关。 在二叉链中, 找一个节点的孩子很容易,但找其双亲不方便。
在二叉链中,空指针的个数:n+1(n为节点个数)
4,二叉树遍历实现
//先序遍历
void PreOrder(BTNode *b){if (b!=NULL){printf("%c ",b->data);PreOrder(b->lchild);PreOrder(b->rchild);}}
//中序遍历
void InOrder(BTNode *b){if (b!=NULL){InOrder(b->lchild);printf("%c ",b->data);InOrder(b->rchild);}}
//后序遍历
void PostOrder(BTNode *b){if (b!=NULL){PostOrder(b->lchild);PostOrder(b->rchild);printf("%c ",b->data);}}
时间复杂度/空间复杂度均为:O(n)
层序遍历:使用一个队列。 I. 将根节点进队; II. 队不空时循环:从队列中出列一个节点*p,访问它; 若它有左孩子节点,将左孩子节点进队; 若它有右孩子节点,将右孩子节点进队。
void LevelOrder(BTNode *b){BTNode * p;SQQueue *qu;initQueue(qu);enQueue(qu,b);while(!QueueEmpty(qu)){deQueue(qu,p);printf("%c",p->data); if(p->Lchild!=NULL)enQueue(qu,p->Lchild);if(p->rchild!=NULLL)enQueue(qu,p->rchild)}
}
5,基本算法
(1)查找二叉树:
BTNode *FindNode(BTNode *b,ElemType x)
{ BTNode *p;if (b--NULL) return NULL;else if (b->data--x) return b; else { p=FindNode(b->Ichild,x); if (p!-NULL) return p; else return FindNode(b->rchild,x);}
}
(2)树的高度:
int BTNodeDepth(BTNode *b){int lchilddep,rchilddep;if (b==NULL) return(0);else{lchilddep=BTNodeDepth(b->lchild);rchilddep=BTNodeDepth(b->rchild);return(lchilddep>rchilddep)? (lchilddep+1):(rchilddep+1));}}
(3)节点个数:
int Nodes(BTNode *b){ if (b==NULL) return 0;elsereturn Nodes(b->lchild)+Nodes(b->rchild)+1}
(4)叶子结点个数:
int LeafNodes(BTNode *b){int num1,num2;if (b==NULL) return 0;else if (b->lchild==NULL && b->rchild==NULL) return 1;else{num1=LeafNodes(b->lchild);num2=LeafNodes(b->rchild);return (num1+num2)}}
(4)复制二叉树:
void Copy(BTNode *b,BTNode *&t){ if (b==NULL) t=NULL;else{ t=(BTNode *)malloc(sizeof(BTNode));t->data=b->data;Copy(b->lchild,t->lchild); Copy(b->rchild,t->rchild);}}
(4)左右孩子进行交换:
void Swap(BTNode *b,BTNode *&t){ if (b==NULL) t=NULL;else{ t=(BTNode *)malloc(sizeof(BTNode));t->data=b->data;Swap(b->lchild,t->rchild); //递归交换左子树Swap(b->rchild,t->lchild);}}
(5)找到元素x的层次:
int Level(BTNode *b,ElemType x,int h){if (b==NULL) return 0;else if (b->data==x) return h;else{l=Level(b->lchild,x,h+1);if (l==0)return Level(b->rchild,x,h+1);else return l;}}
6,练习:
已知一颗非满二叉树有31个分支节点,则总结点个数是多少??
答:n2+n1=31,n1=0=> n2=31; n0=n2+1=>n0=32;n=n0+n1+n2=63
三,线索二叉树
1,相关概念:
1,修改空链域改为存放指向节点的前趋和后继节点的地址。 |
2,这样的指向该线性序列中 的“前趋”和“后继”的指针,称 作线索(thread)。 |
3,创建线索的过程称为线索化。 |
4,线索化的 二叉树称为线索二叉树。 |
5,显然线索二叉树与采用的 遍历方法相关,有先序线索二叉树、 中序线索二叉树和后序线索二叉树。 |
6,线索二叉树的目的是提高 该遍历过程的效率。 |
2,标志位的确立:
在节点的存储结构上增加两个标志位 | |
左标志ltag | 0 表示lchild指向左孩子节点 |
1 表示lchild指向前趋节点,即左线索 | |
右标志rtag | 0 表示rchild指向右孩子节点 |
1 表示rchild指向后继节点,即右线索 | |
节点结构 | ![]() |
增加一个头节点:一中序遍历为例,如果一个节点的左指针域为空,查看这个节点的前驱,将ltag改为1,并且指向他中序遍历中的前驱,如果它中序遍历没有前驱,就指向头结点.如果一个节点的右指针域为空,查看这个节点的后驱,将rtag改为1,并且指向他中序遍历中的后驱,如果它中序遍历没有后驱,就指向头结点.
中序线索二叉树的中序遍历示例演示:
void ThInOrder(TBTNode *tb){TBTNode *p=tb->lchild;while (p!=tb){while (p->ltag==0) p=p->lchild;printf("%c",p->data);while (p->rtag==1 && p->rchild!=tb){p=p->rchild;printf("%c",p->data);}p=p->rchild;}}
四,哈夫曼树:
1,相关概念:
二叉树的带权路径长度: 设二叉树具有n个带权值的叶节点,那么从根节点到各个叶 节点的路径长度与相应节点权值的乘积的和,叫做二叉树的带权路径长度 |
哈夫曼树: 具有最小带权路径长度的二叉树称为哈夫曼树(也称最优 树) |
满二叉树不一定是哈夫曼树,具有相同节点的哈夫曼树不唯一 |
2,构建哈夫曼树:
构建哈夫曼树的原则: |
权值越大的叶节点越靠近根结点 |
权值越小的叶节点越远离根结点 |
哈夫曼树特点 |
哈夫曼树共有2n-1个节点(合并n-1次,产生n-1个新节点) |
哈夫曼树n1为0,n=n0+n1+n2,===> n=2n0-1 |
构造哈夫曼树的过程 |
(1)给定的n个权值{W1,W2,…,Wn}构造n棵只有一个叶节点的二叉树, 从而得到一个二叉树的集合F={T1,T2,…,Tn}。 |
(2)在F中选取根节点的权值最小和次小的两棵二叉树作为左、右子树 构造一棵新的二叉树,这棵新的二叉树根节点的权值为其左、右子树根节点权值之和。 |
(3)在集合F中删除作为左、右子树的两棵二叉树,并将新建立的二叉 树加入到集合F中。 |
(4)重复(2)、(3)两步,当F中只剩下一棵二叉树时,这棵二叉树 便是所要建立的哈夫曼树。 |
3,哈夫曼编码:
前缀编码:设计一个长度不等的编码,必须使任意一字符的编码都不是另一字符的编码的前缀
什么样的前缀码能使电文总长最短??--哈夫曼编码 |
1,统计字符集中每个字符在电文中出现的概率 |
2,利用哈夫曼树的特点:权越大的叶子结点离根越远,将每个字符的概率作为权值,构造哈夫曼树 |
3,在哈夫曼树的左右分支上标0-1,从根到叶子结点的路径上的标号连接起来,作为该叶子结点的字符编码 |
相关文章:
C语言-数据结构-树
目录 一,树 1,基本术语: 2,树的性质: 3,树的遍历: 4,森林的遍历: 5,树和二叉树的转换: 6,二叉树和森林的转化: 7,树的存储: 1,双亲表示法 2、孩子链存储结构 3、孩子兄弟链存储结构 二,二叉树: 1,二叉树的性质: 2,二叉树的遍历: 3,二叉树的存储结构: 顺序存储:…...
探究音频丢字位置和丢字时间对pesq分数的影响
丢字的本质 丢字的本质是在一段音频中一小段数据变为0 丢字对主观感受的影响 1. 丢字位置 丢字的位置对感知效果有很大影响。如果丢字发生在音频信号的静音部分或低能量部分,感知可能不明显;而如果丢字发生在高能量部分或关键音素上,感知…...
【Linux】flock 文件级别的锁定
flock 是 Linux/Unix 系统中的一个命令,用于实现文件级别的锁定。它允许你在多个进程之间共享对文件的访问,但确保在同一时间只有一个进程可以访问文件,避免竞态条件(race conditions)和数据不一致问题。 flock 的基本…...
每天40分玩转Django:Django部署概述
一、Django部署概述 在开发阶段,我们通常使用Django内置的轻量级开发服务器runserver。但在生产环境中,为了应对大量并发请求,需要使用高性能的WSGI服务器,如Gunicorn、uWSGI等。同时还要配置Nginx等Web服务器作为反向代理,实现负载均衡、静态文件处理等。下面是Django部署的整…...
【unity c#】深入理解string,以及不同方式构造类与反射的性能测试(基于BenchmarkDotNet)
出这篇文章的主要一个原因就是ai回答的性能差异和实际测试完全不同,比如说是先获取构造函数再构造比Activator.CreateInstance(type)快,实际却相反 对测试结果的评价基于5.0,因为找不到unity6确切使用的net版本,根据c#9推测是net5…...
防抖和节流的方法详解和CSS文本溢出小知识
1.防抖 防抖:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时 场景:搜索框输入发请求,一些拖拽盒子,或者滚动事件 防抖的实现:利用间歇函数 const timer =setTimeout(callback函数,间隔时间) //执行完会返回自身的这个定时器的编号//事件所触发的函…...
深度解析:Maven 和 Gradle 的使用比较及常见仓库推荐
Maven 和 Gradle 是 Java 项目中最常用的构建工具。它们各有优势,适用于不同的场景。本文将对两者进行详细的对比,并推荐一些常用的 Maven 和 Gradle 仓库,帮助开发者高效管理依赖。 一、Maven 和 Gradle 的使用比较 1.1 基本介绍 Maven 基…...
CSS---实现盒元素div内input/textarea的focus状态时给父元素加属性!
注意兼容性,低版本浏览器无效 要实现当 textarea 文本框获得焦点时,自动给其父元素添加类名或样式,您可以使用 CSS 的 :focus-within 伪类选择器。这个选择器会在元素本身或其任何子元素获得焦点时应用样式。 示例代码 假设您有以下 HTML 结…...
施耐德变频器ATV320系列技术优势:创新与安全并重
在工业自动化领域,追求高效、安全与智能已成为不可阻挡的趋势。施耐德变频器ATV320系列凭借其强大的设计标准和全球认证,成为能够帮助企业降低安装成本,提高设备性能的创新解决方案。 【全球认证,品质保障】ATV320 系列秉持施耐德…...
Dynamo:Amazon 的高可用键值仓储
大家觉得有意义和帮助记得及时关注和点赞!!! Dynamo 是 Amazon 的高可用分布式键值存储(key/value storage)系统。这篇论文发表 的时候(2007)它还只是一个内部服务,现在(改名为 DynamoDB)已经发…...
前端开发 -- 自动回复机器人【附完整源码】
一:效果展示 本项目实现了一个简单的网页聊天界面,用户可以在输入框中输入消息,并点击发送按钮或按下回车键来发送消息。机器人会根据用户发送的消息内容,通过关键字匹配来生成自动回复。 二:源代码分享 <!DOCTYP…...
离散数学 群(半群,群,交换群,循环群,对称群,置换群,置换,交代群,轮换)详细,复习笔记
半群: 设G是一个非空集合,若为G上的二元代数运算,且满足结合律,则称该代数系统(G,)为半群 性质:非空,封闭,结合律 独异点: 含有单位元的半裙 练习题: 例:设S是一个非空集合,p(S)是S的幂集,∩和U是p(S…...
Android Java 版本的 MSAA OpenGL ES 多重采样
最近多次被小伙伴问到 OpenGL 多重采样,其实前面文章里多次讲过了,就是构建2个缓冲区,多重采样缓冲区和目标解析缓冲区。 代码流程 // Framebuffer IDs private int msaaFBO; private int msaaColorBuffer; private int msaaDepthBuffer;pr…...
学习笔记之初识HALCON
目录 一、概要 二、数据结构 1、图像Image 2、Region区域 3、XLD 三、图像预处理 1、图像的变换与校正 2、图像增强 四、图像的形态学处理 1、边界提取 2、孔洞填充 3、骨架 五、图像金字塔 六、区域分割 1、区域生长 2、区域分裂与合并 七、边缘检测 1、Pre…...
嵌入式硬件杂谈(七)IGBT MOS管 三极管应用场景与区别
引言:在现代嵌入式硬件设计中,开关元件作为电路中的重要组成部分,起着至关重要的作用。三种主要的开关元件——IGBT(绝缘栅双极型晶体管)、MOSFET(金属氧化物半导体场效应晶体管)和三极管&#…...
【Rust自学】7.1. Package、Crate和定义Module
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.1.1. Rust的代码组织 代码组织主要包括: 那些细节可以对外暴露,而哪些细节是私有的在作用域内哪些名称有效… …...
【已解决】pyinstaller打包ico图片报错:OSError: [WinError 225] 无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。
起因: pyinstaller加上 --icon 参数打包时报错。 命令如下: 解决: 关闭 Windows 的病毒防护即可,步骤如下。 点屏幕右下角通知栏,进入“病毒和威胁防护”: 打开: 关闭实时保护(…...
广东粤万润与时序数据库TDengine携手打造智慧酒店新未来:数据驱动智能化转型
在智能化转型浪潮席卷全球的当下,智慧酒店行业已然成为推进智能生活应用的先锋领域。从智能照明到环境监测,从安防系统到沉浸式影音娱乐,智慧酒店通过技术赋能为用户提供了更加舒适、高效且个性化的服务体验。然而,随着设备的增多…...
基于云计算的分布式文件存储系统设计与实现
基于云计算的分布式文件存储系统设计与实现 第一章 绪论 1.1 研究背景及意义 随着互联网技术的飞速发展,云计算作为一种新兴的计算模式,以其弹性伸缩、按需分配和成本效益高等特点,逐渐成为信息技术领域的研究热点。它为大数据处理、高性能…...
基于顺序表实现队列循环队列的处理
文章目录 1.假溢出的现象2.循环队列3.顺序表实现队列架构4.顺序表模拟实现队列5.设计循环队列(校招难度) 1.假溢出的现象 下面的这个就是我们的假溢出的这个现象的基本的来源: 我们的这个队列里面是有9个位置的,我们知道这个队列…...
leecode377.组合总和IV
本题其实是多重背包问题,对于价值和重量都是nums[i]的的物品,求装满这个容量为4的背包共有多少种排列方式 如果是组合问题,那么遍历顺序是先物品后背包,这样能保证物品按从小到大顺序依次放置,对于实例1求出来为4&…...
变量与数据类型 - 整型、浮点型、字符型等
引言 在编程中,变量和数据类型是基础中的基础。理解它们如何工作以及如何正确使用它们对于编写高效且无误的代码至关重要。本文将详细介绍 C 中的几种基本数据类型:整型、浮点型、字符型等,并通过实例帮助读者更好地理解和掌握这些概念。 一…...
selenium学习笔记(二)
文章目录 前言设计模式POMPOM概念POM优势POM设计原则POM的实现 selenium的常用操作处理动态元素截图操作勾选复选框多层框架/窗口定位操作下拉框上传文件操作处理弹窗切换窗口拖拽操作 如何处理浏览器驱动更新导致的问题selenium与网站监控监听网页内容变化监控网络请求 seleni…...
vue和uniapp中,点击按钮 传递当前item对象,并从selectData数组中删除该条item数据
在 Vue 中,可以通过点击按钮传递 item 对象,并从 selectData 数组中删除该条数据。可以使用 Array.prototype.filter() 方法来实现这一点。以下是一个示例: 说明 数据结构:selectData 是一个包含多个对象的数组,每个对象都有 id 和 name 属性。渲染列表:使用 v-for 指令…...
双柱渐变图背景图
option {backgroundColor: #1b2735,tooltip: {//提示框组件trigger: axis,//触发类型 柱状图axisPointer:{type:shadow} //触发效果 移动上去 背景效果}, xAxis: [//x轴{type: category,//坐标轴类型 离散data: [1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月],//数据axisTick:f…...
OpenHarmony怎么修改DPI密度值?RK3566鸿蒙开发板演示
本文介绍在开源鸿蒙OpenHarmony系统下,修改DPI密度值的方法,触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,Laval鸿蒙社区推荐开发板,已适配全新开源鸿蒙OpenHarmony5.0 Release系统,适…...
KylinOS V10 SP3下编译openGauss与dolphin插件
编译环境 KylinOS v10 sp3gcc 7.3.0make 4.3opengauss 5.0.0 mkdir -p /data/opengauss cd /data/opengauss git clone https://gitee.com/opengauss/openGauss-server.git git clone https://gitee.com/opengauss/Plugin.git wget -c https://opengauss.obs.cn-south-1.myhu…...
【入门】买杯子
描述 小明去商店买杯子,他想买价格在 10 到 20 元之间的杯子(含 10 元和 20 元),他看到货架上有 3 个不同价格的杯子,请问最终他买了几个杯子,总共花了多少钱? 比如:货架上有如下的…...
VIVO C++开发面试题及参考答案
面向过程与面向对象的区别,面向对象后的好处 面向过程编程主要关注的是程序的流程,它将一个问题分解为一系列的步骤,通过函数来实现这些步骤,数据和操作这些数据的函数是分离的。例如,在一个简单的计算学生成绩平均值的程序中,我们可能会有一些函数来输入成绩、计算总和、…...
虚拟化 | Proxmox VE 8.x 开源的虚拟化平台快速上手指南
[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 简介说明 前言简述 描述:作为一个爱折腾的IT打工佬,时刻以学习各类新技术新知识为目标,这不正好有一台部署了VMware vSphere ESXi 虚拟化环境的服务器,由于正好安装其系统的磁盘有坏道,经常导致使用 ESXi 异…...
【原创学习笔记】近期项目中使用的西门子V20变频器总结(下篇)
上一篇我们简单介绍了下现场的变频器,现在我们来聊聊如何用手机控制变频器。 手机控制变频器的前提是变频器上必须安装智能模块,现场并为安装此模块,故不作考虑。 下面介绍一下如何实现手机或者电脑控制变频器 首先如果存在485通信&#x…...
idea 8年使用整理
文章目录 前言idea 8年使用整理1. 覆盖application配置2. 启动的时候设置编辑空间大小,并忽略最大空间3. 查询类的关系4. 查看这个方法的引用关系5. 查看方法的调用关系5.1. 查看被调用关系5.2. 查看调用关系 6. 方法分隔线7. 选择快捷键类型8. 代码预览插件9. JReb…...
Bluetooth Spec【0】蓝牙核心架构
蓝牙核心系统由一个主机、一个主控制器和零个或多个辅助控制器组成蓝牙BR/ EDR核心系统的最小实现包括了由蓝牙规范定义的四个最低层和相关协议,以及一个公共服务层协议;服务发现协议(SDP)和总体配置文件要求在通用访问配置文件&a…...
PlantUML 入门使用指南
PlantUML 入门使用指南 一、PlantUML介绍二、PlantUML的用途三、PlantUML的语法及示例3.1 用例图(Use Case Diagram)3.2 类图(Class Diagram)3.3 对象图(Object Diagram)3.4 序列图(Sequence Di…...
QT:一个TCP客户端自动连接的测试模型
版本 1:没有取消按钮 测试效果: 缺陷: 无法手动停止 测试代码 CMakeLists.txt cmake_minimum_required(VERSION 3.19) project(AutoConnect LANGUAGES CXX)find_package(Qt6 6.5 REQUIRED COMPONENTS Core Widgets Network)qt_standard_project_setup(…...
IOS safari 播放 mp4 遇到的坎儿
起因 事情的起因是调试 IOS 手机下播放服务器接口返回的 mp4 文件流失败。对于没调试过移动端和 Safari 的我来说着实费了些功夫,网上和AI也没有讲明白。好在最终大概理清楚了,在这里整理出来供有缘人参考。 问题 因为直接用 IOS 手机的浏览器打开页面…...
LLM常见面试题(26-30题)--langchain篇
26,什么是langchain? 一个局域语言模型的框架,用于构建聊天机器人、生成式回答、摘要等功能。 核心思想是将不同的组件“链”在一起,连接大语言模型和外部资源,以创建更高级的语言模型应用。使得开发人员可以快速开发原型系统和…...
【Python运维】构建基于Python的自动化运维平台:用Flask和Celery
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在现代IT运维中,自动化运维平台扮演着至关重要的角色,它能够显著提高运维效率,减少人为错误,并且增强系统的可维护性。本文将引导读者如…...
socket编程(C++/Windows)
相关文章推荐: Socket 编程基础 面试官,不要再问我三次握手和四次挥手 TCP的三次握手与四次挥手 参考视频: https://www.bilibili.com/video/BV1aW4y1w7Ui/?spm_id_from333.337.search-card.all.click TCP通信流程 服务端 #include<…...
Spring Boot介绍、入门案例、环境准备、POM文件解读
文章目录 1.Spring Boot(脚手架)2.微服务3.环境准备3.1创建SpringBoot项目3.2导入SpringBoot相关依赖3.3编写一个主程序;启动Spring Boot应用3.4编写相关的Controller、Service3.5运行主程序测试3.6简化部署 4.Hello World探究4.1POM文件4.1.1父项目4.1.2父项目的父…...
【hackmyvm】deba靶机wp
tags: HMVnodejs反序列化CVE-2017-5941wine命令定时任务 1. 基本信息^toc 文章目录 1. 基本信息^toc2. 信息收集2.1. 端口扫描2.2. 目录扫描 3. nodejs反序列化 (CVE-2017-5941)4. www-data提权low用户5. 定时任务提权6. wine命令 提权root6.1. 利用CS获取root 靶机链接 http…...
新浪微博大数据面试题及参考答案(数据开发和数据分析)
介绍一下你所掌握的计算机网络和操作系统相关知识 计算机网络:计算机网络是将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。我掌握了网络协议…...
去除 el-input 输入框的边框(element-ui@2.15.13)
dgqdgqdeMac-mini spid-admin % yarn list --pattern element-ui yarn list v1.22.22 └─ element-ui2.15.13 ✨ Done in 0.23s.dgqdgqdeMac-mini spid-admin % yarn list vue yarn list v1.22.22 warning Filtering by arguments is deprecated. Please use the pattern opt…...
Qt 应用程序转换为服务
一、在 Windows 上将 Qt 应用程序转换为服务 方法1: 创建一个 Windows 服务应用程序: Windows 服务应用程序是一个没有用户界面的后台进程,通常由 Win32 Service 模板创建,或者直接编写 main() 函数以实现服务逻辑。 修改 Qt 应…...
C/C++ 数据结构与算法【树和森林】 树和森林 详细解析【日常学习,考研必备】带图+详细代码
一、树的存储结构 1)双亲表示法实现: 定义结构数组存放树的结点,每个结点含两个域: 数据域:存放结点本身信息。双亲域:指示本结点的双亲结点在数组中的位置。 特点:找双亲简单,找孩子难 C语…...
潇洒郎:部署Dify, 安装Ollama,Ollama下载模型,Dify配置模型
Ollama 1、安装ollama Windows版本下载:2024WindowsOllama最新0.5.4版本资源-CSDN文库, 下载速度超快,官网太慢了 双击安装,安装成功后,托盘区有Ollama图标 右键View logs打开目录 C:\Users\Administrator\AppData\Local\Oll…...
如何在 Linux 中设置 SSH 免密码登录
一般情况下,我们通过一台 Linux 服务器远程另外一台服务器时,每次远程都需要输入对端机器的密码。 ssh root192.168.21.20 有没有这样一种情况,我们不用输入密码就可以远程别的服务器呢? 答案是肯定的,如果我们在 Li…...
网络安全词云图与技术浅谈
网络安全词云图与技术浅谈 一、网络安全词云图生成 为了直观地展示网络安全领域的关键术语,我们可以通过词云图(Word Cloud)的形式来呈现。词云图是一种数据可视化工具,它通过字体大小和颜色的差异来突出显示文本中出现频率较高…...
Linux | Ubuntu零基础安装学习cURL文件传输工具
目录 介绍 检查安装包 下载安装 手册 介绍 cURL是一个利用URL语法在命令行下工作的文件传输工具,首次发行于1997年12。cURL支持多种协议,包括FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3…...
重启ubuntu服务器,如何让springboot服务自动运行
文章目录 1. 使用 systemd 服务步骤: 2. 使用 cron 的 reboot 任务步骤: 3. 使用 init.d 脚本(适用于较旧版本)步骤: 推荐方案 为了确保在重启Ubuntu服务器后,让springboot的服务test.jar象 nohup java -ja…...