
数据结构
文章平均质量分 51
Mr_Garfield__
这个作者很懒,什么都没留下…
展开
-
关于时间复杂度和空间复杂度的计算
衡量一个算法的复杂度:时间复杂度空间复杂度算法的时间复杂度和空间复杂度合称为算法的复杂度时间复杂度一般来说,一个算法执行所消耗的时间从理论上是算不出来的,只有通过上机运行才能测试出来。当然,我们也没必要知道一个算法它具体执行的时间是多少,而我们又知道,一个算法花费的时间与算法中语句的执行次数是成正比的。哪个算法语句执行的次数多,它花费的时间就多。void Tes...原创 2017-12-09 23:12:57 · 11936 阅读 · 3 评论 -
哈希扩展——位图&布隆过滤器
位图来看一道题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 要快速判断一个数是否在一组数中:比较快的算法有:平衡搜索树、哈希表等。而这里如果直接建立一个哈希表的话,每个节点存一个数据,对于40亿的数据需要40亿个整型单元,这相当于100+G内存,显然这种方法不可行。 那么,我们便想到能不能用一个bit位来表示一个数存在或者不存...原创 2018-03-06 00:28:46 · 441 阅读 · 0 评论 -
堆排序&优先级队列
堆1.大根堆:根节点的值都大于或等于子树的值 小根堆: 根节点的值都小于或等于子树的值堆是完全二叉树创建一个堆: i)存储: 用顺序表存储 ii).第一步: 将数据集合存储成完全二叉树 第二步: 调整成堆#define DataType intvoid AdjustDown(DataType *a, size_t n, int root){ i...原创 2018-02-25 20:34:28 · 443 阅读 · 0 评论 -
排序算法学习之快速排序
快速排序快速排序,简称快排,在排序中,快速排序其实就是我们前面认为最慢的冒泡排序的升级,它们都属于交换排序类。即快排也是通过不断比较和移动交换来实现排序的,不过它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的从后面直接移动到前面,从而减少了总的比较次数和移动交换次数。 基本思想: 任取待排元素序列中的某元素中的作为基准值,按照该排序...原创 2018-03-10 22:11:45 · 464 阅读 · 0 评论 -
哈希表的实现(闭散列法和拉链法)
哈希表哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构。它通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的速度。这个映射函数就做散列函数,存放记录的数组叫做散列表。理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。 如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能...原创 2018-03-02 00:07:18 · 1499 阅读 · 0 评论 -
函数的调用过程,栈帧的创建和销毁
函数的调用过程,栈帧的创建和销毁 最近总被人问到有关函数传值调用的问题,当然像形参的改变不影响实参,数组的传值会退化成指向数组首元素的一级指针这样的问题尽管我们已经很清楚了,但在调试程序的时候总会发现自己屡屡会犯错。所以深入理解函数的调用过程,栈帧的创建和销毁对于我们非常重要。我们知道每一次函数调用都是一个过程。 这个过程我们通常称之为:函数的调用过程。 这个过程要为函数开...原创 2018-02-28 20:06:08 · 464 阅读 · 0 评论 -
字符串中第一个只出现一次的字符——剑指offer面试题40
题目:字符串中第一个只出现一次的字符。 在字符串中找出第一个只出现一次的字,如输入“abaccdeff”,则输出’b’。 很多人读完这道题,会觉得这道题看起来并不难,只需要 从头开始扫描这个字符串的每一个字符,当访问到某个字符时,拿这个字符和后面的每个字符相比较,如果后面没有发现重复的字符,...原创 2018-02-27 18:07:44 · 362 阅读 · 0 评论 -
模拟实现一个简单的中英互译字典——二叉搜索树的应用KV模型
模拟实现一个简单的中英互译字典 请模拟实现一个简单的中英互译字典,要求能实现简单的查找,插入新词以及删除操作;例如BinaryTree.h#pragma once#include <stdio.h>#include <stdlib.h>//二叉搜索树的应用//1. 请模拟实现一个简单的中英互译的字典...原创 2018-02-27 17:19:42 · 645 阅读 · 0 评论 -
二叉搜索树的后序遍历序列------剑指offer面试题33
面试题33:二叉搜索树的后序遍历序列 题目:输入一个整数数组,判断该数组是不是某二叉树的后序遍历结果。如果是,返回true,否则返回false;假设输入的数组的任意两个数字都互不相同。例如,输入数组{5,7,6,9,11,10, 8},则返回true.在后序遍历得到的序列中,最后一个数字是树的根节点的值。数组中的前面的数字可以分为两个部分:第一部分是左子树结点的值,它们都比根...原创 2018-02-26 21:57:47 · 473 阅读 · 0 评论 -
二叉搜索树的创建、插入、删除和查找的C语言实现
二叉搜索树(BST)1.二叉搜索树的概念二叉搜索树又称二叉排序树,它或者是一棵空数,或者是具有以下性质的二叉树: 1. 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值. 2. 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值. 3. 它的左右子树也分别为二叉搜索树int a[] = {5,3,4,1,7,8,...原创 2018-02-26 21:24:50 · 1805 阅读 · 0 评论 -
深度剖析STL空间配置器
STL空间配置器:空间配置器(allocator),顾名思义就是用来配置,管理,分配,释放内存空间,它隐藏在一切容器的背后,默默工作,默默付出。1.空间配置器为什么不叫内存配置器: 因为空间不一定是内存,配置的空间可以是内存也可以是硬盘,额是的,SGI STL提供的空间配置器是内存配置的对象,是内存2.为什么要有空间配置器: 小块内存带来的内存碎片问题 ...原创 2018-07-29 19:44:49 · 724 阅读 · 0 评论