自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

没有最好,只有更好!

True mastery of any skill takes a lifetime.

  • 博客(40)
  • 资源 (3)
  • 收藏
  • 关注

原创 Tinyhttp源码分析

Tinyhttp源码分析简介Tinyhttp是一个轻量型Http Server,使用C语言开发,全部代码只500多行,还包括一个简单Client。源码剖析Tinyhttp程序的逻辑为:一个无线循环,一个请求,创建一个线程,之后线程函数处理每个请求,然后解析HTTP请求,做一些判断,之后判断文件是否可执行,不可执行,打开文件,输出给客户端(浏览器),可执行就创建管道,父子进程进行通信。其整体处理流

2016-05-29 22:20:57 13552

原创 Tinyhttp服务器编译运行

Tinyhttp服务器编译运行源码下载下载Tinyhttp源码,网址http://sourceforge.net/projects/tinyhttpd/files/latest/download修改httpd.c源码1、声明函数修改如下//void accept_request(int);void *accept_request(void *);2、定义函数修改如下://void acc

2016-05-29 21:02:10 2776 3

原创 HTTP协议总结

HTTP协议简介HTTP协议是超文本传输协议,用于从万维网(www)服务器传输超文本到本地浏览器的传送协议。它是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)。工作原理HTTP协议工作架构:客户端-服务器。浏览器作为HTTP客户端通过URL向HTTP服务端(Web服务器)发送所有请求。Web服务器:Apache服务器,IIS服务器等。Web服务器根据收到的请求,向客

2016-05-29 16:53:11 933

原创 leetcode_350 Intersection of Two Arrays II

题目分析:给定两个数组,求数组的交集。输出结果中的元素不唯一,输出数组可以无序。解题思路:1)对数组nums1进行排序;2)对数组nums2进行排序;3)遍历数组nums1和nums2中元素,并比较对应的元素,若相等,则将其保存到输出结果中,并变化两个数组对应的索引不等,则变化较小元素对应的索引即可。实现程序C++版本vector<int> intersect(vector<int> &num

2016-05-28 18:17:30 3743

原创 leetcode_349 Intersection of Two Arrays

题目分析:给定两个数组,求数组的交集。输出结果中的元素唯一,输出数组可以无序。解题思路:1)对数组nums1进行排序;2)对数组nums2进行排序;3)遍历数组nums1和nums2中元素,并比较对应的元素,若相等,则判断其值是否与结果中最后保存的元素是否相等,相等则直接变化两个索引,否则将该值保存到结果中,并变化两个索引不等,则变化较小元素对应的索引即可。实现程序C++版本class Sol

2016-05-28 18:13:55 3039

原创 leetcode_138 Copy List with Random Pointer

题目分析:给定一个特殊的单链表,链表的每一个节点多了一个随机指针域,随机指向链表中的某一个节点。要求复制这个链表解题思路:1)复制节点,并将拷贝后的节点插入到原节点的后面;2)更新所有复制的节点的random节点,即:h.next.random = h.random.next;3)将原链表与复制的链表断开。补充:也可以利用map来保存random节点之间的关系,通过递归或非递归来实现。实现程序C

2016-05-28 17:00:49 1174

原创 机器学习算法_第1篇

决策树介绍决策树基本思想:以信息熵为度量构造一颗熵值下降最快的树,到叶子节点处的熵值为0,此时每个叶子节点的实例都属于同一类。它是一种自顶向下的递归方法。优点易于理解和实现;数据的准备往往简单或者不必要;能够同时处理数据型和常规型属性;是一个白盒模型;易于通过静态测试来对模型进行评测;在相对较短的时间内能够对大型数据源做出可行且效果良好的结果方法ID3 :信息增益最大准则C4.5:信

2016-05-28 14:28:08 924

原创 智能指针实现

智能指针使用简介智能指针是一个类,它对普通指针进行封装,使智能指针对象具有普通指针类型一样的操作。它能够在复制对象时,使副本和原对象都指向同一存储区域,通过副本或原对象改变所指值时,通过另一个对象访问的值也发生改变。智能指针能够对内存进行自动管理,避免出现悬垂指针情况。C/C++语言中,在创建对象是进行内存分配,使用完毕后需要释放内存,如果出现不正确操作内存,则可能导致内存泄露。而智能指针能够解决

