自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (12)
  • 收藏
  • 关注

原创 C++ 对象的内存布局—— 虚继承下的虚函数

C++ 对象的内存布局(下)这篇文章的“单一虚拟继承”和“钻石型虚拟继承”时的类内存布局讲得不太清楚,我有一处疑问,我用的是VS2005,因此记录一下。 类继承图如下:这里:类B被类B1和B2虚拟继承,而B1和B2同时被D继承。B1的f()、B2的f()覆盖了B的f();D的f()覆盖了B1的f(),D的f1()覆盖了B1的f1()D的f()覆盖了B2的f(),D的

2014-08-19 12:43:09 1076

转载 VC++类继承内存布局

——谈VC++对象模型(美)简.格雷程化    译译者前言一个C++程序员,想要进一步提升技术水平的话,应该多了解一些语言的语意细节。对于使用VC++的程序员来说,还应该了解一些VC++对于C++的诠释。 Inside the C++ Object Model虽然是一本好书,然而,书的篇幅多一些,又和具体的VC++关系小一些。因此,从篇幅和内容来看,译者认为本文是深入理解C

2014-08-18 15:45:47 796

原创 数据结构之并查集

并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。使用并查集时,首先会存在一组不相交的动态集合 S={S1,S2,⋯,Sk},一般都会使用一个整数表示集合中的一个元素。每个集合可能包含一个

2014-07-19 16:03:41 896

转载 STL源码剖析---红黑树原理详解下

原文地址:http://blog.csdn.net/hackbuteer1/article/details/7760584      算法导论书上给出的红黑树的性质如下,跟STL源码剖析书上面的4条性质大同小异。      1、每个结点或是红色的,或是黑色的      2、根节点是黑色的      3、每个叶结点(NIL)是黑色的      4、如果一个节点是红色的,则它的两个

2014-07-10 16:16:35 706

转载 STL源码剖析---红黑树原理详解上

原文地址:http://blog.csdn.net/hackbuteer1/article/details/7740956一、红黑树概述     红黑树和我们以前学过的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。不过自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更高的统计性能。这一点在我们了解了红黑树的实现原理

2014-07-10 16:14:06 634

原创 平衡二叉树(AVL树)

平衡二叉树:是一颗空树;或者具有以下性质的树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。平衡二叉树的关键在于插入结点时如何保持整棵树的平衡性。下面是不平衡发生的四种情况:(1)平衡二叉树某一节点的左孩子的左子树上插入一个新的节点,使得该节点不再平衡。LL型(左孩子的左子树)由于在A的左孩子B的左子树上插入结点F,使A的平衡因子由1增至

2014-07-09 14:27:22 853

原创 二叉排序树

