数据结构
文章平均质量分 56
ETalien_
足够优秀才能接住上天给的惊喜和机会
展开
-
数据结构:时间复杂度与空间复杂度
时间复杂度与空间复杂度一、时间复杂度时间复杂度的概念时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一 个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知 道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个 分析方式。一个算法所花费的时间与其中语句的执行次数成正比...原创 2018-10-14 18:21:10 · 673 阅读 · 0 评论 -
数据结构:大数据处理问题
1.给定100亿个整数,设计算法找到只出现一次的整数?①方法一100亿个整数就是400亿个字节,42亿九千万是4G,那么1G就是10亿字节,所以要存下100亿个整数需要40G的内存空间。因此我们采用位图100亿个整数大概就是1G,但是使用位图,需要用两个位标识一个数字(两个位可以标识四种状态),没有出现过为00,出现一次为01,出现两次及以上为10,11可以丢弃。所以2G空间就够了。那么现在...原创 2019-06-12 12:59:21 · 968 阅读 · 0 评论 -
数据结构:布隆过滤器
布隆过滤器假如现在有40亿个ip地址(string类型),然后给你一个ip地址,让你查找这个ip地址在不在这40亿个ip地址里?我们应该怎么做呢?如果用哈希表来处理的话,这里有40亿的数据,数据量太大,因此太占用空间如果用位图来处理的话,这里因为是字符串,有可能不同的字符串映射的是同一个位,会有哈希冲突的问题,导致误判因此我们采用的是哈希+位图的方法,也就是布隆过滤器布隆过滤器是由布...原创 2019-06-10 17:46:49 · 964 阅读 · 0 评论 -
数据结构:红黑树的旋转原理和模拟实现
红黑树的旋转原理和模拟实现我们了解到AVL树虽然效率很高,但是它是通过多次的旋转才到达一个绝对的平衡,旋转的消耗其实也很大。因此开始引入近似平衡的一棵树----红黑树(RBTree)。红黑树每一个节点不是红色的就是黑色的,它保证了最长路径不超过最短路径的二倍。其实一般来说使用红黑树会比AVL树更多,因为虽然AVL树是更加平衡的,但是它的平衡是通过更多次的旋转得到的,旋转的时候消耗还是很大的。而...原创 2019-05-21 09:54:58 · 965 阅读 · 0 评论 -
数据结构:AVL树旋转原理和简易实现
AVL树旋转原理和简易实现二叉搜索树虽然可以提高搜索效率,但是如果插入的数据有序时很有可能变成单支,如果变成单支树的时候,那么查找时效率也不高了。因此引入AVL树。AVL树是当向这棵树插入节点的时候,要保证每个节点的左右子树的高度差都不超过1,如果超过1时就要对这棵树的分支进行旋转。AVL树的特性:它的左右子树都是AVL树左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)...原创 2019-05-19 14:05:01 · 681 阅读 · 0 评论 -
数据结构:实现一个队列,并完成各个接口的实现
实现一个队列队列的概念队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。下图是一个动图,表现了一个队列入数据和出数据的整体过程。队列的实现队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出...原创 2019-01-05 18:13:54 · 793 阅读 · 0 评论 -
数据结构:实现一个栈,并完成各个接口的实现
实现一个栈栈的概念栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守 后进先出 LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。栈的实现栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实...原创 2018-11-10 21:45:39 · 628 阅读 · 0 评论 -
数据结构:实现动态顺序表的各项接口(初始化,销毁,尾插尾删,头插头删,删除,排序,查找等)
实现动态顺序表SeqList.h#pragma once////静态顺序表//#define N 10//typedef int SLDateType;//typedef struct SeqList//{// int _a[N];//数组// size_t _size;//有多少个有效数据//}SeqList;//#include <stdio.h&原创 2018-11-04 21:14:44 · 396 阅读 · 0 评论 -
数据结构:实现单链表的各个接口
实现单链表的各个接口SList.h#pragma once#include <stdlib.h>#include <stdio.h>#include &原创 2018-11-06 18:25:46 · 359 阅读 · 0 评论 -
数据结构:实现双向带头循环链表的各个接口
实现双向带头循环链表的各个接口List.h#pragma once#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef int LTDateType;typedef st原创 2018-11-08 18:14:49 · 165 阅读 · 0 评论 -
数据结构:位图
位图位图,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。位图其实是用数组实现的,数组的每一个元素的每一个二进制位都可以表示一个数据在或者不在,0表示数据存在,1表示数据不存在。因为比特位只有两种状态,要不是0,要不就是1,所以位图其实就是一种直接定址法的哈希,只不过位图只能表示这个值在或者不在。 如下图所示:当我们探测到25比特...原创 2019-06-06 16:59:02 · 17959 阅读 · 3 评论