算法
文章平均质量分 67
该专栏主要是C++数据结构的代码
耶瞳
这个作者很懒,什么都没留下…
展开
-
红黑树概述
2-3-4 树介绍2-3-4树是四阶的B树(Balance Tree),他属于一种多路查找树,它的结构有以下限制:所有叶子节点都拥有相同的深度。节点只能是2-节点、3-节点、4-节点之一。2-节点: 包含1个元素的节点,有2个子节点;3-节点:包含2个元素的节点,有3个子节点;4-节点:包含3个元素的节点,有4个子节点;所有节点必须至少包含1个元素元素始终保持排序顺序,整体上保持二叉查找树的性质,即父结点大于左子结点,小于右子结点;结点有多个元素时,每个元素必须大于它左边的和它的左原创 2022-05-25 21:58:23 · 433 阅读 · 0 评论 -
Skip List--跳表(全网最详细的跳表文章没有之一)
跳表是一种神奇的数据结构,因为几乎所有版本的大学本科教材上都没有跳表这种数据结构,而且神书《算法导论》、《算法第四版》这两本书中也没有介绍跳表。但是跳表插入、删除、查找元素的时间复杂度跟红黑树都是一样量级的,时间复杂度都是O(logn),而且跳表有一个特性是红黑树无法匹敌的(具体什么特性后面会提到)。所以在工业中,跳表也会经常被用到。废话不多说了,开始今天的跳表学习。转载 2022-05-18 18:09:55 · 1352 阅读 · 2 评论 -
六大排序算法(java实现)
零:实现Comparable接口比较大小Java提供了Comparable接口用来定义排序规则,只要求实现一个compareTo方法此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 eq原创 2022-03-13 14:09:56 · 1650 阅读 · 0 评论 -
C++算法——字幕校对问题
字幕校对问题伴随着中国国产影视作品风靡国外,听不懂汉语的观众需要英文字幕的帮忙才能理解影片故事情节。现在小喇叭接到了这样一个任务,他需要按照标准.STA字幕格式的需要,对字幕文件进行编辑。标准英文字母格式如下:[Ordinal number of the block][Beginning time of the subtitles --> Ending time of the subtitles][Subtitle text in one or more lines]每两个字幕信息之间用一行原创 2021-07-22 22:36:33 · 881 阅读 · 4 评论 -
C++算法——嵌套线段问题
嵌套线段问题题目描述:给出 N 个线段,对于线段 i,给出线段在数轴上的左端点 li 和右端点 ri,对于线段 i 和 j,假如 lj < li 并且 ri < rj 就说明线段 i 嵌套在线段 j 中。找到所有嵌套在至少一个其他线段中的线段输入说明:第一行是一个整数 N,1 <= N <= 100接下来 N 行,每行两个整数 li, ri 表示第 i 个线段的端点。**输出说明 **所有嵌套在其它线段中的线段个数。输入样例40 52 63 40 7输出原创 2021-07-22 22:30:28 · 514 阅读 · 0 评论 -
C++数据结构——散列表(哈希表)
一:散列表的概念定义:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希函数。基本概念:若关键字为k,则其值存放在f(k)的存储位置上。由此,不需比较便可直原创 2021-07-05 19:25:30 · 2480 阅读 · 11 评论 -
C++数据结构——顺序表的查找(简单顺序查找、有序表的二分查找、索引顺序的查找)
一:简单顺序查找二:有序表的二分查找三:索引顺序的查找原创 2021-06-22 10:57:45 · 4621 阅读 · 0 评论 -
C++数据结构——二叉树
一:二叉树的储存结构1.顺序存储:用一组地址连续的存储单元,以层序顺序存放二叉树的数据结构元素,结点的相对位置蕴含着节点之间的关系。一般二叉树的顺序存储:把一般的二叉树先补成完全二叉树,然后按照完全二叉树的顺序存储方式进行存储,而新补上去的结点只占位置,不存放结点数据。可见非完全二叉树的顺序存储十分浪费空间2.链式存储二叉树链表:对应的二叉链表结点结构:struct bnode{ int data; // 不妨设数据类型为int bnode *lchild, *rchild;};原创 2021-06-21 11:52:27 · 1327 阅读 · 7 评论 -
C++数据结构——矩阵的压缩存储
矩阵是许多科学以及工程中研究和应用的数学对象,实际应用中常常会用到高阶矩阵,因而占用大量空间,但是所涉及的矩阵中常常有较多元素为0,这也被称为稀疏矩阵,另外还有一些矩阵的元素值分布有一定的规律,这类矩阵被称为特殊矩阵。压缩储存的基本思想:为多个值相同的元素只分配一个储存空间对零元素不分配存储空间一:特殊矩阵的压缩存储对称矩阵因此储存对称矩阵可只储存下三角的值三角矩阵因此只需要储存上三角/下三角的内容,以及另一部分的C值:对角矩阵二:稀疏矩阵的压缩存储三元.原创 2021-06-20 19:03:07 · 1373 阅读 · 5 评论 -
C++数据结构——链表(各式链表与案例)
一:基本链表在这里插入代码片二:单循环链表在这里插入代码片三:带尾指针的单循环链表在这里插入代码片四:双链表在这里插入代码片五:链表案例逆置单链表,不是简单的逆序打印单链表,需要逆置它的值以及地址。将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成 的。新链表也是有序的。在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。在这里插入代码片...原创 2021-06-20 12:54:21 · 664 阅读 · 0 评论 -
C++数据结构——STL中vector的基本使用
一:vector容器中存放自定义数据类型#include<iostream>using namespace std;#include<vector>#include<string>// vector容器中存放自定义数据类型class Person{ public: Person(string name, int age) { this -> m_Name = name; this -> m_Age = age; }原创 2021-06-20 01:10:13 · 167 阅读 · 0 评论 -
C++数据结构——顺序表(基本代码实现与案例)
基本代码在这里插入代码片原创 2021-06-19 22:07:56 · 960 阅读 · 0 评论 -
C++数据结构——链队列(基本代码实现与案例)
基本代码实现#include<iostream>using namespace std;enum error_code{ success, underflow};struct node{ int data; node* next;};class linkQueue{ public: linkQueue(); ~linkQueue(); bool empty()const; // 判断是否为空 int getCount()const; // 得到队列长原创 2021-06-19 18:19:21 · 608 阅读 · 0 评论 -
C++数据结构——链栈(基本代码实现与案例)
一:基本代码实现#include<iostream>using namespace std;enum error_code { success, underflow};struct node{ int data; node* next; // 指向下一结点};class linkStack {public: linkStack(); ~linkStack(); bool empty()const; error_code get_top(int& x)原创 2021-06-19 16:58:40 · 861 阅读 · 3 评论 -
C++数据结构——顺序队列(基本代码实现与案例)
#include<iostream>using namespace std;enum error_code{ success,overflow,underflow};class queue{ public: queue(int len); bool empty()const; bool full()const; error_code get_front(int &x)const; error_code append(const int x); er原创 2021-06-19 13:56:33 · 1014 阅读 · 0 评论 -
C++数据结构——顺序栈(基本代码实现与案例)
一:enum关键字枚举 enum 是一个类型(class),可以保存一组由用户刻画的值。enum 关键字的作用域是全局的,如果在enum A中声明了一个枚举类型 my_enum,则无法在enum B中声明同样的枚举类型,但是如果二者不在一个作用域里则可以声明。枚举变量的使用:enum error_code{ success, overflow, underflow};error_code a;error_code b = success;二:顺序栈基本代码#include<i原创 2021-06-18 17:28:21 · 885 阅读 · 1 评论 -
C++算法——异或运算解决出现次数问题
首先要了解异或运算,异或是一种二进制的位运算,符号以 XOR 或 ^ 表示。异或的运算规则:先将运算的数化为二进制化为二进制对齐,相同位进行异或操作:1 ^ 1 = 00 ^ 0 = 01 ^ 0 = 1再化为10进制异或的性质(1)交换律: A ^ B = B ^ A(2)结合律: ( A ^ B ) ^ C = A ^ ( B ^ C )(3)自反性: A ^ B ^ B = A (由结合律可推: A ^ B ^ B = A ^ ( B ^ B ) = A ^ 0 = A)原创 2021-06-17 20:43:12 · 1152 阅读 · 1 评论 -
C++递归算法案例
#include<iostream>using namespace std;/* 什么是递归:出现自己调用自己的情况,被称为递归 递归的过程: 第一阶段:将原问题不断分解为新的子问题,将规模逐步减小 第二阶段:达到已知的,可以直接求解的终点,称为递归基 递归的条件: 1. 有反复执行同一个任务的过程(子问题,调用自身) 2. 有跳出反复执行过程的条件(递归出口) */static int n;static long long原创 2021-06-17 15:17:27 · 2585 阅读 · 4 评论