二叉排序树(Binary Sort Tree):或者是一颗空树,或者是具有以下性质的树:(1)若它的左子树不空,则左子树上所以结点的值均小于它的根节点的值;(2)若它的右子树不空,则右子树上的所以结点的值均大于它的根节点的值;(3)它的左、右子树也分别是二叉排序树。二叉排序树的基本操作均可以在O(h)时间内完成(算法导论p165)。相关操作代码如下:int InsertBST(BiTr

2014-07-08 23:14:25 774

转载 从头到尾彻底理解KMP(2014年7月版)

从头到尾彻底理解KMP作者:July时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文。1. 引言    本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得非常混乱,如此,留言也是“骂声”一片。所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终

2014-07-30 10:29:54 1347

原创 数据结构之哈希表

“除留余数法”+“开放定址法(线性探测再散列)”实现的哈希表。

2014-07-20 08:57:55 1160

原创 直接插入排序、二分插入排序、希尔排序、冒泡排序与简单选择排序

一、直接插入排序稳定,时间复杂度:最好O(n)、最差O(n^2)、平均O(n^2),空间复杂度O(1)void InsertSort(int L[], int n){ int i, j,key; for (i = 1; i<n; i++) if(L[i] < L[i-1])//需要将L[i]插入到有序表L[0...i-1] { key = L[i];

2014-07-06 14:13:07 1403

原创 计数排序、基数排序与桶排序

一、计数排序稳定、 当输入的元素是n 个小区间(0到k)内整数时,它的运行时间是 O(n + k),空间复杂度是O(n)。const int K = 100;//计数排序:假设输入数据都属于一个小区间内的整数,可用于解决如年龄排序类的问题//Input:A[0, ..., n-1], 0 <= A[i] < K//Output:B[0, ..., n-1], sorting of A

2014-07-06 13:25:49 929

原创 快排、归并排序(分治)、堆排序

(1)快速排序算法以及应用快速排序中划分的思想求数组中第k小的数,最小的前k个数。(2)归并排序算法以及利用归并排序计算数组的逆序对数。(3)堆排序

2014-07-04 23:42:35 1803 1

原创 利用堆实现堆排序&优先队列

堆排序、利用堆实现最大(小)优先级队列、STL中的heap的使用,利用堆求解top_k类问题。

2014-06-19 21:16:04 968

原创 利用堆实现堆排序&优先队列

假设要实现非递减排序,则需要用要大顶堆。此处设计到三个大顶堆的操作:(1)自顶向下调整操作:MaxHeapify(对应堆的SiftDown操作)、(2)利用数组建立大顶堆:BuildMaxHeap、(3)不断交换堆顶元素(堆的最大元素)和堆的末尾元素,实现非递减排序。优先队列分为最大优先队列和最小优先队列,分别借助于大顶堆和小顶堆。优先队列有以下基本操作:(1)提取队列中的最大(小)元素;(2)提取队列中的最大(小)元素并从队列中删除;(3)将队列中元素为x的关键字减少(增大)到k,这里假设k的值不大(

2014-06-19 12:15:39 3747

原创 数据结构之(二叉)堆

(二叉)堆是一个数组,是一颗近似完全二叉树,分为大顶堆&小顶堆。表示堆的数组A有两个属性:(1)A.length表示数组元素的个数;(2)A.heap-size表示有多少个堆元素存储在数组A中。更多的关于堆的性质的介绍:算法导论第三版:p85-p89、编程珠玑:p141-p145。堆的操作主要包括堆插入、堆删除两个,而堆插入设计到FixUp操作(自底向上调整),堆删除涉及到FixDown操作(自顶向下调整,大顶堆时对应算法导论上的MAX-HEAPIFY操作)。本文主要给出的是大顶堆和小顶堆的基本操作的C

2014-06-19 10:41:19 1337

原创 最短路径之Floyd算法

图文并茂。Dijkstra算法求某一个源点到其余各顶点时间复杂度是O(n^2),但如果采用此算法,找从某一源点到某一特定终点的最短路径,复杂度仍为O(n^2)。求每一对顶点之间的最短路径:(1)每次以一个顶点为源点,重复执行Dijkstra算法n次。总的时间复杂度是O(n^3);(2)弗洛伊德(Floyd)算法:时间复杂度也是O(n^3),但形式上更简单。

2014-06-10 00:16:01 2179

原创 最短路径之Dijkstra算法

本文简单描述了Dijkstra(迪杰斯特拉)算法,结合一个实例进行了算法流程描述,给出了C语言的算法实现。另外给了两个直接应用Dijkstra算法求解ACM题的链接。

2014-06-09 16:37:48 28010 2

原创 数据结构之最小生成树

最小生成树: 一个连通图的生成树是一个极小连通子图,它含有图中全部顶点,但只有足以构成一棵树的n-1条边。这种构造连通网的最小代价生成树称为最小生成树,详见数据结构之图(术语、存储结构、遍历)。求连通网的最小生成树有两种经典方法:普里姆(Prime)算法和克鲁斯卡尔(Kruskal)算法。1、Prime算法(1)算法描述假设N=(V,{E})是连通网,TE是N上最小生成树中边的集合。从V中任选一个顶点u0,算法从U={u0}(u0∈V),TE={}开始,重复执行以下步骤:在所有u∈U、v∈V-

2014-06-09 15:13:46 2660

原创 bitmap与2-bitmap使用总结

bitmap是一种简单的数据结构,但在存储空间压缩方面却使用广泛。bitmap就是用一个bit位来标记某个元素是否存在:1表示存在,0表示不存在;而2-bitmap就是用两个bit为来标记某个元素出现的次数:00出现0次,01出现1次,10出现2次及其以上,11无意义。2-bitmap在内存中的表示如下: [0] [1] [2] …… |00 00 00 00|00 00 00 00|00 00

2014-06-05 11:02:28 2396 2

原创 数据结构之图(术语、存储结构、遍历)

无向边:若顶点Vi 到Vj 的边没有方向,则称这条边为无向边,用无序偶对来表示

2014-06-04 14:51:15 15583 3

原创 数据结构之二叉树

一、存储结构

2014-06-03 14:48:49 835 1

原创 数据结构之双向链表

一、存储结构二、基本操作

2014-06-03 14:21:17 732 1

原创 C语言str系列库函数之strspn()、strcspn()和strpbrk()

在vc++8.0的函数库中,strtok()函数的实现采用了bit map

2014-05-31 13:35:36 4576 1

原创 C语言str系列库函数之strtok()

之所以系统地记下C语言的str系列函数,是因为4月份参加的两次shi

2014-05-30 23:06:19 2677 1

原创 C语言str系列库函数

C语言str系列库函数是面试中 容易be

2014-05-30 17:12:46 8531

原创 数据结构之链队列

一、存储结构二、基本操作

2014-05-30 10:29:02 984

原创 数据结构之顺序循环队列

一、存储结构二、基本操作

2014-05-29 23:05:56 810

原创 数据结构之顺序栈

一、存储结构二、基本操作

2014-05-29 22:37:33 805

原创 数据结构之单链表(二)

接上篇:数据结构二:单链表(一)

2014-05-28 17:21:10 997

原创 数据结构之单链表(一)

一、存储结构二、基本操作三、单链表相关的算法

2014-05-28 16:30:39 832

原创 数据结构之线性表的顺序表示和实现

线性表的顺序存储结构可以用一维数组来

2014-05-28 15:21:10 888

原创 Winsocket 三:非阻塞server&client程序(tcp)

在 Winsocket 一:单线程阻塞server&client程序(tcp) 和 Winsocket 二:多线程阻塞服务器程序(tcp)简单接收了阻塞tcp程序,阻塞式tcp程序服务器程序会因为建立连接和关闭连接而频繁的创建和关闭线程会产生大量的内存碎片,从而导致服务端程序不能保证长时间的稳定运行,本文简单介绍非阻塞式tcp程序的编写。一、非阻塞阻塞是指在进行一个操作的时候,如服

2014-05-20 11:58:35 4229

原创 Winsocket 二:多线程阻塞服务器程序(tcp)

上一篇 Winsocket 一:单线程阻塞server&client程序(tcp)

2014-05-20 09:59:36 2640

原创 Winsocket 一:单线程阻塞server&client程序(tcp)

简单介绍什么是Winsocket以及server/client应用程序模型,给了一个简单的server/client程序的tcp实现。一、Winsocket简介        Winsocket是unix/linux下的berkeley socket在Windows下的实现。unix/linux下的berkeley socket是网络通讯方面的基石,应用程序通过调用berkeley soc

2014-05-20 00:01:12 1889 1

数据结构之最小生成树

连通网的最小生成树的prime和Kruskal算法,完整的测试代码,包括图的基本操作代码(详见:http://download.csdn.net/detail/u013071074/7445893),包括两组测试数据。 prime和Kruskal算法介绍详见博文:http://blog.csdn.net/u013071074/article/details/29366289

2014-06-08

背包问题九讲

背包问题九讲,01背包、完全背包、混合背包等全部背包问题

2014-06-04

数据结构之图

数据结构之图(存储结构、遍历)、详见博文:数据结构之图(术语、存储结构、遍历),http://blog.csdn.net/u013071074/article/details/28308275

2014-06-04

数据结构:链队列

单链队列,详细内容见博文:http://blog.csdn.net/u013071074/article/details/27641665

2014-05-30

数据结构之循环顺序队列

顺序循环队列,详细介绍见博客链接:http://blog.csdn.net/u013071074/article/details/27583741

2014-05-30

数据结构 顺序栈

数据结构里最简单的栈的写法,博客连接:http://blog.csdn.net/u013071074/article/details/27581435

2014-05-30

数据结构之单链表

包括如下操作:初始化、销毁、清空、求长度、遍历 指定位置插入和删除元素 按位置和按元素值查找 查找并删除单链表中值域为e的全部结点 头插法/尾插法 反转/逆序 距离-标尺法:求单链表倒数第N个结点;求未知长度的单链表的中间结点; 建环/判断环存在 删除重复元素 合并两种有序单链表

2014-05-28

数据结构之线性表的顺序表示和实现

线性表的顺序表示和实现,博客链接: http://blog.csdn.net/u013071074/article/details/27336291

2014-05-28

C-源码(包括stdio,stdlib和string三大部分)

C语言库函数stdio、stdlib、string三大部分源码

2014-05-20

非阻塞server&client程序(tcp)

非阻塞tcp的服务器和客户端示例程序,详见链接:Winsocket 三:非阻塞server&client程序(tcp) http://blog.csdn.net/u013071074/article/details/26354781

2014-05-20

多线程阻塞服务器程序(tcp)

在服务端应用程序的主线程中不停的调用accept操作,以使服务端程序能不停地接受客户端程序发送过来的连接请求。而在接受了一个客户端的连接请求后,为每一个接受的连接请求开辟一个专门的线程来接受客户端程序发送的请求以及为具体的请求返回特定的信息。 详见链接:Winsocket 二:多线程阻塞服务器程序(tcp),http://blog.csdn.net/u013071074/article/details/26340707

2014-05-20

单线程阻塞tcp server&client程序

单线程阻塞server&client程序(tcp),学习tcp的简单实例。博客链接:http://blog.csdn.net/u013071074/article/details/26293303

2014-05-20

空空如也

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

TA关注的人

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