2016-05-28 12:31:26 1000

原创 leetcode_137 Single Number II

题目分析:给定一个数组,里面只有一个数只出现一次,其他的数均出现三次,请找出这个只出现一次的数。解题思路:方法1 利用map实现1)遍历整个数组,统计数组中每个数出现的次数,并将其保存在map种2)遍历数组中元素,查看map中对应元素出现的次数,如果出现只出现一次,则返回次元素,并结束程序即可。方法2 统计数组数的各个位之和1)int类型是32位数,对数组中所有数(32位int类)的各个位进行求

2016-05-27 23:21:12 607

原创 leetcode_136 Single Number

题目分析:给定一个数组,里面只有一个数只出现一次,其他的数均出现两次,请找出这个只出现一次的数。解题思路:方法1 利用map实现1)遍历整个数组,统计数组中每个数出现的次数,并将其保存在map2)遍历数组中元素,查看map中对应元素出现的次数,如果出现只出现一次,则返回次元素,并结束程序即可。方法2 利用异或实现由于两个相同的数进行异或,结果为0,故将所有的数进行异或操作,最后得到的数一定为数组

2016-05-25 23:15:32 539

原创 Python实现简单爬虫

Python实现简单爬虫本博客为本人学习Python过程中的总结,如有类同,纯属巧合。简介爬虫是一段自动抓取互联网信息的程序。它的价值是互联网数据为我所有。利用爬取到的数据,可以做很多的事情如:可以进行数据统计,对比;可以利用爬取的数据做某一方面的app;也可以利用爬取的数据做一个新闻阅读器等等。爬虫架构1)URL管理器 2)网页下载器 3)网页分析器 4)爬虫调用器 5)价值数据使用

2016-05-18 23:20:46 2615

原创 leetcode_347 Top K Frequent Elements

题目分析:给定一个数组,返回数组中出现此多最多的k个元素,要求时间复杂度小于O(nlogn)。解题思路:1)利用map实现统计数组中每个元素出现的次数;2)对1)统计的map按照元素出现的次数进行排序,此时需要自己定义一个变量,主要实现将map中元素与次数交换位置;3)依据2)排序的结果,取出排序次数最靠前的k个元素对应的元素值即可。实现程序C++版本// 此函数主要实现,将次数放在第一的位置,

2016-05-12 22:04:11 2140

原创 leetcode_345 Reverse Vowels of a String

题目分析:给定一个字符串,把字符串中的元音字符转置解题思路:1)定义两个指标i,j,分别指向字符串最前端和字符串最尾端;2)遍历字符串,判断字符串中对应位置字符是否为元音字符,如果是元音字符,停止遍历,然后在另一方向找到对应位置的元音字符位置,找到后,将两个位置字符进行交换,然后继续遍历,直到遍历结束。3)遍历方式类似于快速排序中的遍历调整位置。实现程序C++版本class Solution

2016-05-12 21:04:34 2016

原创 leetcode_328 Odd Even Linked List

题目分析:给定一个单向链表,要求将所有的奇数位置的节点放到前面,如1->2->3->4->5->NULL,则进行变换后,得到的链表为1->3->5->2->4->NULL。解题思路:1)一遍遍历链表,将链表分为奇数链表和偶数链表2)将1)中得到的奇数链表与偶数链表进行挂接,从而得到最终的奇偶链表。实现程序C版本// 奇偶链表操作struct ListNode *oddEvenList(stru

2016-05-11 22:30:23 518

原创 leetcode_321 Create Maximum Number

