
数据结构
文章平均质量分 86
后台服务器开发
这个作者很懒,什么都没留下…
展开
-
数据库索引漫谈
数据库索引漫谈前言 大家在平时工作学习中,使用到索引的场景有非常多,比如查询缓慢等等场景,但是索引是什么东西?怎么使用索引?怎么才能命中索引?等等一系列问题提出时,是不是会懵一下,这篇文章就带大家研究下索引和命中率的一系列问题。什么是索引概念:索引是帮助数据库高效获取数据的排好序的数据结构。从概念上讲数据库索引的本质是数据结构。(重要)索引是表级别的,不是库级别的,最简单的例子就是在创建表的时候我们需要指定存储引擎。索引分类常见MySQL索引一般分为:Hash索引和B+原创 2021-01-17 09:43:41 · 252 阅读 · 0 评论 -
大道至简—循环队列
大道至简—循环队列一、前言 队列可能是大家学习linux通讯时接触到的知识,当然也是我们在编程中使用较多的一个点,其中最主要的一方面用来降低程序之间的耦合度,还有异步操作; 前段时间在公司写了一个小的服务,同样使用了队列对服务进行了异步操作,知识队列没有使用现有的一些大型库,自己使用了原生的STL队列中的接口,进行了简单的封装,当前对代码调优不够,后来才发现有很多的漏洞影响着性能;其中就有一条是引发今天这篇文章的元素——在程序中,需要不断的申请释放内存,这样就影响了程序的性能; 使原创 2020-09-18 08:00:26 · 281 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2017-08-24 12:11:34 · 293 阅读 · 0 评论 -
红黑树(RB-tree)比AVL树的优势在哪?
今天看了STL源码剖析中关于红黑树的原理和实现,看完复杂的节点插入、节点颜色变换后不禁想:这些功能经典的AVL树也能实现,为什么要提出红黑树?查了些资料,并且加上自己理解,感叹红黑树的巧妙。首先红黑树是不符合AVL树的平衡条件的,即每个节点的左子树和右子树的高度最多差1的二叉查找树。但是提出了为节点增加颜色,红黑是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内转载 2017-11-11 10:42:46 · 388 阅读 · 0 评论 -
链表环问题
求解单链表手否有环问题:1,设置快慢指针,low和fast2,慢指针每次走一步,快指针每次走两步3,如果慢指针和快指针相遇,则说明有环 求解单链表环入口点的步骤:1:使用“指针追赶”方法找到相遇点(网上资料很多,此处略)。2:指针p1从链表头、p2从相遇点,同时出发,一次移动一个节点,再次的相遇点便是环的入口点。 理解了好久,终原创 2017-07-12 09:08:27 · 396 阅读 · 1 评论 -
树的非递归遍历(很易懂)
转载请注明出处:http://blog.youkuaiyun.com/ns_code/article/details/12977901二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的。二叉树有前、中、后三种遍历方式,因为树的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁且容易理解,但其开销也比较大,而若采用非递归方法实现三种遍历,则要用栈来转载 2017-04-16 14:55:49 · 2065 阅读 · 1 评论 -
线性表详解
线性表概念:线性表是一个有限序列,各个表项相继排列,第一个为表头,最后一个是表尾,且每两个相邻项之间有前驱和后继的关系。线性表分为有序线性表和无序线性表。1.顺序表的存储单元La1a2...ai...an 01 i-1原创 2017-04-09 17:22:16 · 444 阅读 · 0 评论 -
顺序表《Sqlist》
Sqlist线性表的实现步骤:1.申请空间:使用new申请2.打印顺序表:循环来打印,循环中i的值小于长度3.插入元素:长度加1,在插入的之后每个值的下标都+1,也就是向后移动一个位置。判断空间是否满,判断插入元素是否符合。4.删除元素:长度减一,在删除之后的每个值向前移动一个位置,也就是在删除元素之后都向前移动一个位置。判断空间是否空,判断插入元素是否符合。 代码原创 2016-10-04 22:52:45 · 2180 阅读 · 0 评论 -
栈《Stack》
Stack栈:先进后出步骤:1.申请空间:new,建立空栈2.打印:注意从最后一个元素开始打印3.入栈,注意是否满栈4.出栈,注意是否是满栈或者栈空5.检测栈的状态 代码: #include 2 using namespace std; 3 4 template 5 class Stack 6 { 7 public:原创 2016-10-04 22:50:33 · 363 阅读 · 0 评论 -
内存
内存:在C语言中,一般把内存分为5部分,分别为:全局区、代码区、常量区、堆、栈。接下来介绍一下这五个不同的区域:1.全局区:这个区贯穿整个程序的运行区,用于存放全局变量、静态变量。全局变量的分配和释放都由编译器来自动完成。2.代码区:存放程序的区域。3.常量区:在编程过程中存放常量,常量的分配和释放都由编译器来自动完成。4.堆:在程序运行过程中,通常会产生一些临时的数据,所原创 2016-10-17 22:15:52 · 336 阅读 · 0 评论 -
时间复杂度与空间复杂度
相信大家一定有和我一样的情况,学了了很久的数据结构和算法,但是对于空间复杂度和时间复杂度都有点模糊,有时候不懂得怎么去计算。接下来,我看了很多的资料,总结出来一部分东西,希望有用。首先,我们来看看官方的解释:时间复杂度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。 一般情况下,原创 2016-11-07 22:13:25 · 536 阅读 · 0 评论 -
链表《Link》
链表(Link)使用线性表的不足之处:1.如果长度不确定,使用线性表时,会很不方便,运算效率比较低。2.在线性表时,插入和删除一个数时,要移动大量的数据,会造成效率低下。3.当为一个线性表分配存储空间时,如果存储空间满的话,再次插入数据的话,会造成“上溢”错误。这上面的三个不足,在链表中都可以得到解决。 在链式存储方式中,要求每个节点由两部分组成:一部分用于存放数据元素原创 2016-10-13 16:26:54 · 1028 阅读 · 0 评论 -
队列<queue>
队列的概念:指允许在一端进行插入、在另一端进行删除的线性表。允许插入的一端是队尾,通常用rear(尾指针)总是指向队尾,允许删除的是排头,front(头指针)指向排头元素的前一个位置。循环队列:将队列的最后一个位置绕到第一个位置,形成逻辑上的环状,供队列循环使用;在循环队列中,当储存的最后一个位置被使用而再要进行入队时,只要第一个位置空闲,便可以将第一个元素放到第一个位置,即存储空间的原创 2016-10-08 23:07:55 · 599 阅读 · 0 评论 -
线性表详解
线性表概念:线性表是一个有限序列,各个表项相继排列,第一个为表头,最后一个是表尾,且每两个相邻项之间有前驱和后继的关系。线性表分为有序线性表和无序线性表。1.顺序表的存储单元La1a2...ai...an 01 i-1原创 2016-08-20 16:25:38 · 713 阅读 · 0 评论 -
AVL树的旋转
通常,我们在平衡二叉树进行插入和删除的时候常常会破坏平衡二叉树,所以我们必须通过一种方法来再次平衡二叉树使之成为平衡二叉树,这种办法就是旋转。旋转可以分为四种,分别为:1.左单旋转2.右单旋转3.先左后右双向旋转4.先右后左双向旋转接下来我们去分析这四种旋转并且依次用代码实现1.左单旋转旋转过程: 在原有的平衡树中插入20这个节点,导致不平衡,通过旋转原创 2016-08-11 23:11:26 · 915 阅读 · 0 评论 -
AVL树平衡因子详解
AVL树就是平衡二叉树,左子树和右子树的高度之差绝对值不超过1。而且规定,平衡二叉树的每个节点的平衡因子只能是-1 ,1 ,0;按照公式 平衡因子 = 右子树的高度 - 左子树的高度-1 : 表示左子树比右子树高1 : 表示右子树比左子树高0 : 表示左子树和右子树等高 但是很多人都知道公式,但却有时候不知道怎么去看一个平衡二叉树。接下来我为大家详原创 2016-08-11 20:59:04 · 24444 阅读 · 13 评论 -
二叉树详谈(一)
二叉树详谈1.二叉树就是有很多节点(n>=0),如果n=0,则此二叉树为空二叉树;当n>0时,二叉树满足条件:只有一个根节点(root),没有前驱节点,但是有0,1或2直接的后继节点如图所示: 2.二叉树的五种基本形态(1)空二叉树(2)只有一个节点的二叉树(3)只有左子树的二叉树(4)只有右子树的二叉树(5)既有左子树又有右子树的二叉树3.二原创 2016-08-04 15:22:37 · 436 阅读 · 0 评论