![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Number_0_0
努力的从小菜鸡变成战斗机!!!
展开
-
二叉树的构造与遍历
为什么需要遍历二叉树?二叉树是非线性数据结构,通过遍历可以将二叉树中的结点访问一次且仅一次,从而得到访问结点的顺序序列。从这个意义上说,遍历操作就是将二叉树中的结点按一定规律线性化的操作,目的在于将非线性化数据结构变成可线性化的访问序列。二叉树的遍历操作是二叉树中最基本的运算。#pragma once#define _CRT_SECURE_NO_WARNINGS 1#include#in原创 2017-03-01 15:47:03 · 537 阅读 · 0 评论 -
实现1+2+3...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
通常求1+2+…+n除了用公式n(n+1)/2之外,无外乎循环和递归两种思路。由于已经明确限制for和while的使用,循环已经不能再用了。同样,递归函数也需要用if语句或者条件判断语句来判断是继续递归下去还是终止递归,但现在题目已经不允许使用这两种语句了。 我们仍然围绕循环做文章。循环只是让相同的代码执行n遍而已,我们完全可以不用for和while达到这个效果。比如定义一个类,我们new一含有原创 2017-07-14 10:17:38 · 921 阅读 · 0 评论 -
简单选择排序,树形选择排序,堆排序详解
选择类排序的基本思想:每一趟在n-i+1个记录中选取关键字最小的记录作为有序序列中第i个记录,本篇博客主要介绍简单选择排序,并在其基础上给出了改进算法——树形选择排序(也称作锦标赛排序),堆排序。简单选择排序【算法思想】第一趟简单选择排序时,从第一个记录开始,通过n-1次关键字比较,从n个记录中选出关键字最小的记录,并和第一个记录交换。第二趟简单选择排序时,从第二个记录开始,通过n原创 2017-04-06 22:35:03 · 1741 阅读 · 0 评论 -
堆的相关操作
【堆的概念】如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki(Ki >= K2*i+1 且 Ki >= K2*i+2) i = 0,1,2…,则称这个堆为最小堆(或最大堆)。最小堆:任一结点的关键码均小于等于它的左右孩子的关键码,位于堆顶结点的关键码最小。最大堆:任一结点的原创 2017-04-18 16:37:03 · 544 阅读 · 0 评论 -
二叉树操作详解
本篇针对面试中常见的二叉树操作作个总结: (1)前序遍历,中序遍历,后序遍历; (2)层次遍历; (3)求树的节点数; (4)求树的叶子数; (5)求树的深度; (6)求二叉树第k层的节点个数; (7)判断两棵二叉树是否结构相同; (8)求二叉树的镜像; (9)求两个节点的最低公共祖先节点; (10)求任意两节点距离;转载 2017-04-13 17:52:28 · 732 阅读 · 0 评论 -
二叉搜索树
二叉搜索树 【概念】 二叉搜索树:又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树 1、若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 2、若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 3、它的左右子树也分别为二叉搜索树 例:此树就是一颗二叉搜索树。 【操作】—搜索:若根节点不为空 如果根节点的key=原创 2017-04-17 17:53:20 · 435 阅读 · 0 评论 -
栈和队列相关面试题(1)
题目:实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)。方法一:使用一个栈。元素x入栈时,执行一次push(x),再push(min),min表示当前栈顶到栈底元素最小值;元素出栈时,执行两次pop() 。缺点:当第一个元素就是带插入所有元素中最小时,每次push都需要重复push相同元素,浪费了很多不必要的空间,操作冗余。原创 2017-04-07 15:24:59 · 662 阅读 · 0 评论 -
归并排序
归并排序基本思想是基于合并,将两个或两个以上有序表合并成一个新的有序表。合并两个子序列的过程称为两路归并。【算法思想】假设初始序列含有n个记录,首先将这n个记录看成n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2(n为奇数时,最后一个蓄力的长度为1)的有序子序列。在此基础上,在对长度为2的有序子序列进行两两归并,得到若干个长度为4的有序子序列。如此重复,直原创 2017-04-06 22:55:47 · 739 阅读 · 0 评论 -
交换类排序详解及总结
交换类排序思想是通过一系列交换逆序元素进行排序的方法。本文首先介绍基于简单交换思想实现的冒泡排序法,在此基础上给出改进方法——快速排序法。冒泡排序【算法思想】反复扫描待排序记录序列,在扫描的过程中顺次比较相邻的两个元素的大小,若逆序就交换位置。以升序为例,在第一趟冒泡排序中,从第一个记录开始,扫描整个待排记录序列,若相邻的两个位置逆序,则交换位置。在扫描的过程中,不断地将相原创 2017-03-21 15:46:44 · 2489 阅读 · 0 评论 -
插入类排序详解及总结
插入排序的基本思想:在一个已排好序的纪录子集的基础上,每一步将下一个待排序的记录有序插入到已排好序的记录子集中,直到将所有待排记录全部插入为止。例如:打扑克牌时抓牌就是插入排序的一个很好的例子,每抓一张牌,插入到合适位置,知道抓完牌为止,即可得到一个有序序列。直接插入排序:【算法思想】 直接插入排序是一种最基本的插入排序方法,其基本操作是将第i个记录插入到前面i-1个已排好序的记录中。具体原创 2017-03-20 12:20:11 · 1160 阅读 · 0 评论 -
布隆过滤器
位图只能用来快速判断一个整数是否在一堆整数中,如果我们想要判断一个字符串是否在一堆字符串里,那么位图就做不到了,因此布隆过滤器就出现了。它是由一个很长的二进制向量和一系列随机 映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。那我们可以利用哈希函数计算出它具体的存放位置。 它的优点是空间效率和查询时间都远远超过一般的算法,将这40亿的数据内存由16GB变成500MB,可见其强大。 缺原创 2017-08-06 21:25:56 · 373 阅读 · 0 评论