题目分析:给定两个长度分别为m和n的数组,数组元素为0-9,每个数组元素代表一个数字。从这两个数组中选出一些数字,组成一个数组,是这个数组中的数尽可能大,其长度k <= m + n。要求数组中选出的元素的相对顺序与原数组保持一致。最终返回一个包含k个数字的数组。解题思路:1)分别从nums1(长度为m)和nums2(长度为n)中挑选出i(max(0, k - n) <= i <= min(m, k

2016-05-10 22:51:58 2907

原创 leetcode_322 Coin Change

题目分析:零钱对换,用最少的零钱数,换取目标的数量。解题思路:动态规划求解1)dp[i]表示对换目标i所需的最少硬币数目;2)计算过程中的动态规划公式为dp[i+coins[j]] = min(dp[i+coins[j], dp[i]+1)。实现程序C++版本class Solution { public: int coinChange(vector<int> &coins,

2016-05-10 20:04:01 906

原创 leetcode_326 Power of Three

题目分析:给定一个32位有符号整型数,判断其是否是3的幂次。解题思路:方法1首先,判断整型数是否小于等于0,如果小于等于0,则一定不是3的幂次;然后,对整型数与3取余,如果余数为0,则将整型数除以3,继续判断,直到整型数不大于1位置。方法2递归实现,注意递归结束的条件。方法3不利用循环和递归实现,只利用取对数和计算幂次即可判断。实现程序// 方法1实现bool isPowerOfThree

2016-05-09 23:15:46 1025

原创 leetcode_342 Power of Four

题目分析:给定一个32位有符号整型数,判断其是否是4的幂次。解题思路:首先,判断整型数是否小于等于0,如果小于等于0,则一定不是4的幂次;然后,对整型数与4取余,如果余数为0,则将整型数除以4,继续判断,直到整型数不大于1位置。实现程序// 版本1实现,直接利用取余,然后除4计算bool isPowerofFour(int num){ if (num <= 0) re

2016-05-08 19:32:54 546

原创 leetcode_344 Reverse String

题目分析:对于给定的字符串,执行逆转操作。解题思路:先统计字符串的长度,然后遍历字符串,将字符串的前后元素一一对调即可实现。实现程序C++版本class Solution {public: // 字符交换操作 void my_swap(char *s, char *t) { char temp = *s; *s = *t;

2016-05-08 18:45:02 2099

原创 STL学习——hash_set/hash_map/hash_multiset/hash_multimap篇

STL学习_hash_set/hash_map/hash_multiset/hash_multimap篇hash_set与hash_multiset简介hash_set是以hashtable为底层机制实现的。故对hash_set的各种操作可以转调用hashtable来实现。hash_set与set的不同:1)hash_set的底层机制是hashtable,而set的底层机制是RB-tree;2)s

2016-05-07 20:30:26 1029

原创 STL学习——set/map/multiset/mulitmap篇

STL学习——set/map/multiset/mulitmap篇set简介set特性:所有元素都会根据元素的键值自动被排序。set的元素不想map那么,可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set中不允许两个元素具有相同的键值。因为set元素值就是键值,其关系到set元素的排列规则,如果任意改变set元素值,则会破坏set的组织,故不可以通过se

2016-05-07 17:38:13 1294

原创 STL学习——RB-tree篇

STL学习——RB-tree篇简介RB-tree(红黑树)是一棵平衡二叉搜索树,它需要满足以下规则:1)每个节点不是红色就是黑色;2)根节点为黑色;3)如果节点为红,其子节点必须为黑;4)任一节点至NULL(树尾端)的任何路径,所含之黑节点数必须相同。插入依据红黑树的性质4)可以,在红黑树中插入节点,新插入的节点必须为红。插入节点后,可能会破坏红黑树的性质,此时需调整红黑树节点颜色或者旋转红黑树

2016-05-07 16:36:53 4245

原创 STL学习——Hashtable篇

STL学习——Hashtable篇概述hash table(散列表)是一种在插入,删除,搜索等操作“常数平均时间”完成的数据结构。它是一种字典结构。哈希函数是一种映射函数,它能够将大数映射为小数。负责将某一元素映射为一个“大小可接受之索引”。哈希函数使用过程中可能会出现不同的元素被映射到相同的位置(相同的索引),称为哈希碰撞。解决哈希碰撞的方法:线性探测,二次探测,开链等等。负载系统:指元素个数除

2016-05-07 14:22:16 3895

原创 STL学习——Slist篇

STL学习——Slist篇简介STL中List是双向链表,而Slist是单向链表。它们的区别:Slist的迭代器是单向的Forward Iterator,而list的迭代器是双向的Bidirectional Iterator。Slist所耗用的空间更小,操作更快。它们共同的特点是,插入、移除、接合等操作并不会造成原有的迭代器失效。slist插入时,需要从前遍历,找到插入点的位置。为了更快插入,提供

2016-05-07 10:32:05 2545

原创 STL学习——Priority_queue篇

