数据结构
文章平均质量分 76
shangguan_1234
这个作者很懒,什么都没留下…
展开
-
go语言学习笔记
3.12-3.15go语言学习集合类型值/指针和引用类型s == s[:i]+s[i:] z := 37//z为int类型pi := &z//pi为*int类型ppi :=&pi//ppi为**int类型 **ppi++z=38 *pi=38 **ppi=38 1.go语言的(点)操作符能够自动地将指针解引用,因为它所指向的是结构体2.go语言中有些类型是引用类型:映射。切片。通...原创 2018-03-15 18:02:35 · 492 阅读 · 0 评论 -
【面试题】剑指offer18
题目: 输入两颗二叉树A和B,判断B是不是A的子结构。#include<iostream>using namespace std;struct BinTreeNode { int _value; BinTreeNode* _pLeft; BinTreeNode* _pRight; BinTreeNode(int x) :_value(x)原创 2017-03-08 21:02:19 · 275 阅读 · 0 评论 -
【算法】几种排序代码
#include<iostream>#include<cstdlib>using namespace std;int ThreeMid(int * arr,int left,int right){ int mid=left+((right-left)>>1); while (left<right) { if(arr[left]<arr[righ原创 2017-03-17 17:53:52 · 385 阅读 · 0 评论 -
【数据结构】图Graph的邻接矩阵,邻接表及深度、广度遍历
图的分类有/无向图如果给图的每条边规定一个方向,那么得到的图称为有向图。在有向图中,与一个节点相关联的边有出边和入边之分。相反,边没有方向的图称为无向图。下面介绍图的两种存储结构1、邻接矩阵用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据,这个二维数组称为邻接矩阵。邻接矩阵又分为有向图邻接矩阵和无向图邻接矩阵邻接矩阵的原创 2016-11-27 16:40:34 · 3714 阅读 · 0 评论 -
【项目】内存池(对象池)
项目名称:内存池环境:VS2010内容:利用链表存数组的形式实现目的:系统中的new和delete调用比较消耗资源,设计一个相对消耗较小的对象池大致思想:一个链表指向空闲内存,分配就是取出一块来,改写链表,返回,释放就是放回到链表里面,并做好归并。注意做好标记和保护,避免二次释放,还可以花点力气在如何查找最适合大小的内存快的搜索上,减少内存碎片这里假设申请了12个字节大原创 2016-12-05 15:17:31 · 619 阅读 · 0 评论 -
【数据结构】二叉树中任意两节点的最近公共祖先节点
问题要求:任意给出二叉树中的两个节点,求他们的最近祖先分三种情况:1、该二叉树是搜索二叉树如果两个节点的值都大于根节点,则遍历右子树查找一个处于两节点之间的值为最近祖先,如果两个节点的值都小于根节点,则遍历左子树查找一个两节点之间的值为最近祖先插入代码Node* SearchNearAncestor(Node* root,Node* node1,Node*node2) {原创 2016-11-19 15:52:12 · 3281 阅读 · 0 评论 -
【STL】map如何进行排序并且求的TopK
上一篇博客已经简单的介绍了map的一些简单用法,下面简单分析下算法库中的排序sorttemplate void sort ( RandomAccessIterator first, RandomAccessIterator last );template void sort ( RandomAccessIterator first, RandomAccessIt原创 2016-11-15 18:05:22 · 693 阅读 · 0 评论 -
【STL】set map的基本用法
setpublic member functionset::begin iterator begin ();const_iterator begin () const;Return iterator to beginningReturns an iterator referring to the first element in the set co原创 2016-11-13 21:39:20 · 1185 阅读 · 0 评论 -
【数据结构】B树(B-Tree)
B树1970年,R.Bayer和E.mccreight提出了一种适合外查找的树,它是一种平衡的多叉树,称为B树。(有些地方写的是B-树,注意不要误读成"B减树")一棵M阶(M>2)的B树,是一棵平衡的M路平衡搜索树,可以是空树或者满足一下性质:1. 根节点至少有两个孩子2. 每个非根节点有[ ,M]个孩子3. 每个非根节点有[ -1,M-1]个关键字,并且以升序排列4.原创 2016-11-12 14:59:31 · 1221 阅读 · 0 评论 -
【数据结构】红黑树
红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是红色也可以是黑色。通过对任何一条从根到叶子简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而近似于平衡。红黑树满足下面的性质1 . 每个节点,不是红色就是黑色的2 . 根节点是黑色的3 . 如果一个节点是红色的,则它的两个子节点是黑色的4 . 对每个节点,从该节点到其原创 2016-10-30 15:42:28 · 510 阅读 · 1 评论 -
【数据结构】利用堆建立哈夫曼树
建堆#pragma once #include #include using namespace std;// 小堆 templatestruct Less{ bool operator() (const T& l, const T& r) { return l < r; }};//大堆templatestruct Greater{原创 2016-10-30 00:05:22 · 734 阅读 · 0 评论 -
【数据结构】二叉树的线索化
现将二叉树的结点结构重新定义如下:leftchildlefttag_daterighttagrightchild其中:lefttag=0 时leftchild指向左子女;lefttag=1 时leftchild指向前驱;righttag=0 时rightchild指向右子原创 2016-10-06 17:43:53 · 225 阅读 · 0 评论 -
大数据面试题解决方案
1)给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?!解决方法将100G分成100份,将每个ip映射到相应文件中 ip_if=ip%100找出每个文件中的出现次数最多的一个ip再将100份里找出来的最多的一个放入一个哈希表中进行比较找出最大值2)与上题条件相同,如何找到top K的IP?如何直接⽤用Linux系统命令实现?原创 2016-11-09 19:24:15 · 1724 阅读 · 0 评论 -
布隆过滤器
布隆过滤器的概念如果想要判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路. 但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢(O(n),O(logn))。不过世界上还有一种叫作散列表(又叫哈希表,Hash table)的数据结构。它可以通过一个Hash函数将一个元素映射成一个位阵列(Bit a原创 2016-11-08 21:04:00 · 754 阅读 · 0 评论 -
【面试题】剑指offer14
题目: 调整数组数据使奇数全部在偶数前面 解法一:void oddnumberfront1(int *arr,int length){ if (arr==NULL||length==0) { return; } int* first; int* last; first=arr; last=arr+length-1;原创 2017-03-06 16:16:24 · 400 阅读 · 0 评论 -
【面试题】剑指offer 19
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像 代码#include<iostream>#include<cstdlib>using namespace std;struct BinTreeNode{ int _value; BinTreeNode* _pLeft; BinTreeNode* _pRight; BinTreeNode(int x)原创 2017-03-09 19:12:52 · 251 阅读 · 0 评论 -
对某门禁系统部分代码做线程控制
线程控制部分代码 c++11中的方法 m_Worker = std::make_shared<Linkface::SimpleWorker>([&](){ int len = m_Buffer.DataLen(); if(len <= 0) return; BYTE * buffer = new BYTE[len]; m_Buffer原创 2017-08-23 15:09:03 · 811 阅读 · 0 评论 -
人脸识别部分内存调用优化
优化内容 :void realloc_if_need(){ size_t reserve_items=std::max(static_cast<int>(max_items/10),512); size_t allocate_items=0; bool need_realloc=false; if(getAllocatedSize()=原创 2017-08-23 15:03:21 · 806 阅读 · 0 评论 -
【算法】常见的七种排序及其算法优化
1、插入排序有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的原创 2016-11-23 21:23:37 · 4018 阅读 · 0 评论 -
【面试题】剑指offer 17
题目: 输入两个递增的链表,合并两个链表,并返回合并后的头结点#include<iostream>using namespace std;struct ListNode{ int _value; ListNode* pNext;};class MyList{public: MyList() :pHead(NULL) {} ~M原创 2017-03-07 17:32:16 · 340 阅读 · 0 评论 -
【面试题】剑指offer21
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,pop,push的时间复杂度都为O(1)#include<stack>#include<cassert>#include<iostream>using namespace std;template<typename T>class MyStack{public: MyStack()原创 2017-03-10 12:07:12 · 283 阅读 · 0 评论 -
【面试题】剑指offer 15
题目: 输入一个链表,输出该链表的倒数第k个节点。#include<iostream>#include<cstdlib>using namespace std;struct ListNode{ ListNode* pNext; int _value;};class List{public: List() :pHead(NULL)原创 2017-03-06 20:03:22 · 313 阅读 · 0 评论 -
【面试题】剑指offer20
题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如: 1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16 输出 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 代码#include<iostream>#include<cstdlib>using namespace std;void Pr原创 2017-03-09 20:51:32 · 225 阅读 · 0 评论 -
【数据结构】AVL树的旋转和插入
AVL树左单旋代码实现void _RotateL(Node* parent) { Node* subR=parent->_right; Node* subRL=subR->_left; Node* ppNode=parent->_parent; subR->_left=parent; parent->_right=subRL; if(subRL)原创 2016-10-25 22:25:17 · 586 阅读 · 0 评论 -
【数据结构】位图
位图来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。如果说了这么多还没明白什么是Bit-map,那么我们来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit-map的方法原创 2016-11-06 17:04:31 · 428 阅读 · 0 评论 -
【数据结构】栈实现迷宫寻路问题
思路:解决迷宫求解的问题,从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,所以需要用一个后进先出的结构来保存从入口到当前位置的路径。因此,在求迷宫通路的算法中要应用“栈”的思想假设“当前位置”指的是“在搜索过程中的某一时刻所在图中某个方块位置”,则求迷宫中一条路径的算法的基本思想是原创 2016-09-11 22:07:29 · 4332 阅读 · 0 评论 -
【c++】关于时间复杂度和空间复杂度的相关问题
时间复杂度同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值字符串的长度的函数。时间复杂度常用大写的o表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。原创 2016-09-07 18:10:54 · 1022 阅读 · 0 评论 -
单链表的一些基本操作
本文主要介绍了单链表的初始化/头插/头删/尾插/尾删/查找/指定位删除/指定数删除/指定位插入/销毁/排序等.头文件#ifndef __LINKLIST_H__#define __LINKLIST_H__#include#include#includetypedef int DataType;typedef struct LinkNode{DataType data;s原创 2016-06-04 19:13:11 · 523 阅读 · 0 评论 -
静态存储实现通讯录
静态存储方式所谓静态存储方式是指在程序运行期间分配固定的存储空间的方式变量的存储方式可分为:"静态存储"和"动态存储"两种。静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。全局变量即属于此类存储方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形式参数,在函数定义时并不给行参分配存储单元,只是在函原创 2016-05-21 16:12:49 · 318 阅读 · 0 评论 -
动态存储实现通讯录
动态存储方式所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、释放形参变量的存储单元。原创 2016-05-21 16:17:59 · 309 阅读 · 0 评论 -
文件存储实现通讯录
文件操作fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式) 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。 “使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。 文件使用方式 意 义 “rt” 只读打开一个文本文件,只允许读数据 “wt” 只写打开或建立一个文本文件,只原创 2016-05-21 16:24:57 · 543 阅读 · 0 评论 -
插入排序、选择排序
插入排序:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法--插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所原创 2016-06-03 00:04:44 · 256 阅读 · 0 评论 -
静态顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。长这个样子下面简单介绍顺序表的操作头文件#include#include#include#include#define MAX 100typede原创 2016-06-03 00:21:09 · 373 阅读 · 0 评论 -
动态实现顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。下面来进行顺序表的动态实现头文件#ifndef __SEQLIST_D_H__#define __SEQLIST_D_H__#include#include原创 2016-06-03 00:31:43 · 275 阅读 · 0 评论 -
文件实现通讯录修改版
头文件#define _CRT_SECURE_NO_WARNINGS 1#ifndef __CONTACT_H__#define __CONTACT_H__#include #include #includeenum OP{ EXIT, ADD, DEL, MODIFY, SEARCH, DISPLAY, SORT, CLEAR};#define N原创 2016-06-03 00:39:00 · 279 阅读 · 0 评论 -
【STL】模拟STL中的List轮
直接进入正题:先来看看list轮是个什么东西每一个节点都一个prev指针和一个next指针,除了第一个节点没有内容,但它的prev指针指向最后一个节点,最后一个元素的next指针指向第一个元节点首先看看STL库中的list 接口:(本文全部用类模版实现)要实现这么多的函数,这里只是实现基本的函数定义节点结构templatestruct _ListNode原创 2016-09-13 20:25:42 · 255 阅读 · 0 评论 -
【数据结构】基于堆的优先级队列
#include #include #include#include using namespace std;templatestruct Big{ bool operator()(const T& l,const T& r) { return l>r; }};templatestruct Less{ bool operator()(const T& l,cons原创 2016-10-11 21:30:05 · 274 阅读 · 0 评论 -
【数据结构】大小堆的实现及堆排序
堆一般指二叉堆,结构如下圈内数字指下标,圈外为内容,如图现在并不能称为一个堆,因为它并不满足大堆也不满足小堆的组成,下面介绍大堆和小堆的简答介绍和实现大堆是指每个父节点的数都大于自己的每个孩子节点的值用到的算法是让大数上移循环至完成大堆 void Adjustup(size_t child) { Compare com; size_t parent =(child原创 2016-10-11 21:28:46 · 472 阅读 · 0 评论 -
【数据结构】判断出栈顺序的合法性
问题简单说明给定一个栈的入栈顺序,再给定一个出栈顺序,通过程序判断出栈顺序的合法性。思路如下:定义一个空栈sc先将str1中第一个元素入栈,然后通过循环使str1后移。1、如果当前栈为空且入栈序列不为空,则入栈序列str1后移,sp入栈。2、如果栈顶元素不等于出栈序列且入栈序列不为空,则入栈序列str1后移,sp入栈。3、如果栈顶元素等于出栈序列,s原创 2016-09-16 15:29:47 · 5079 阅读 · 0 评论 -
【数据结构】二叉树的简单遍历及基本操作
1、构造2、拷贝构造3、析构4.深度5、叶子数6.前序遍历递归非递归7、中序遍历递归非递归8、中序遍历递归非递归9、k'ceng原创 2016-09-26 15:28:21 · 336 阅读 · 0 评论