自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 哈希表

一:HashTable是散列表/哈希表,是根据关键字(key)而直接访问在内存存储位置的数据结构 通过关键值得函数将所需要的数据映射到表中的位置来访问数据,这个映射函数叫做散列函数,存放记录的数组叫做散列表; 构建哈希表的几种方法: 1:直接定址法–去关键字的某个线性函数为散列地址,hash(key)=key;或者是hash(key) =key*A+B; 2: 除留余数法–取关键值被某个不大

2017-04-27 12:30:11 919 4

原创 布隆过滤器

一:问题描叙: 在日常生活当中我们经常要判断一个元素在不在一个集合当中,在字处理软件当中,判断一个单词是否拼写正确;在网络爬虫当中,一个网址是否被访问过,最直接的方法将元素全部存到计算机中,遇到一个新元素,将它与集合中的元素进行比较就可以。我们知道集合可以用哈希表来存储,好处是快速准确,缺点是浪费空间,无论是闭散列方法还是开链法,当负载因子超过0.7会导致查找的效率变慢,因此每次都要开一个更大的空

2017-04-24 15:39:14 913

原创 面试题--给40亿个不重复的,没有排过序,给一个无符号整数,如何判断这个数在这40亿个数中

如果常规的想法是给这40亿数,放到一个很大的数组中,快速排序,然后采用二分查找,来判断这个数是否存在; 但是计算机的内存就是4G,大小差不多刚好是2^32大约为42亿左右,一个整形4个字节,40亿数大约需要16G个字节,在现实基本不可能实现,那么该如何存储呢? 方法:位存储 一个整形32个位,16G个字节只需要500M就可以,然后设置比特位1表示这个数存在,0表示这个数不存在。#include

2017-04-23 22:32:23 3570

原创 链表面试题--合并两个有序的链表

问题:合并两个有序的链表,合并后结果任有序 非递归实现:两个指针分别遍历两个链表,然后比较两个指针大小,将小的节点取下放到合并后的新链表中,继续向后移动当前的指针,若两个链表至少有一个表扫描走完,走将对应的另一个表,整体添加合并后的新表中,这样就可以实现链表的合并。 方法一:ListNode* MergeList1(ListNode*l1, ListNode*l2){ if (l1

2017-04-21 11:53:52 1206

原创 为什么基类的析构函数定义为虚函数

前提: 1:每个析构函数只会清理自己的成员(成员函数前没有virtual)。 2:可能是基类的指针指向派生类的对象,当析构一个指向派生类的成员的基类指针,这时程序不知道这么办,可能会造成内存的泄露,因此此时基类的析构函数要定义为虚函数; 基类指针可以指向派生类的对象(多态),如果删除该指针delete[]p,就会调用该指针指向的派生类的析构函数,而派生类的对象又会自动调基类的成员函数,这样就会

2017-04-20 21:16:23 4286

原创 C++静态绑定和动态绑定

一:静态绑定与动态绑定 静态绑定:编译时绑定, 通过对象调用 动态绑定:运行时绑定,通过地址实现 多态–简单是意思是多种状态 静态多态:a:函数多态(重载) b:模板多态(类模板和函数模板) 动态多态: a:虚函数机制;b:RTTIclass Base{public: virtual void fun() { cout << "Base:

2017-04-18 19:27:40 3365

原创 map和set

map和set是两个主要的关联容器,但是底层都是红黑树实现 map STL中关于map的理解: map特性是,所有元素都会根据元素的键值自动排序,map的所有元素都是pair(结构体),同时有键值key和实值value。pair的第一个元素被视为键值,第二个元素视为实值,map不允许两个元素拥有相同的键值; pair的定义: template

2017-04-18 09:04:32 674

原创 进程task_struct结构体

(1):什么是进程? 每个进程在内核中都有一个进程控制块(pcb)来维护进程相关的信息,Linus内核的进程控制块是task_struct的结构体; Linus主要的进程状态有以下几种: (2):进程标示符 进程id( PID); 父进程id(ppid) (3):进程的内核段 1:void *stack//用来维护进程的内核栈 (4):进程的标记:unsigned int fla

2017-04-16 21:05:42 325

原创 链表面试题--从尾到头打印单链表

题目:输入一个链表的头结点,从尾到头打印单链表 链表结点的定义:struct LinkNode{ int val;ListNode *next;}方法一://递归实现void PrintListTailToHead(struct ListNode *head){ if (head != NULL) { if (head->next != NULL)

2017-04-11 20:54:06 681

原创 红黑树

一:红黑树 红黑树是一颗二叉搜索树,它的每一个节点增加了一个存储位用来表示颜色,可以是Red也可以是Black,通过对任意一条根到叶子节点的颜色来约束,红黑树保证最长路径是最短路径的两倍,因此近似平衡; 红黑树的性质: 1:每个节点不是红色就是黑色 2:根节点是黑色 3:如果一个节点时红,则它两个子节点是黑色的(没有连续的红色) 4:对每个节点,从该节点到其后代的所有叶子节点的简单路径,

2017-04-10 20:33:47 397

原创 reserve和resize的区别

1:存储空间重分配的问题:我们知道存储空间分配的问题起源于容器对象的动态创建和连续存储的特性;因此只有连续存储的容器才可能需要运行时的存储空间分配;典型就是vector,其他连续存储容器也会部分地需要存储空间冲分配;第一种:如vector,其元素保存在连续的存储的空间上,当向该vector中插入一个新元素时,必须保持新的容器仍然满足元素连续存储的条件;这时候就要重新分配存储空间,平且把

2017-04-10 17:38:03 2067

原创 面试题之--复杂链表的复制

复杂链表的复制: 复杂链表除了有一个next指针还有一个random指针 我们可以画一个图来表示 复杂链表的声明:struct ComplexNode{ ComplexNode(const int&data) :_next(NULL) , _random(NULL) , _data(data) {} ComplexNode* _next;

2017-04-10 13:59:50 482

原创 AVL树

一:AVL树 AVL树又称平衡搜索二叉树,它能保持二叉树的平衡,降低二叉树的高度,减少树的搜索长度。 AVL树的性质: 1:左子树和右子树的高度差的绝对值不大于1; 2:树中的每个左子树和右子树都是AVL树; 3:树中的每个节点都有平衡因子(_bf),每个平衡因子都等于右子树的高度减去左子树的高度; 例: 二:插入 插入一个节点,可能会对这颗AVL树造成影响,打破平衡,如果要继续满足

2017-04-06 00:25:41 674

原创 二叉搜索树实现简单字典

日常生活中我们经常使用字典来查找单词的中文意思,也会根据中文来查找所对应的汉语。前面我们知道二叉树实现可以迅速查找一个数据,而且可以插入和删除。 这里我们可以用搜索二叉树实现简单的字典,查找英文单词对应的汉语意思。 问题的描叙: 1:如何判断英文单词是否拼写正确; 2:如何统计单词出现的次数 这里我们可以用二叉树的K V算法; v(value)是key的附属信息,这里我们可以理解为汉语

2017-04-04 09:52:48 3140

原创 二叉搜索树

一:二叉搜索树的性质:1:每个节点都有一个作为搜索的关键码(key),所有节点的关键码互不相同;2:左子树所有节点的关键码(key)都小于右子树的关键码(key)3 : 左子树所有节点的关键码(key)都小于右子树的关键码(key)4:左右字子树都是二叉搜索树二:二叉树的插入:分三步:1:空树的情况,直接把节点插入到根节点2:不为空,比较插入值的关键码与

2017-04-01 09:47:29 635

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除