STL学习——Priority_queue篇概述priority_queue是一个拥有权值观念的queue,它允许加入新元素,移除旧元素,审视元素值等功能。因为它是queue,故只允许底端加入元素,顶端取出元素。priorit_queue内元素并非依照被推入的次序排列,而是依照元素权值排列。权值最高者,排在最前面。实现priority_queue利用max_heap和vector表现的完全二叉树

2016-05-06 23:10:02 3042

原创 STL学习——Stack/Queue篇

STL学习——Stack/Queue篇Stack概述stack是一种先进先出的数据结构,只有一个出口,stack允许新增元素,移除元素,取得最顶端元素。但除了最顶端外,没有任何办法可以存取stack其他元素。即不允许遍历行为。实现stack实现是以容器为底部结构的,将容器的接口改变,使其符合“先进先出”特性,便形成了一个栈。具体实现可以将底部deque的头端开口封闭,便实现了stack。因为st

2016-05-06 22:37:01 1046

原创 STL学习——Deque篇

STL学习——Deque篇deque概述deque是一种双向开口的连续线性空间。双向开口指可以在头尾两端分别做元素的插入和删除操作。虽然vector也可以在头尾两端进行操作,但是其头部操作效率极差,无法被接受。deque与vector最大差异:1)deque允许于常数时间内对起头端进行元素的插入或移除操作;2)deque没有所谓的容量概念,因为它是动态地以分段连续空间组合而成,随时可以增加一段新的

2016-05-06 22:10:40 1978

原创 STL学习_List篇

STL学习——List篇简介List与Vector不同,它不使用连续空间,而是每次插入或删除一个元素,就配置或释放一个元素空间。故list对空间的使用精准,不浪费任何空间。list对任何位置的元素插入或删除,常数时间完成。 List与Vector的使用,视元素的多少,元素的构造复杂度,元素存取行为的特性而定。List节点List本身与List节点不同,List是一个双向的链表。其节点信息如下:

2016-05-06 12:47:54 977

原创 STL学习——Vector篇

STL学习——Vector篇vector简介vector的数据安排及操作方式与array非常相似,两者的区别在于空间运用的灵活性。array是静态空间,一旦配置了,就不能改变;要换个大(或小)一点的可以,但琐碎的事由客户端完成:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。而vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新元素。它对内存的合理

2016-05-05 22:32:25 3928

原创 leetcode_098 Validate Binary Search Tree

题目分析:判断一颗二叉树是否为二分查找树解题思路:中序遍历二分查找树满足条件:左子树的值都比根节点小;右子树的值都比根节点大;左右子树必须满足这两个条件。对于二分查找树,其中序遍历将得到一个有序的序列。故采用中序遍历实现。递归求解先判断根节点是否满足条件,然后分别递归判断左子树和右子树。实现程序方法1:中序遍历//中序遍历void InOrderTree(struct TreeNode

2016-05-05 21:24:39 524

原创 leetcode_097 Interleaving String

