- 博客(29)
- 收藏
- 关注
原创 随笔
作业:1.ProcWatch实例代码为什么会占用100%的CPU?(3rd->demo->ProcWatchClientConsole)这里特别说一下,当时多核虚拟机时也不会到100%,一半cpu使用率会很低,到了20~30就已经很高了,因为是多核啊bug:#define EVENT_NAME L"ProcEventx" // (L"//global//procEvent
2015-11-02 15:31:21
364
原创 素数的查找
使用筛法找出4万内的素数因为2,3分别是素数中最小的偶数和奇数,所以只要是2或者3的倍数的都不是素数,剩下的则是素数。#define MAXN 40000int SPrime(void){ int i, j; int b_size; int prime[MAXN], b[MAXN]; for (i = 2 ; i <
2015-11-02 15:21:04
323
原创 链表--中间节点
快慢指针找到链表的中间节点node * find_list_middle_node(node * list){ if(list == NULL || list->next == NULL) { return list; } node *p1 = list; node *p2 = list; while(p1&&p2
2015-11-02 15:02:37
344
原创 链表--查看链表是否含有环(不一样的方法)
双指针法,一个快指针,一个慢指针,链表若有环的话,快指针必然会与慢指针相遇typedef struct _node{ int data; struct _node *next;}node,*pnode;int FindLoop(node *head){ node *p = NULL; node *q = NULL; if (head == NULL)
2015-11-02 14:57:37
373
原创 位图法--查找字符串中第一个不重复的字符
使用为位图法,查找字符串中第一个不重复的字符,使用位图法,该字符是数组的index,而出现的次数则是数值char find_first_single_char(const char *str){ int tmp[256]={0}; char *s= (char *)str; while(*s!='\0') { tmp[*s]++; s++;
2015-11-02 14:17:36
394
原创 链表删除节点--算法复杂度o(1)
从单链表中删除一个节点,除了尾节点都是O(1)操作bool delete_node(node *&head, node *p){ if(!p || !head) return false; if(p->m_pNext != NULL) //不是尾指针 { node *del = p->m_pNext;
2015-11-02 13:39:17
451
原创 链表排序--快速排序
使用快速排序对链表进行排序:void q_sort(int numbers[], int left, int right){ int pivot, l_hold, r_hold; l_hold = left; r_hold = right; pivot = numbers[left]; while(left < right) { while (
2015-11-02 12:24:03
322
原创 链表排序--选择排序
使用双指针,读指针遍历后面节点,与当前的节点比较,符合条件(比大小)就交换,因此该算法涉及到两个循环void sort_list(node *head){ node *p, *q, *s; int t; p = head; while(p) { s = p; q = p->next; while(q) { if (q->value
2015-11-02 12:21:12
326
原创 链表操作--逆序
非递归逆置:void reverse_list(node **head){ node *p, *q, *r; p = *head; q = p->next; while(q!=NULL) { r = q->next; q->next = p; p = q; q = r; } (*head)->next = NULL; *he
2015-11-02 12:11:36
369
原创 双指针的妙用(1)--特定字符的提前
实现一个时间复杂度为n的算法,将一个字符串中的所有*提前:he*llo wor*l*d => ***hello world
2015-11-02 11:56:10
308
原创 算法之atoi && itoa
实现字符串和整数互转的两个函数void itoa(int i, char *buf) 和 int atoi(char *str);//这个函数必须考虑到32位整数的溢出问题,MAX表示的是最大值2147483647的16进制表示,MIN表示的是最小负值-2147483648的16进制表示#define MAX ((int)0x7FFFFFFF)#define MIN ((int)0
2015-10-17 21:06:06
361
原创 算法之memmove的实现
要求:实现void* memmove(void *pDst, const void *pSrc, size_t len); 需要考虑内存重叠的问题 和其它边界情形;void memmove(void *pDst,const void *pSrc, size_t size){assert(pDst != NULL);assert(pSrc != NULL);/* pSrc与pDs
2015-10-17 20:44:21
272
转载 提升磁盘IO性能的几个技巧
提升磁盘IO性能的几个技巧http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2312248&fromuid=20665047目前磁盘都是机械方式运作的,主要体现在磁盘读写前寻找磁道的过程。磁盘自带的读写缓存大小,对于磁盘读写速度至关重要。读写速度快的磁盘,通常都带有较 大的读写缓存。磁盘的寻道过程是机械方式,决定了其随机读写速度
2014-09-12 14:59:59
7957
转载 青年与大师(抬杠版)
青年:大师,我现在在企业里很低的一个岗位,我梦想总有一天自己将掌控整个企业攀上巅峰,现在就已经急不可耐。我该怎么办?禅师:年轻人要有耐心,历史上弱者欲征服强者,即使能成功,不也得百八十年的功夫吗?青年略一沉吟:亚历山大(波斯阿契美尼德王朝从一个地跨欧亚非的超级大国,到被亚历山大率领的希腊大军征服全境,期间不足4年)图为波斯帝国覆灭前4年的版图 青
2014-09-07 22:25:00
1311
转载 大师与少年的对话
成功关键还取决于一个人的心态。其中有个少年想成为少林寺最出色的弟子。他问大师:“我要多少年才能那么出色?” 大师回答说:“至少十年。” 少年说:“十年时间太长了。如果我付出双倍的努力,需要多长时间呢?” 大师回答说:“二十年。” 少年又问:“如果我夜以继日地练习呢?” 大师回答说:“三十年。” 少年一听灰心了,他不解地问大师:“为什么我每
2014-09-07 22:05:28
632
1
转载 程序运行时三种内存分配策略
按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的.静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求.栈式存储分配也可称为动态存储分配,是由
2014-09-04 22:39:13
497
转载 常量指针与指针常量的区别(转帖)
常量指针与指针常量的区别(转帖)三个名词虽然非常绕嘴,不过说的非常准确。用中国话的语义分析就可以很方便地把三个概念区分开。一) 常量指针。常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。在C/C++中,常量指针是这样声明的:
2014-09-03 20:41:46
243
转载 数据库事务
事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。 针对上面的描述可以看出,事务的提出主要是为
2014-08-13 21:00:12
301
转载 编程实现memcpy()
以下内容转自:http://my.oschina.net/renhc/blog/36345,作者:任洪彩,2011-12-02],这篇解释的相对比较透彻些!面试中如问到memcpy的实现,那就要小心了,这里有陷阱。先看下标准memcpy()的解释:注意下面的注释,对于地址重叠的情况,该函数的行为是未定义的。事实上所说的陷阱也在于此,自己动手实现memcpy()时就需要考虑地
2014-08-13 20:28:25
504
转载 c++类大小(涵盖继承 虚继承 虚函数表)
涉及到c++中求类大小时需要特别注意一下几点1.为类的非静态成员数据的类型大小之和.2.有编译器额外加入的成员变量的大小,用来支持语言的某些特性(如:指向虚函数的指针、虚继承、多重继承).3.为了优化存取效率,进行的边缘调整.4. 与类中的构造函数,析构函数以及其他的成员函数无关. 5. 私有继承,会去继承之前的私有成员变量么? 会...在内存中仍然分配
2014-08-13 17:24:16
361
转载 进程调度算法
先来先服务(First Come First Service,FCFS)调度算法按照进程进入就绪队列的先后顺序选择可以占用处理器的进程。这是一种不可抢占方式的调度算法,优点是实现简单,缺点是后来的进程等待CPU的时间较长。它现今主要用作辅助调度法;例如结合在优先级调度算法中使用,当有两个最高优先级的进程时,则谁先来,谁就先被调度。 短执行进程优先算法(Shortest
2014-08-12 23:39:10
606
原创 题目:请实现两棵树是否相等的比较,相等返回,否则返回其他值,并说明算法复杂度。
题目:请实现两棵树是否相等的比较,相等返回,否则返回其他值,并说明算法复杂度。数据结构为:[cpp] view plaincopytypedef struct_TreeNode{ char c; TreeNode *leftchild; TreeNode *rightchild; }TreeNo
2014-08-12 22:46:20
1517
转载 linux内核同步机制中的概念介绍和方法
Linux设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发访问会导致竞态,linux提供了多种解决竞态问题的方式,这些方式适合不同的应用场景。 Linux内核是多进程、多线程的操作系统,它提供了相当完整的内核同步方法。内核同步方法列表如下:=========================内核中采用的同步技术: 中断屏蔽原子操作
2014-08-12 15:29:05
391
转载 二叉树按层次遍历--队列实现
最近数据结构看的还真是恶心额,脑子不好使,算法写不来额····· 二叉树一大堆概念性的东西,不过还是写吧。二叉树(binary tree)二叉树的基本形态 二叉树也是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态: (1)空二叉树——(a); (2)只有一个根结点的二叉树——(b); (3)只有左子树——(
2014-08-11 14:39:34
819
转载 逻辑地址、线性地址、物理地址和虚拟地址理解
逻辑地址(Logical Address) 是指由程式产生的和段相关的偏移地址部分。例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地
2014-08-08 20:23:27
377
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人