首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我想写代码检查数据是否已经存在,然后插入到不同的表中

在云计算领域,开发工程师可以使用编程语言和相关技术来检查数据是否已经存在,并将其插入到不同的表中。以下是一个完善且全面的答案:

在开发过程中,可以使用数据库查询语言(如SQL)来检查数据是否已经存在。通过执行适当的查询语句,可以在数据库中搜索特定的数据,并根据结果决定是否将其插入到不同的表中。

在前端开发中,可以使用JavaScript或其他前端框架来发送异步请求到后端服务器,以检查数据是否已经存在。通过向后端发送请求并接收响应,可以根据返回的结果决定是否将数据插入到不同的表中。

在后端开发中,可以使用后端编程语言(如Java、Python、Node.js等)来处理数据的检查和插入操作。通过编写逻辑代码,可以连接数据库并执行查询操作,然后根据查询结果决定是否将数据插入到不同的表中。

在软件测试中,可以编写相应的测试用例来验证数据是否已经存在,并确保插入操作的正确性。通过模拟不同的数据情况,并使用断言来验证结果,可以确保代码在各种情况下都能正确地检查和插入数据。

在数据库方面,可以使用关系型数据库(如MySQL、PostgreSQL)或非关系型数据库(如MongoDB、Redis)来存储和管理数据。关系型数据库适用于结构化数据,而非关系型数据库适用于半结构化或非结构化数据。

在服务器运维方面,可以使用云服务器(如腾讯云的云服务器CVM)来部署和管理应用程序。通过配置服务器环境和安全设置,可以确保代码在服务器上正常运行,并保护数据的安全性。

在云原生方面,可以使用容器技术(如Docker)和容器编排工具(如Kubernetes)来构建和管理应用程序。通过将应用程序打包成容器,并使用容器编排工具进行部署和管理,可以实现应用程序的高可用性和弹性扩展。

在网络通信方面,可以使用HTTP、TCP/IP等协议来实现数据的传输和通信。通过使用网络通信技术,可以将数据从客户端发送到服务器,并在不同的表中插入数据。

在网络安全方面,可以使用加密算法、防火墙、访问控制等技术来保护数据的安全性。通过使用安全技术和措施,可以防止未经授权的访问和数据泄露。

在音视频和多媒体处理方面,可以使用音视频编解码器、流媒体服务器等技术来处理音视频数据。通过使用相应的技术和工具,可以实现音视频数据的录制、转码、播放等功能。

在人工智能方面,可以使用机器学习、深度学习等技术来处理和分析数据。通过使用相应的算法和模型,可以实现数据的分类、预测、推荐等功能。

在物联网方面,可以使用传感器、物联网平台等技术来连接和管理物联网设备。通过使用相应的技术和平台,可以实现对物联网设备的监控、控制和数据采集。

在移动开发方面,可以使用移动应用开发框架(如React Native、Flutter)来开发跨平台的移动应用。通过使用相应的框架和工具,可以实现移动应用的开发和部署。

在存储方面,可以使用对象存储、文件存储等技术来存储和管理数据。通过使用相应的存储技术,可以实现数据的持久化和高可用性。

在区块链方面,可以使用分布式账本、智能合约等技术来实现去中心化的数据存储和交易。通过使用区块链技术,可以实现数据的安全性和可信度。

在元宇宙方面,可以使用虚拟现实、增强现实等技术来构建虚拟的数字世界。通过使用相应的技术和平台,可以实现用户在虚拟世界中的交互和体验。

