Loading

上一页 1 ··· 3 4 5 6 7 8 9 下一页
摘要: Q:关于结构体的对齐,到底遵循什么原则?A:首先先不讨论结构体按多少字节对齐,先看看只以1字节对齐的情况:#include <stdio.h>#include <string.h>#define PRINT_D(intValue) printf(#intValue" is %d\n", (intValue));#define OFFSET(struct,member) ((char *)&((struct *)0)->member - (char *)0)#pragma pack(1)typedef struct{ char sex; 阅读全文
posted @ 2012-11-09 13:15 阿凡卢 阅读(18731) 评论(5) 推荐(1) 编辑
摘要: Q:printf和scanf的返回值是什么?int main() { int i = 43; int n = printf("%d\n",i); printf("%d\n",n); return 0;} A:printf函数返回3,因为其输出了'4', '3', '\n' 三个字符。printf返回的是成功输出到STDOUT的字符数。如果发生错误,返回一个负数。scanf返回的是成功赋值的变量个数,如果发生错误,返回EOFQ:既然fgetc是接收输入的字符,返回值用char或者unsigned char不就 阅读全文
posted @ 2012-11-08 20:00 阿凡卢 阅读(3610) 评论(3) 推荐(0) 编辑
摘要: #include <iostream>using namespace std;class A{public: A() { print(); } void fun() { print(); } virtual void print() { cout<<"A::print()"<<endl; } int m;};class B: public A{public: virtual void print() { cout<<"B::print()"<<endl; }}i... 阅读全文
posted @ 2012-11-07 20:24 阿凡卢 阅读(1252) 评论(0) 推荐(0) 编辑
摘要: BST 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B-树(B树) 是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M个儿子;且M>2 阅读全文
posted @ 2012-10-19 20:17 阿凡卢 阅读(984) 评论(0) 推荐(0) 编辑
摘要: windows下ping程序的实现:使用原始套接字SOCK_RAW,基于IP协议上的ICMP协议来实现,发送的ICMP数据包type为8(请求回复),收到的回复的ICMP数据包type为0,为了判断收到是数据包是本进程发送的。将ICMP包的id设置为本进程的ID。如果使用-r选项,会记录中间经过的r 阅读全文
posted @ 2012-10-17 22:08 阿凡卢 阅读(8495) 评论(0) 推荐(0) 编辑
摘要: socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。 socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在 阅读全文
posted @ 2012-10-16 12:20 阿凡卢 阅读(45454) 评论(0) 推荐(4) 编辑
摘要: Windows下一个带有大小限制的并发阻塞队列,实现的比较简单。 主函数调用测试:一个生产者、两个消费者使用这个队列进行测试。 阅读全文
posted @ 2012-10-11 12:01 阿凡卢 阅读(1464) 评论(1) 推荐(0) 编辑
摘要: 系统中的所有线程都必须拥有对各种系统资源的访问权,这些资源包括内存堆栈,串口,文件,窗口和许多其他资源。如果一个线程需要独占对资源的访问权,那么其他线程就无法完成它们的工作。反过来说,也不能让任何一个线程在任何时间都能访问所有的资源。如果在一个线程从内存块中读取数据时,另一个线程却想要将数据写入同一 阅读全文
posted @ 2012-10-10 09:25 阿凡卢 阅读(3625) 评论(2) 推荐(0) 编辑
摘要: 线程的创建 CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别 CreateThread是Windows的API函数,提供操作系统级别的创建线程的操作,且仅限于工作者线程。不调用MFC和RTL的函数时,可以用CreateThrea 阅读全文
posted @ 2012-10-09 11:59 阿凡卢 阅读(18991) 评论(2) 推荐(0) 编辑
摘要: 设计并发队列 上述代码是有效的。但是,请考虑这样的情况:您有一个很长的队列(可能包含超过 100,000 个元素),而且在代码执行期间的某个时候,从队列中读取数据的线程远远多于添加数据的线程。因为添加和取出数据操作使用相同的互斥锁,所以读取数据的速度会影响写数据的线程访问锁。那么,使用两个锁怎么样? 阅读全文
posted @ 2012-10-07 10:02 阿凡卢 阅读(922) 评论(1) 推荐(1) 编辑
摘要: 线程分类 线程按照其调度者可以分为用户级线程和核心级线程两种。 (1)用户级线程 用户级线程主要解决的是上下文切换的问题,它的调度算法和调度过程全部由用户自行选择决定,在运行时不需要特定的内核支持。在这里,操作系统往往会提供一个用户空间的线程库,该线程库提供了线程的创建、调度、撤销等功能,而内核仍然 阅读全文
posted @ 2012-10-06 15:20 阿凡卢 阅读(3310) 评论(0) 推荐(2) 编辑
摘要: 进程间通信的目的 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。资 阅读全文
posted @ 2012-10-06 10:22 阿凡卢 阅读(1158) 评论(0) 推荐(2) 编辑
摘要: 后缀数组是处理字符串的有力工具。后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也并不逊色,而且它比后缀树所占用的内存空间小很多。子串:字符串S的子串r[i..j],i<=j,表示r串中从i到j这一段,也就是顺次排列r[i],r[i+1],...,r[j]形成的字符串。后缀:后缀是指从某个位置i开始到整个串末尾结束的一个特殊子串。字符串 s 的从第i个字符开始的后缀表示为Suffix(i), 也就是Suffix(i)=r[i..len(s)]。大小比较:关于字符串的大小比较,是指通常所说的“字典顺序”比较,也就是对于两个字符串u、v,令 阅读全文
posted @ 2012-10-05 12:44 阿凡卢 阅读(2874) 评论(0) 推荐(1) 编辑
摘要: 题目:求一个字符串中最长的没有重复字符的子串。方法一:穷举法,使用2重外循环遍历所有的区间,用2重内循环检验子串是否符合“无重复字符”这一要求。其中外层循环i、j 遍历所有的下标,m、n是内层循环,检查区间[i,j]是否符合要求。空间复杂度是O(1),时间复杂度O(N^4)。//O(N^4)的时间复杂度int max_unique_substring1(char * str){ int maxlen = 0; int begin = 0; int n = strlen(str); for(int i=0; i<n; ++i) for(int j=1; j<... 阅读全文
posted @ 2012-10-02 18:19 阿凡卢 阅读(13381) 评论(4) 推荐(1) 编辑
摘要: 二分搜索折半搜索,也称二分查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数... 阅读全文
posted @ 2012-10-02 10:14 阿凡卢 阅读(1590) 评论(2) 推荐(1) 编辑
摘要: 卡特兰数 catalan number卡特兰数前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...原理令h(0)=1,h(1)=1,catalan数满足递推式[1]:h(n)= h(0)*h(n-1) 阅读全文
posted @ 2012-10-01 14:24 阿凡卢 阅读(1099) 评论(0) 推荐(0) 编辑
摘要: P01: 01背包问题题目:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路:这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v] = max{ f[i-1][v], f[i-1][v-c[i]] + w[i]}这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略 阅读全文
posted @ 2012-10-01 09:50 阿凡卢 阅读(639) 评论(0) 推荐(1) 编辑
摘要: 原文:Median of two sorted arrays题目:两个有序数组A和B,大小都是n,寻找这两个数组合并后的中位数。时间复杂度为O(logn)。中位数:如果数组的个数是奇数,那么中位数的值就是有序时处于中间的数;如果数组个数是偶数的,那么就是有序时中间两个数的平均值。方法一:合并时计数使用Merge Sort时的Merge操作,比较两个数组时候计数,当计数达到n时,就可以得到中位数,在归并的数组中,中位数为下标n-1和n的两个数的平均值。时间复杂度O(n)。#include <stdio.h> /* This function returns median of a.. 阅读全文
posted @ 2012-09-13 22:05 阿凡卢 阅读(6803) 评论(1) 推荐(2) 编辑
摘要: 磁盘文件排序问题描述,来自《编程珠玑》:输入:一个最多含有n个不相同的正整数的文件,其中每个数都小于等于n,且n=10^7。输出:得到按从小到大升序排列的包含所有输入的整数的列表。条件:最多有大约1MB的内存空间可用,但磁盘空间足够。且要求运行时间在5分钟以下,10秒为最佳结果。 分析: 1、归并排 阅读全文
posted @ 2012-09-12 10:12 阿凡卢 阅读(2721) 评论(1) 推荐(2) 编辑
摘要: 寻找最大的K个数,如果所有的数据全部可以放入内存,就可以使用random select算法在线性时间内寻找第K大的数,再得到最大的K个数。 参考:http://www.cnblogs.com/luxiaoxun/archive/2012/08/06/2624799.html 如果不能把所有数据的数据 阅读全文
posted @ 2012-09-11 10:09 阿凡卢 阅读(8572) 评论(2) 推荐(3) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 下一页