- 博客(30)
- 资源 (5)
- 收藏
- 关注
原创 简单线程池的实现
1. 什么是线程池线程池是线程的集合,拥有若干个线程,线程池中的线程一般用于执行大量的且相对短暂的任务。如果一个任务执行的时间很长,那么就不适合放在线程池中处理,比如说一个任务的执行时间跟进程的生命周期是一致的,那么这个线程的处理就没有必要放到线程池中调度,用一个普通线程即可。线程池中线程的个数太少的话会降低系统的并发量,太多的话又会增加系统的开销。一般而言,线程池中线程的个数与线
2016-06-30 17:25:21 2076 1
原创 pthread_mutex_t 和 pthread_cond_t 配合使用的简要分析
1.原理假设有两个线程同时访问一个全局变量 n,这个全局变量的初始值等于0。Int n = 0 ; 消费者线程 A 进入临界区,访问 n,A 必须等到 n 大于 0 才能接着往下执行,如果 n== 0,那么 A 将一直等待。 还有一个生产者线程 B,B 进入临界区,修改 n 的值,使得 n >0,当 n > 0 时,B 通知等待 n > 0 的消费
2016-06-28 22:24:46 39743 23
原创 排序--散列查找
class HashTable{#define HASHSIZE 12#define NULLKEY -32768private: typedef struct{ int* elem; int count; }_hash_table; int m = 0 ;public: bool InitHashTable(_hash_table* h) { int i;
2016-06-24 09:41:03 400
原创 排序--二叉搜索树
// BST.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include /* 定义二叉搜索树的节点 */typedef struct BiTNode{ int data; // 值域 struct BiTNode *lchild, *rchild; // 左右子节点} BiTNode, *BiTree;enum Status{
2016-06-23 16:06:46 328
原创 查找--插值查找
二分查找每次都是从中间开始,没有考虑数据之间的关系,这是一种比较低效的实现方法,插值查找就是在二分查找的基础上,改进的中间记录的选取。虽然插值查找的时间复杂度月二分查找相同,都是 O(logn),但是对于表比较大,而关键字分布比较均匀的查找,插值算法的平均性能比折半查找要好很多。反之,线性表中记录分布不均匀,用插值查找未必是很好的选择。C 版// interpolation s
2016-06-23 15:50:48 1847
原创 查找--二分查找
二分查找的前提是线性表中的记录必须是有序的,线性表必须采用顺序存储。二分查找的基本思想是:1.在有序表中,取中间记录作为比较对象,若给定值与中间记录的值相等,则查找成功;2.若给定值小于中间记录的值,则在中间记录的左半区继续查找;3.若给定值大于中间记录的值,则在中间记录的右半区继续查找;二分查找的时间复杂度是:O(logn)C 版// binary s
2016-06-23 15:41:46 387
原创 C++ 虚继承和虚函数同时存在的对象模型
如果说没有虚函数的虚继承只是一个噩梦的话,那么这里就是真正的炼狱。这个C++中最复杂的继承层次在VC上的实现其实我没有完全理解,摸爬滚打了一番也算得出了微软的实现方法吧,至于一些刁钻的实现方式我也想不到什么理由来解释它,也只算是知其然不知其所以然吧。 分2个阶段来探讨: 1. 有虚函数的派生类虚继承了没有虚函数的基类; 2. 有虚函数的派生类虚继承了有虚
2016-06-22 20:16:23 3013
原创 扑克牌顺子
扑克牌顺子参与人数:2032时间限制:1秒空间限制:32768K本题知识点: 字符串 算法知识视频讲解题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方
2016-06-21 22:16:01 466
原创 C++ 虚函数的对象模型
1.无继承的普通类: 在有虚函数的情况下类会为其增加一个隐藏的成员,虚函数表指针,指向一个虚函数表,虚函数表里面就是类的各个虚函数的地址了。那么,虚函数表指针是以什么模型加入到类里面的,虚函数表里面又是怎么安排的呢。简单来看下就可以知道了。#include"stdafx.h"#pragma pack(8) class A{public: int a
2016-06-18 15:13:19 2008 1
原创 调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面参与人数:6744时间限制:1秒空间限制:32768K本题知识点: 数组 算法知识视频讲解题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。第三次做:class Sol
2016-06-17 21:09:10 391
原创 C++ 虚继承的对象模型
我们知道,虚继承的基类在类的层次结构中只可能出现一个实例。虚基类在类的层次结构中的位置是不能固定的,因为继承了虚基类的类可能会再次被其他类多继承。 比如class A: virtual T{} 这时T的位置如果相对于A是固定值的话,假设偏移是X,当再有个类 class B:virtual T{} ;这时假设在B里面T的偏移是固定的Y,而当再有一个类,class C: B, A {} 的时候
2016-06-17 17:24:07 4419
原创 C++ 无虚函数、无虚基类的继承内存模型
C++类因为有继承的存在要比C时代的struct复杂得一些,特别是加上有虚函数的时候,以及多继承等这些特性更是令其内存布局变得面目全非。说实在的我也把握不了,我只是在一个实际的平台上进行了一些探索而已,并用此篇笔记将我的探索成果记录下来。 虽然说有些东西在C++标准里面没有规定如何做,不同的实现可能会有不同的作法,但是了解一个实际的系统是如何做的也会有益于我们更加深入的了解C++或者举一反
2016-06-15 20:16:49 1634 1
原创 C++ 虚基类表指针字节对齐模型
关于虚基类表指针/虚函数表指针这些类里面的“隐藏成员”在结构里面是如何进行字节对齐的这个问题困惑了我48个小时。虽然网上也有很多关于虚继承、虚函数表、虚基类等内存布局的一些文章,但是基本上谈的都是大致的布局,什么地方有什么,按照什么顺序来排放等这些泛泛而谈的东西,好像都没有把字节对齐方面考虑进去的文章,或许他们都没有考虑到一些复杂层次的类继承关系,从而字节对齐的问题也没有成为问题,也自然而然地会被
2016-06-15 11:19:18 3321 2
原创 C/C++ 字节对齐
字节对齐结构体的字节对齐是我很早就想全面了解一下的东西,这个东西本质上是和硬件相关的,本来要想真正全面了解的话必须得知道CPU的结构、内存的结构、CPU指令是如何执行的等这些硬件层的东西才行,并不是说了解几个寄存器写两句汇编码就可以的,和这个没联系。在尝试了几次之后,迫于个人能力问题,无奈之下只好放弃深层次的了解,只能了解一下字节对齐的规则,至于为什么要对齐的话题,大概也就只能从网络上那几句肤
2016-06-14 19:45:35 13805 5
原创 61.机器人的运动范围
机器人的运动范围参与人数:1216时间限制:1秒空间限制:32768K 算法知识视频讲解题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(
2016-06-12 20:31:10 451
原创 排序--快速排序
快速排序的时间复杂度:O( nlogn ) C# 版using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace QuickSort{ class Program {
2016-06-12 17:35:08 415
原创 STL 简单 function adapters 的实现
1. 配接器简介配接器(adapters)在 STL 组件的灵活组合上,扮演者轴承、转换的角色。Adapters事实上是一种设计模式(design pattern)。 百度百科对adapters模式的解释:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——Gang of Four
2016-06-12 16:44:21 1426
原创 STL 简单 iterator adapters 的实现
1. 简介配接器(adapters)在STL组件的灵活组合上,扮演者轴承、转换的角色。Adapters事实上是一种设计模式(design pattern)。百度百科对adapters模式的解释:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——Gang of Four 在STL的体系中,有
2016-06-09 21:56:55 1767
原创 排序--归并排序
归并排序的时间复杂度是 O( nlogn ) ,归并排序比较占用内存,但是是一个稳定的排序算法。C# 版using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace CSharp{
2016-06-07 16:22:42 463
原创 STL 简单 functors(function objects)的实现
1.简介 本文介绍的东西,在STL历史上有两个不同的名称。仿函数(functors)是早期的命名,C++标准定案后,采用的新名称是函数对象(function objects)。 函数对象,顾名思义,首先是对象(后面我们可以看到,函数对象是用struct而不是class定义的),其次,我们可以像调用函数一样,调用函数对象。这和函数指针很像,遗憾的是,函数指针不
2016-06-07 11:43:49 1122 1
原创 STL 简单 copy 算法的实现
1.简介 不论是对客户端或对STL内部而言,copy() 都是一个常常被调用的函数。由于copy进行的是复制操作,而复制操作不外乎运用赋值运算符(assignment operator)或复制构造函数(copy constructor),但是某些元素的类型是trivial assignment operator,因此如果能使用内存直接进行复制(例如使用C标准函数memmove、
2016-06-06 19:36:54 2467
原创 排序--堆排序
堆排序的时间复杂度是 O( nlogn ) ,由于是跳跃式的排序,所以堆排序属于不稳定排序。C# 版using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace CSharp{ class
2016-06-06 16:52:08 263
原创 排序--希尔排序
希尔排序的时间复制度为 O(n ^ (3 / 2))C# 版// c.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"void ShellSort(int * arr, int length){ int increament = length ; do { increament = increament / 3 + 1 ; for
2016-06-06 15:17:19 308
原创 STL 简单 <stl_algorithms.h> 算法的实现
1.简介STL标准中,没有区分基本算法和复杂算法,然而SGI STL却把常用的算法定义在中。本文介绍部分算法的实现,给出实现代码和测试代码。 本文介绍的算法包括:1. mismatch:比较两个序列,指出两者之间第一个不匹配的点,返回一对迭代器,分别指向两序列中不匹配的点;2. equal:如果两个序列在 [first, last ] 区间内相等
2016-06-05 20:18:30 1420
原创 STL 简单 <stl_numeric.h> 算法的实现
1.简介在STL中,算法可以大致分为两类:质变算法、非质变算法。质变算法会改变操作对象的值,非质变算法不会改变操作对象的值。所有的STL算法都作用在迭代器(iterator)所标识的区间上。 本文介绍的数值算法包括:1. accumulate:计算 [ first,last ) 内所有元素的总和;2. adjacent_difference:计算
2016-06-04 19:55:15 679
原创 排序--直接插入排序
直接插入排序的时间复杂度是O(n),就像打地主时理牌一样,一点一点的挪,性能要好于冒泡和选择排序C# 版using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace CSharp{
2016-06-03 15:19:34 405
原创 链表中环的入口结点
链表中环的入口结点参与人数:1927时间限制:1秒空间限制:32768K本题知识点: 链表 算法知识视频讲解题目描述一个链表中包含环,请找出该链表的环的入口结点。为什么第一次做的时候没有写博客??// 链表中环的入口结点.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"struct ListNode {
2016-06-02 20:47:48 317
原创 排序--选择排序
选择排序的时间复杂度是O(n),虽然选择排序的时间复杂度依然是O(n),但是选择排序交换和移动数据的次数比冒泡少,性能上要强于冒泡排序。C#版using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespac
2016-06-02 16:15:13 352
原创 扑克牌顺子
扑克牌顺子参与人数:1861时间限制:1秒空间限制:32768K本题知识点: 字符串 算法知识视频讲解题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5
2016-06-01 19:46:53 349
原创 排序--冒泡排序
C# 版using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace BubbleSort_CSharp{ class Program { static void Mai
2016-06-01 17:01:40 432
C# MVC4 easyui datagrid expand row
2015-05-02
聚类分析--C-平均算法
2014-11-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人