腾讯云提供了一系列与云计算相关的产品,包括云服务器、云数据库、云存储、人工智能等。您可以访问腾讯云官网(https://cloud.tencent.com/)了解更多关于这些产品的详细信息和使用指南。

相关搜索:如何在插入数据库之前检查从api接收的数据中是否已经存在值?我想检查我是否已经存储了数据,如果没有,我想将它存储在我的mongodb数据库中如何在proc - SQLServer中检查不同数据库中的表是否存在我的数据库中有一个名为name的列,我想检查2个条件,如果名称已经存在,如果它不存在,则插入到数据库在Oracle中,我想创建一个“路由接口”,根据参数插入到不同的表中C# -检查CSV中的列是否存在,然后将其分配给数据表如何检查我的彩票数据库中是否已经有6个不同的号码SQL Server & C# -如何检查我正在上传的varbinary(max)文件是否已经存在于表中?在插入SQL数据库表之前,如何检查文本文件中是否存在特定的数据?检查我要插入的新行的某些属性是否存在于此表中,如果存在,则通过触发器执行某些操作我已经为我的域设置了一个全局cookie,当用户导航到一个页面时,我想检查该cookie是否存在;如果不存在,它将给他们一个404问题- Tkinter需要检查输入框中的值是否已经在我的sqlite数据库表中的特定列中我想插入到一个表,从另一个表在同一数据库在php中获得的数据如何将数据插入到雪花数据库的临时表中。我已经创建了一个DDL:Create temporary table table_name as Select是否可以从我的MySQL数据库中的一个表中的行中获取值并插入到同一数据库中的另一个表中?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

转载:都2021年了,你还不懂幂等性问题的解决方案?

记得上次领导找我谈话,你懂的,先唠嗑唠嗑XXX, 然后顺便考察了我一个问题,幂等性问题是如何解决的?...我一想,这种问题不是面试宝典里经常有的吗,于是小慕果不其然的答出来了6种解决思路啦,接下来小慕就给大家分享一下我是怎么回答领导的提问的 ? ? ? 。...方案二:数据库唯一索引 防止订单多次插入的最简单直接方法就是创建唯一索引,然后插入的时候可能语句有细微的不同。但目的都是保证相同记录在数据库中只存在一条。...2、判断是否插入成功,如果插入成功,则继续做后续业务请求。如果插入失败,则代表已经执行过当前请求。 ?...第二阶段:订单系统拿着申请到的token发起支付请求,支付系统会检查Redis中是否存在该token,如果存在,表示第一次发起支付请求,删除缓存中token后开始支付逻辑处理;如果缓存中不存在,表示非法请求

56510

Python3 初学实践案例(8)使用 sqlite3 数据库存储生成的密码,prettytable 的使用

如果数据库不存在,就会创建一个数据库文件,这个是个自动的机制,我们就不用管了。 在数据库中创建表 一个新创建的数据库当中是没有任何表的。我们不能要求我们的用户自己去搞好一个表再来使用。...因此,当数据库不存在,在第一次链接的时候会自动创建这个数据库,但是这个数据库中是没有任何表的,所以,我们需要检查数据库中有没有表,如果有表,那么有没有我们使用的这个表,如果不符合条件,我们则需要创建一个表...(name,password) VALUES ('" + name + "', '" + passwd + "')"); conn.commit() conn.close() 上面我使用了正则来检查数据库中是否存在我们需要的...补充查看和删除密码的管理脚本 seepw.py 代码 上面我们的 db.py 脚本中,除了生成密码的脚本中我们需要的插入语句外,我还写了查看以及删除语句的函数。...补充生成密码的修改 首先是去除原有的使用文本文件存储的所有代码,引用我们的 db.py 文件,然后在需要插入密码到数据库的地方使用下面的方法即可往数据库中插入保存的数据。

1.3K50
  • 【高阶数据结构】哈希表详解

    为什么加完i还要模m呢,因为一直加的话可能会超过表长,这时就要回到开头往后进行探测了 比如上面我们举例的那种情况: 现在我要插入122,那根据哈希函数122%10定位到下标为2的位置,但是这个位置已经被占用了...回到上面删除的场景——删除33 删除之后是这样的 那然后我想查找13,大家看,现在能查找到吗?...那我们之前也模拟实现过vector,要知道vector在进行插入操作的时候是会检查插入的那个位置是否在start和finish之间的 包括它对方括号的重载也会检查插入位置的下标是否小于size的...那我们来修改补充一下上面的代码: 然后红框这里其实就是还是走一个插入的逻辑,我们可以把下面之前写的插入的代码拷贝上来修改一下。...所以我这里想这样优化一下: 我想直接把旧表的结点直接拿下来插入到新表里面,这样即不用开新结点,最终交换之后也不用释放旧表的结点。

    1.1K20

    面试挂在了 LRU 缓存算法设计上

    当我们进行 put 操作的时候,会出现以下几种情况: 1、如果要 put(key,value) 已经存在于链表之中了(根据key来判断),那么我们需要把链表中旧的数据删除,然后把新的数据插入到链表的头部...、 2、如果要 put(key,value) 的数据没有存在于链表之后,我们我们需要判断下缓存区是否已满,如果满的话,则把链表尾部的节点删除,之后把新的数据插入到链表头部。...对于 get 操作,则会出现以下情况 1、如果要 get(key) 的数据存在于链表中,则把 value 返回,并且把该节点删除,删除之后把它插入到链表的头部。...具体的代码,为了不影响阅读,我在文章的最后面在放出来。 时间、空间复杂度分析 对于这种方法,put 和 get 都需要遍历链表查找数据是否存在,所以时间复杂度为 O(n)。空间复杂度为 O(1)。...空间换时间 在实际的应用中,当我们要去读取一个数据的时候,会先判断该数据是否存在于缓存器中,如果存在,则返回,如果不存在,则去别的地方查找该数据(例如磁盘),找到后再把该数据存放于缓存器中,再返回。

    1.4K20

    SQL查询提速秘诀,避免锁死数据库的数据库代码

    想避免这个问题,只需查询这个子集,并将它持久化存储到别处,然后将后面的步骤指向这个比较小的数据集。 知道何时使用临时表 这个问题解决起来要麻烦一点,但效果显著。...触发器的问题:无论你希望触发器执行什么,都会在与原始操作同一个的事务中执行。 如果你写一个触发器,以便更新 Orders 表中的行时将数据插入到另一个表中,会同时锁定这两个表,直到触发器执行完毕。...如果你需要在更新后将数据插入到另一个表中,要将更新和插入放入到存储过程中,并在单独的事务中执行。 如果你需要回滚,就很容易回滚,不必同时锁定这两个表。...几年前我做过一项基准测试,我将一堆数据插入到一个带聚类 GUID 的表中,将同样的数据插入到另一个带 IDENTITY 列的表中。...如果只需查看数据是否存在,就不要计数行 这种情况很常见,你需要查看数据存在于表格中,根据这番检查的结果,你要执行某个操作。

    1.6K30

    其实吧,LRU也就那么回事。

    每放入一个元素,就把数组中已经存在的数据的标记更新一下,进行自增。当数组满了后,就将数字最大的元素删除掉。 每访问一个元素,就将被访问的元素的数字置为 0 。...如果此数据之前已经被缓存在链表中了,我们遍历得到这个数据的对应结点,并将其从原来的位置删除,并插入到链表尾部。 如果此数据没在缓存链表中,怎么办?...从时间复杂度的角度看,因为链表插入、查询的时候都要遍历链表,查看数据是否存在,所以它还是O(n)。 总之,这也不是面试官想要的答案。...2.要在这个数据结构中快速找到某个 key 是否存在,并返回其对应的 value。 3.每次访问这个数据结构中的某个 key,需要将这个元素变为最近使用的。...而且更多的实际情况是,你开发,写业务代码的时候,根本就不会用到 LRU 算法。 你说这个事情,难受不难受。 ? 好了,你以为到这里面试就结束了? 天真。

    65310

    php+mysql动态网站开发案例课堂_用php写一个网页页面

    为了高效,一般会采取分类维护多个表的方式,而不是把所有数据都储存在同一个表中。 MySQL 需要服务器支持。...我们会需要从数据库中查询信息,然后把得到的信息储存起来(其实就是储存在变量中)。这样,我们需要一些额外的工作。先看一坨代码: 插入前检查被插入的变量是否为空。例如: 插入操作 } ?...写自己的程序的时候可以亲自试验是否需要这一行、PHP 和 HTML 在 php 中的顺序不同有何影响。我通常的做法是把 PHP 代码放在前面,HTML 代码放在后面。...登陆时,再把这个密钥存储到 Cookie 中,通过检查 Cookie 中的密钥和数据库中用户密钥的匹配情况判定是哪位用户登录。

    8.7K20

    小林手撕 LRU 算法!

    大家好,我是小林。 前几天,我写一篇感受计算机基础之美的文章:坚持一年了 里面介绍了个心跳服务的宕机判断算法,当时只是理论分析了下使用 LRU 算法来实现,没有手撕代码。...如果存在哈希表里,说明主机已经上线过,先通过查询哈希表,找到该主机在双向链表里旧的心跳包的节点,然后就可以通过该节点将其从双向链表中删除,最后将新的心跳包插入到双向链表的队尾,同时更新哈希表。...既然引入哈希表,那我们在判断出有主机宕机了(检查双向链表队头的主机是否超时),除了要将其从双向链表中删除,也要从哈希表中删除。...首先,通过哈希表查找是否存在该 Key: 如果存在则表示有老数据,那么就需要将老数据先从链表和哈希表里删除,然后再将新的数据重新加入到链表的队头,同时该链表节点存放到哈希表里,这样链表里就维护了该 key...首先先在哈希表中查找是否存在该 key: 如果不存在,则返回 false; 如果存在,则链表要将数据删除,然后再数据加入到链表队头,目的是为了维持链表队头是最近访问的数据。

    66930

    SQL:函数以及约束

    ) 设置主键后,该字段的数据就要保持完整性(不为空且唯一);这个很好理解,下面来看一下自增性; 现在我向表中插入三个数据,但是我并没有插入id(id的约束是主键自增),虽然我们没有写,但是因为有自增...,所以id不为空,而且是唯一的;下面我们来看看表; 自增的作用就是会自动的根据序列递增式的填充; 注意:如果我们插入失败了一个行数据,虽然没有插入成功,但是已经向数据库申请到了空间,下次插入的时候自增约束的字段并不会按照表格中现有的数据挨着填充...; 比如:上表中id已经自动填充到3了,如果我插入一行数据失败了,然后我再插入一行数据成功了,那么新插入的一行数据的id就是5,而不是4; 2>检查(check) 这个比较简单,只需要注意格式就可以了...; 现在创建员工表: 在没有使用外键之前,尽管两张表在逻辑上有联系,但是在物理上是没有关系的,也就是说我更改部门表中的id员工表没有任何反应,我在员工表中填一个不存在的一个部门id也不会报错; 1...>添加外键 使用语句: 外键添加后会在字段前出现一个蓝色的小钥匙标志 ; 2>检验是否两个表建立了联系 现在我删除掉部门表中的id为1的部门,在员工表中有好多行的员工在该部门,删除后如果报错了说明两个表之间建立了联系

    4000

    CMU 15-445 数据库课程第三课文字版 - 存储1

    并且在这里还会维护页的空闲空间信息,这样在插入的时候,我们可以直接通过页目录直接定位到要插入的页。但是这样也带来了原子更新的问题,即页的空闲空间信息与插入数据是否在一个原子操作内。...但是由于这个两个页的操作,硬件层面上我是很难保证两页更新是原子性的,所以我们需要额外的机制在数据库重启的时候检查是否有这些未完成的写入,这在后面讲恢复与日志的章节的时候会说到。 4....但是这带来了其他的问题,即存储碎片: 我想再插入新的数据的时候,假设所有元组的字节长度都是一样的,我可以插入到原来 Tuple 2 的位置,但是我怎么知道这个位置有空闲的空间呢?...实际元组数据:从后向前写 思考下:我们是否可以在这一页中存储来自于不同表的数据呢?...,如果在一页中混合了不同表的数据就丧失了这个局部性。

    54730

    MySQL 中的 INSERT 是怎么加锁的?

    ,然后开始写数据,写完数据之后再对记录加上 X 记录锁。...,然后检查是否已存在排他记录锁,如果事务活跃且不存在锁,则为该事务加上排他记录锁。...insert 语句,判断是否有和插入意向锁冲突的锁,如果有,加插入意向锁,进入锁等待;如果没有,直接写数据,不加任何锁; 执行 select ... lock in share mode 语句,判断记录上是否存在活跃的事务...细心的你会发现,执行 insert 语句时,从判断是否有锁冲突,到写数据,这两个操作之间还是有时间差的,如果在这之间执行 select ... lock in share mode 语句,由于此时记录还不存在...整个流程如下: 执行 insert 语句,对要操作的页加 RW-X-LATCH,然后判断是否有和插入意向锁冲突的锁,如果有,加插入意向锁,进入锁等待;如果没有,直接写数据,不加任何锁,结束后释放 RW-X-LATCH

    11.3K52

    PostgreSql 学了还是乱麻,那就捋一捋 DB架构

    上面基本上在关注与数据库的读操作,关于写操作中的一个问题就是大量数据的更改插入,数据是否马上会进行刷盘用户对表数据进行大量更改并发提交的情况下,不会马上对底层数据文件执行写操作。...当然如果想关心一下,用户表的buffer读取的数据块的浮动可以将上的查询保存在一个表里面,并辅以时间,这样你就可以绘制出一个用户表的burfer的周期表。...,checkpoint,如 数据在内存中也不能一直寄存,需要落盘,这就牵扯到下一步checkpoint,检查点,检查点是一个强制的过程,在PG中数据总是以数据块写入和读取的,无论这个块的数据是否占满8K...,读取的时候也是以块为单位进行读取, 用户在缓冲区中进行了更改,缓冲区与物理磁盘的数据文件不一致,该缓冲区的数据就是脏的,checkpoint的作用就是要将这些已经确认改变的数据写入到数据的文件的过程。...,我想你已经知道了。

    52020

    五分钟搞清楚MySQL事务隔离级别

    首先创建一个表 account。创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB)。表的结构如下: ? 然后往表中插入两条数据,插入后结果如下: ?...我们在 A 用户所在会话中为表 account 添加一条数据: insert into account(id,account) value(3,1000);commit; 然后我们查询看数据插入是否成功...回到 B 用户所在的会话,我们查询结果: ? 用户 B 在他所在的会话中想插入一条新数据 id=3,value=1000。来我们操作下: ? 什么?竟然插不进去,说我数据重复?...用户 B 当然不服啊,因为查询到数据只有两条啊,为什么插入 id=3 说我数据重复了呢? 我再看一遍,莫非我眼花了? ? 试想一下,在实际中用户 A 和用户 B 肯定是相互隔离的,彼此不知道操作什么。...管他呢,老板的要求满足了。要一个事务中读取的数据一致(可重复读)。我只能这么做啊,打肿脸装胖子。数据已经发生改变,但是我还是要保持一致。

    37910

    MySQL的4种事务隔离级别你还不清楚吗?

    表的结构如下: 然后往表中插入两条数据,插入后结果如下: 为了说明问题,我们打开两个控制台分别进行登录来模拟两个用户(暂且成为用户 A 和用户 B 吧),并设置当前 MySQL 会话的事务隔离级别。...A 用户所在会话中为表 account 添加一条数据: insert into account(id,account) value(3,1000); commit; 然后我们查询看数据插入是否成功:...回到 B 用户所在的会话,我们查询结果: 用户 B 在他所在的会话中想插入一条新数据 id=3,value=1000。...竟然插不进去,说我数据重复? 用户 B 当然不服啊,因为查询到数据只有两条啊,为什么插入 id=3 说我数据重复了呢? 我再看一遍,莫非我眼花了?...管他呢,老板的要求满足了。要一个事务中读取的数据一致(可重复读)。我只能这么做啊,打肿脸装胖子。数据已经发生改变,但是我还是要保持一致。

    45410

    MY-SQL事务隔离级别

    表的结构如下: 然后往表中插入两条数据,插入后结果如下: 为了说明问题,我们打开两个控制台分别进行登录来模拟两个用户(暂且成为用户 A 和用户 B 吧),并设置当前 MySQL 会话的事务隔离级别。...A 用户所在会话中为表 account 添加一条数据: insert into account(id,account) value(3,1000); commit; 然后我们查询看数据插入是否成功:...回到 B 用户所在的会话,我们查询结果: 用户 B 在他所在的会话中想插入一条新数据 id=3,value=1000。...竟然插不进去,说我数据重复? 用户 B 当然不服啊,因为查询到数据只有两条啊,为什么插入 id=3 说我数据重复了呢? 我再看一遍,莫非我眼花了?...管他呢,老板的要求满足了。要一个事务中读取的数据一致(可重复读)。我只能这么做啊,打肿脸装胖子。数据已经发生改变,但是我还是要保持一致。

    35330

    MySQL 的 InnoDB 存储引擎是怎么设计的?

    」(clustered indexes)必须是「唯一」的,也就意味着每次插入、更新,都需要检查是否已经有相同的字段存在,也就没有必要使用 Change Buffer 了;另外,「聚簇索引」操作的随机性比较小...有同学会问,那表的数据呢?其实只要理解了 InnoDB 里的所有表数据,都以索引(聚簇索引+二级索引)的形式存储起来,就知道索引已经包含了表数据。...这里同样不展开,如何选择不同的表空间存储数据?...其实这个时候 Redo Log 也已经无力回天,Redo Log 是要在磁盘中的页数据是正常的、没有损坏的情况下,才能把磁盘里页数据 load 到内存,然后应用 Redo Log。...而如果磁盘中的页数据已经损坏,是无法应用 Redo Log 的。 所以,MySQL 在刷数据到磁盘之前,要先把数据写到另外一个地方,也就是 Doublewrite Buffer,写完后,再开始写磁盘。

    1.3K10

    Java开发者编写SQL语句时常见的10种错误

    要时刻明确NULL的含义,每次你写SQL时,都要考虑: · 对于NULL来说谓词是否正确? · NULL是否影响该函数的结果? 2.在Java内存中处理数据 一些Java开发者十分了解SQL特性。...解决办法 你每次写到UNION时,要考虑下你是否实际上想写的是UNIONALL。 4.使用JDBC分页功能将大量结果分页 大多数数据库都支持通过LIMIT.. OFFSET,TOP .....这与正确的元数据相关(我不用再举Tom Kyte的例子了)。然而,也有仍然可能有不少Java开发人要会从单独的查询中加载两个表到map容器中,在java内存中以某种方式进行连接操作。...解决办法 作为一个经验法则,当你得到不想要的重复结果时,应该首先检查你的连接谓词。因为有可能是在某个地方存在着一个不易察觉的笛卡尔积。...如果你要将所有记录都插入到同一个表,使用单一的SQL语句和多个绑定值集合建立一个批处理的INSERT语句。

    1.8K50

    MySQL中特别实用的几种SQL语句送给大家

    -- 来自一位被技术经理毒打多年的程序员的忠告 ? 实用的SQL 1.插入或替换 如果我们想插入一条新记录(INSERT),但如果记录已经存在,就先删除原记录,再插入新记录。...此时,可以使用"REPLACE INTO"语句,这样就不必先查询,再决定是否先删除再插入。 "REPLACE INTO"语句是基于唯一索引或主键来判断唯一(是否存在)的。...5.指定数据快照或备份 如果想要对一个表进行快照,即复制一份当前表的数据到一个新表,可以结合CREATE TABLE和SELECT: -- 对class_id=1(一班)的记录进行快照,并存储为新表students_of_class1...6.写入查询结果集 如果查询结果集需要写入到表中,可以结合INSERT和SELECT,将SELECT语句的结果集直接插入到指定表中。...好了,答应各位的已经搞定啦。有细心的小伙伴会发现,咦,你这数据中,如果没查到为0的怎么不显示呢?比如凌晨1点多的,都没有显示。这样岂不是还得后台处理补全?

    1.2K10

    CMU 15-445 -- Multi-Version Concurrency Control - 16

    #2: Time-Travel Storage:老版本被复制到单独的一张表中 Approach #3: Delta Storage:老版本数据的被修改的字段值被复制到一张单独的增量表 (delta record...在 GC 的过程中,还有两个附加设计决定: 如何查找过期的数据版本 如何确定某版本数据是否可以被安全回收 GC 可以从两个角度出发: Approach #1:Tuple-level:直接检查每条数据的旧版本数据...A2上添加一个删除标志 线程2将本次事务提交 线程3同时尝试插入一条同样名为A的记录到表中,该插入操作与线程2的更新,和线程1的查询操作同时发生 此时由于存在多个事务并发执行插入和更新情况,如果没有做好并发控制...---- 小结 在MVCC的数据库中,每个索引的底层数据结构必须支持存储非唯一的键(即允许多个不同的数据行关联到相同的键)。...为了在主键或唯一索引上执行条件性插入,通常会采取以下步骤: 原子性检查键是否存在:在执行插入之前,需要检查索引中是否已经存在具有相同键的数据行。

    25530

    【高阶数据结构】红黑树详解

    然后再补充一个概念: 结点的黑高(黑色高度):从某结点出发(不含该结点)到达任一空叶结点的路径上经过的黑结点总数 1.3 已经学了AVL树,为啥还要学红黑树 然后我们再来分析一个问题: 大家想,...比如这样: 代码实现 这里的代码我们等到后面和双旋的一起写 那上面我们说细分的话有5种情况,上面已经说了4种,那最后一种其实也是u不存在/u存在且为黑,与上一种情况的区别就是第5中是双旋+变色...再换一组数据 没什么问题 ps:我在这个地方测试的时候修改了几处错误,都是判断的==写成=了,我都改了过来,上面代码的截图有错误的地方我也做了修改。...而判断父亲的话,只有根结点没有父亲,但是根结点是黑色的也不会去检查它。 所以这样写会好一点 然后还剩一个,我们要检查每条路径黑色结点数量是否相等,存在不相等的情况就不符合。...5.4 插入相同数量随机数比较AVL树和红黑树的高度 然后我们AVL树写的求高度的函数拷贝过来,在AVL树和红黑树中插入相同数量的随机数,看看它们的高度会差多少: 我们看到插入相同数量随机数它们的高度是可以达到一样高的

    1.8K10
    领券