题目分析:给定字符串s1,s2,s3,判断s3是否可能由s1和s2交错组合而成。交错指前后顺序不变的交叉解题思路:递归求解一个一个字符的判断,判断过程中利用递归实现。时间复杂度为O(2^(m+n));动态规划定义状态dp[i+1][j+1]:表示s1[0,…,i]与s2[0,…,j]能够交替形成s3[0,…,i+j+1]部分。状态转移方程为:dp[i+1][j+1] = (dp[i][j+1

2016-05-05 21:10:55 399

原创 leetcode_095 Unique Binary Search Trees II

题目分析:对于给定的数n,n表示二叉树的节点总数,求n个节点能够表示的所有二叉树。解题思路:递归求解对于所有可能的二叉树,二叉树的数目为卡特兰数,不是一个多项式时间的数量级,求解的所有树,而显示时间内不能完成。其求解方法采用递归。实现程序vector<TreeNode *> createTree(int start, int end){ vector<TreeNode *> res

2016-05-05 21:00:00 431

原创 leetcode_096 Unique Binary Search Trees

题目分析:对于给定的数n,求由n个数构成的所有不同二分查找树的数目。解题思路:动态规划二分查找树:左子树节点值小于root节点值,右子树节点值大于root节点值。n个节点,每个节点都可以作为root节点,然后将小于root节点值的节点全部放入左子树,将大于root节点值的节点全部放入右子树,然后计算出左子树放置的种类,和右子树放置的种类,两个种类数相乘,即为以此root节点值为根的二分查找树的

2016-05-02 23:12:35 435

原创 STL学习_配接器篇

STL学习_配接器篇定义配接器(Adapter)在STL组件的灵活组合运用功能上,扮演着轴承、转换器的角色。它事实上是一种设计模式。即将一个class的接口转换为另一个class的接口,使原本因接口不兼容而不能合作的classes,可以一起运作。分类STL所提供的各种适配器中,改变仿函数(functors)接口者,称为function adapter;改变容器(containers)接口者,称为

2016-05-02 22:18:21 4803

原创 STL学习_仿函数篇

STL学习_仿函数篇简介仿函数,实质是函数对象,是一种具有函数特质的对象。对调用者,它可以像函数一样地被调用;对被调用者,它可以以对象所定义的function call operator扮演函数的实质决策。STL算法中,很多算法的实现都是基于两种版本:版本一表现出最常用(最直观)的某种运算;版本二表现出最泛化的演算流程,允许用户“以template参数来指定所要采取的策略”。版本二是可以允许用户

2016-05-02 17:58:21 3885

原创 STL算法_sort算法篇

STL算法_sort算法篇简介sort算法接受两个RandomAccessIterators(随机存取迭代器),然后将区间内的所有元素以渐增方式由小到大重新排序。STL中的关系型容器都拥有自动排序功能(底层使用RB-tree实现),不需要用到sort算法。至于序列式容器中的stack、queue和priority-queue都有特别的出入口,不允许用户对元素排序。剩下vector、deque和li

2016-05-01 23:17:10 5191 1

原创 STL算法_heap算法篇

STL算法_heap算法篇堆简介二叉堆是一种完全二叉树,即整棵二叉树中除了最底层的叶子节点之外,其余节点是填满的,而最底层的叶子节点由左到右也是填满的不能存在空隙。堆主要包括两类:大顶堆和小顶堆。大顶堆指每个节点的键值(key)都大于或等于其叶子节点的键值,而小顶堆指每个节点键值都小于等于其节点的键值。STL中堆主要使用vector/array实现的。大顶堆的最大值在根节点,故其总是位于底层的ve

2016-05-01 22:32:12 1609

原创 STL算法_set相关算法篇

STL算法_set相关算法set相关算法所接受的set,必须是有序区间,元素值可以重复出现。1)set_union算法:可构造S1,S2之并集。即构造出S1并S2,此集合内含S1或S2内的每一个元素。S1、S2及其并集都是以排序区间表示。返回值是一个迭代器,指向输出区间的尾端。它是一种稳定操作,其输入区间内的每个元素的相对顺序不会改变。因S1和S2元素不唯一,如果某个值在S1中出现n次,在S2中出现

2016-05-01 21:27:23 4370

原创 STL算法_基本算法篇

STL算法_基本算法1)equal算法:用来比较两个序列在[first,last)区间内是否相等。如果第二个序列的元素多于第一个序列元素,则多出的元素不予考虑。// equal算法用来判断两个序列在[frist,last)区间内是否相等。当第二个序列的元素较多时,多出来的元素不予考虑。// 版本1template <class _InputIter1, class _InputIter2>in

2016-05-01 20:17:23 4593 1

原创 STL算法_数值算法篇

STL算法_数值篇1)accumulate算法:用来计算初始值init和[first,last)内所有元素的总和。// 计算init和[first,last)内所有元素的总和// 版本1template <class _InputIterator, class _Tp>_Tp accumulate(_InputIterator __first, _InputIterator __last, _

2016-05-01 19:41:48 1160

Adaboost算法实现

该Adaboost算法用C++实现的基本Adaboost算法,对于初学Adaboost算法和理解Adaboost算法的学生有一定的帮助!如发现我代码中存在错误或不足,欢迎指正,谢谢!

2015-11-02

缓冲区溢出实验报告

本文档是关于缓冲区溢出实现的整个流程,对做缓冲区溢出有一定的帮助

2015-08-26

剑指offer程序

此程序为剑指offer程序,便于找工作的小伙伴的复习~

2017-01-04

空空如也

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

TA关注的人

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