数据结构
文章平均质量分 76
WoLannnnn
沉淀……
展开
-
数据结构——跳跃表
跳跃表介绍跳跃表(skiplist)是一种随机化的数据结构,是一种可以与平衡树媲美的层次化链表结构——查找、删除、添加等操作都可以在对数期望时间下完成,以下是一个典型的跳跃表例子:到底有多随机,我们看了原理就知道了。跳跃表原理这里借助(1条消息) 跳跃表的原理和实现(Java)_CoderLucas的博客-CSDN博客_跳跃表原理和实现 中的图来讲解。查找假设当前我们要查找 39,我们要先从 head (第一层的第一个元素)开始查找:39 > 负无穷,继续往后查找39 >原创 2022-05-24 18:51:03 · 1267 阅读 · 36 评论 -
C++stack和queue及适配器的学习使用
文章目录stack的介绍和使用stack的介绍stack的使用stack的模拟实现queue的介绍和使用queue的介绍queue的使用queue的模拟实现priority_queue的介绍和使用priority_queue的介绍priority_queue的使用在OJ中的使用priority_queue的模拟实现容器适配器什么是适配器STL标准库中stack和queue的底层结构deque的简单介绍deque的原理介绍deque的缺陷为什么选择deque作为stack和queue的底层默认容器STL标准库原创 2021-11-26 20:49:13 · 545 阅读 · 28 评论 -
C++list
文章目录list的介绍及使用list的介绍list的使用list的构造list iterator的使用list capacitylist element accesslist sortlist modifierslist的迭代器失效list的模拟实现模拟实现list对模拟的list进行测试list的介绍及使用list的介绍list的文档介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的原创 2021-11-12 20:46:10 · 1384 阅读 · 16 评论 -
C++vector
文章目录vector的介绍及使用vector的介绍vector的使用vector的定义vector的遍历vector iterator 的使用vector 空间增长问题vector 增删查改vector 迭代器失效问题vector 在OJ中的使用vector深度剖析及模拟实现模拟实现vector使用memcpy拷贝问题对vector核心接口的测试vector的介绍及使用vector的介绍vector的文档介绍 vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存原创 2021-11-09 21:22:21 · 2101 阅读 · 7 评论 -
string的使用
文章目录C语言中的字符串两个面试题标准库中的string类了解string类string类的常用接口说明1.string类对象的常见构造2.string类对象的容量操作size/clear/resize/capacityreserve3.string类对象的访问及遍历操作opetator[]迭代器(类似指针)范围for:4. string类对象的修改操作appendoperator+=c_strfindrfindsubstrinserterasegetlineC语言中的字符串C语言中,字符串是以’\0原创 2021-10-31 21:13:50 · 1085 阅读 · 2 评论 -
理解常用的八个排序
文章目录排序的概念及其运用排序的概念排序运用常见的排序算法插入排序希尔排序选择排序堆排序冒泡排序快速排序左右指针法三数取中法挖坑法前后指针法小区间优化法非递归实现快排归并排序非递归实现内排序与外排序计数排序排序的概念及其运用排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序原创 2021-09-19 17:30:49 · 1518 阅读 · 10 评论 -
数据结构——队列的链式结构实现
文章目录队列队列的概念及结构队列的实现——链式结构队列队列的概念及结构大家买过茶颜悦色的话想必就知道排队的队伍是多么庞大了队列就像我们平时排队的特点一样,排在前面的先买到奶茶。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out,也就是先进先出) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头队列的实现——链式结构队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果原创 2021-09-16 14:13:26 · 344 阅读 · 2 评论 -
数据结构——栈的实现
文章目录栈栈的概念及结构栈的实现栈栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out,也就是后进献先出)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。栈的实现栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。如果选择单链原创 2021-09-15 13:23:54 · 224 阅读 · 4 评论 -
二叉树的实现及基本操作
文章目录二叉树链式结构的实现二叉树的遍历前序、中序以及后序遍历层序遍历二叉树链式结构的实现基本功能BinaryTree.h:typedef char BTDataType;typedef struct BinaryTreeNode{ BTDataType _data; struct BinaryTreeNode* _left; struct BinaryTreeNode* _right;}BTNode;//创建节点BTNode* BuyNode(BTDataType x);/原创 2021-09-14 23:09:29 · 1091 阅读 · 2 评论 -
堆的实现及应用
文章目录堆的概念及结构堆的实现堆向下调整算法堆的创建堆的插入堆的删除堆的代码实现堆的应用堆排序TOP-K问题堆的概念及结构如果有一个关键码的集合K = 把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足: 2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。堆的性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。堆的实现堆向下调整算法假设父亲的下标是parent,左孩子的下标leftchild就原创 2021-09-02 21:47:28 · 760 阅读 · 3 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I
剑指 Offer 53 - I. 在排序数组中查找数字 I统计一个数字在排序数组中出现的次数。**思路一:**直接遍历数组,找到目标数字后进行统计代码:int search(int* nums, int numsSize, int target){ if (numsSize == 0) { return 0; } //数组中不含target if (target < nums[0] || target > nums[numsS原创 2021-08-22 23:20:48 · 158 阅读 · 3 评论 -
剑指 Offer 50. 第一个只出现一次的字符
剑指 Offer 50. 第一个只出现一次的字符在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例:s = "abaccdeff"返回 "b"s = "" 返回 " "**思路:**开辟一个int数组arr,将内容初始化为0。以字符串的每个字符对应的ASCII码值作为数组下标,字符每出现一次就对数组的内容+1,也就是arr是用来统计每个字符出现的个数的,最后找到第一个出现一次的字符。统计完成后,不能以遍历arr的方式找到第一个出现一次的字符,因原创 2021-08-20 13:36:00 · 116 阅读 · 0 评论 -
剑指 Offer 49. 丑数
剑指 Offer 49. 丑数我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1 是丑数。n 不超过1690。**思路:**因为丑数的质因子只有2、3、5,所以大一点的丑数一定可以由2或3或5相乘得到使用三指针p2、p3、p5,创建丑数数组从小到大存放丑数,p2、p3、p5则按从小到大的原创 2021-08-19 13:51:53 · 170 阅读 · 4 评论 -
剑指offer——包含min的子结构题解
剑指 Offer 30. 包含min函数的栈定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top()原创 2021-08-12 10:48:19 · 130 阅读 · 2 评论 -
树的子结构
剑指 Offer 26. 树的子结构不同于判断一棵树是否为另一棵树的子树,这题的判断条件有所不同题目:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3 / \ 4 5 / \ 1 2给定的树 B: 4 / 1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]原创 2021-08-10 22:10:23 · 172 阅读 · 3 评论 -
链表的结构
文章目录1.1 链表的概念及结构1.2 链表的分类1.3 链表的实现1.4 双向链表的实现1.1 链表的概念及结构概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的链表结构在逻辑上是连续的,但是在物理上不一定是连续的现实中的结点一般都是从堆上申请出来的从堆上申请的空间,是按照一定的策略来分配的,两次申请的空间可能连续,也可能不连续假设在32位系统上,节点中 值位int类型,则一个节点的大小为8个字节,则也有可能有下述链表:1.2 链原创 2021-08-05 15:33:41 · 1752 阅读 · 1 评论 -
链表12道经典OJ题——助你理解链表原理
文章目录1.移除链表元素2.反转链表3.链表的中间结点4.链表中倒数第k个结点5.合并两个有序链表6.链表分割7.链表的回文结构8.相交链表9.环形链表10.求环的入口点11.复制带随机指针的链表12.对链表进行插入排序注:部分图片从leetcode转载后面偷懒了,有些图没画个人认为11题是难度较高的题,如果有大佬觉得不过如此,还望指导指导1.移除链表元素OJ链接给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新原创 2021-08-05 15:32:00 · 725 阅读 · 5 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串
剑指 Offer 48. 最长不含重复字符的子字符串请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,原创 2021-08-18 11:57:39 · 166 阅读 · 4 评论 -
剑指 Offer 47. 礼物的最大价值
剑指 Offer 47. 礼物的最大价值在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入: [ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物**思路:**遍历礼物方格,对所在位置左边和上面较大的值原创 2021-08-17 22:45:06 · 185 阅读 · 3 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
剑指 Offer 39. 数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2思路一:利用qsort函数,先排序,再找到下标为size(数组长度) / 2 的元素,秒杀代码:int cmp(const void*s1, const void*s2){ return *((int*)s1) - *((int*)原创 2021-08-17 11:25:09 · 95 阅读 · 0 评论