- 博客(58)
- 资源 (14)
- 收藏
- 关注
转载 gcc生成静态库和动态库
一、库文件简介简单地说,库(Library)就是一组已经写好了的函数和变量、经过编译代码,是为了能够提高开发效率和运行效率而设计的。库分为静态库(Static Library)和共享库(Shared library)两类。静态库文件的扩展名是.a,共享库文件的扩展名是.so(在CYGWIN环境下,分别叫做.o和.dll)。共享库现在常常被叫做动态库,是由于很多人借用了MS Wind
2012-05-27 14:51:23
999
原创 Dijkstra求单源最短路径(图论基础算法)
Dijkstra算法:最短路Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11669 Accepted Submission(s): 4968Problem
2012-05-05 20:06:03
876
原创 无向图求连通部件,和节点访问时刻和离开时刻
#include #include #include #include #include using namespace std; char ch[12];bool gmap[12][12];bool flag[12];queue myqueue;struct Time { int s; int e;}mytime[12];int cnt = 1;void dfs(i
2012-05-04 19:26:00
558
原创 模板编译模型
非模板模型:包括普通函数,普通类;在调用普通函数时,编译器只需要看到函数的声明。在定义类对象时,编译器只需要看到类的定义,成员函数的定义不是必须存在的。所以:将类的定义和函数的申明放在头文件中,类成员函数的定义,普通函数的定义放在源文件中。模板模型:包括模板函数,模板类;在调用模板函数或类的模板成员函数时,编译器需要知道函数的定义,然而这些代码通常放在源文件中。
2012-05-03 09:13:34
515
原创 fedora9下使用QT连接数据库(QSqlDatabase: QODBC driver not loaded)
开源版的QT没有提供Mysql的驱动,导致使用数据库的时候提示如下错误:QSqlDatabase: QODBC driver not loadedQSqlDatabase: available drivers: QSQLITE解决方法:重新编译QT ./configure -qt-sql-mysql -qt-sql-sqlite -plugin-sql-mysql -plugi
2012-05-02 20:51:40
1473
转载 HASH_MAP
条条大路通罗马,为什么你不随便选一条?0 为什么需要hash_map用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典...这些信息如果保存下来并不复杂,但是找起来比较麻烦
2012-04-30 14:18:37
521
转载 数划分
数的划分问题描述将整数n分成k份,且每份不能为空,任意两种分法不能相同(不考虑顺序)。例如:n=7,k=3,下面三种分法被认为是相同的:1,1,5;1,5,1;5,1,1。问有多少种不同的分法。输入:n,k(6输出:一个整数,即不同的分法。输入输出样例输入:7 3输出:4问题分析:这是一道整数剖分的问题。这类问题的数学性很强,方法也很多。
2012-04-26 18:58:59
430
原创 C++多态
多态分编译时多态和运行时多态:编译时多态就是指函数重载,运算符重载,泛型编程。这个很好理解运行多态是指使用虚函数来实现使用基类的对象的引用或指针来访问派生类成员,即使调用派生类中由基类申明的虚函数。这个也好理解,但是要和非虚函数覆盖区别开来class Base {private: int a;public: Base(int i=100):a(i){} void
2012-04-23 19:20:40
573
原创 常见动态规划(DP)
1最大子数组和输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。#include #include #include using namespace std;void DP(int a[], int n) { int dp[100]; int i, j, max
2012-04-20 16:32:16
1075
原创 设计包含min函数的栈O(1)时间复杂度(笔试)
设计包含min函数的栈。定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。在入栈的时候就用一个数组dp对当前栈内的元素最小值保存#include #include #include using namespace std;class STACK {private: int size; int c
2012-04-20 15:09:36
484
原创 二叉查找树转双向链表(笔试)
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整指针的指向 10 / \ 6 14 / \ / \ 4 8 12 16 转换后成双向链表481012141
2012-04-20 14:34:38
510
原创 使用STL求第K大数
项目上需要使用C++,抽空正好把C++熟悉一下。期待接下来的这个项目能给我的C++编程能力带来提升。先来个set版本的。#include #include #include #include #include #include #include #include using namespace std;int main( ) { int a, n, k, s
2012-04-10 19:36:30
2572
原创 几个关于多线程笔试题
先来个简单的,缓解下尴尬的气氛。子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。#include #include #include #include pthread_attr_t attr;pthread_mutex_t mutex;pthread_cond_
2012-04-08 20:56:12
1337
原创 堆
在求前K大数中可以用堆来维护,但是很久没碰堆这个东西了,BS下自己。重新复习一下吧。插入堆的时候,将元素放在数组尾,破坏堆的规则,使此节点上浮。删除堆顶元素的时候,首先返回堆顶元素,然后将数组尾元素置于堆顶,破坏规则,使此节点下沉。规则;数组下标从1开始。 如果当前节点为pos,则父亲节点为pos/2;左子节点为pos*2 ,右子节点为pos*2+1. 小根堆的堆顶元素最小
2012-04-08 15:29:10
556
原创 N个数求最大的k个数
计划之中,每周日,做点算法题。希望能有所进步。看了一个在N个数中求k个数,我的第一感觉应该是用堆来解决。确实堆是可行的,这里给出一个快排思想的求法,时间复杂度为O(N*log2^k)。然后再弄个堆维护的例子。以前搞ACM的时候,有点浮躁,但愿能够在静下来的时候多多考虑算法。#include #include void swap(int *a, int *b) { int
2012-04-08 10:45:28
671
原创 2012腾讯实习招聘笔试附加题1
一个数组a[n],求构造出一个b[n],使得b[i]=a[0]*a[1]*...a[n-1]/a[i];不能用除法和除了循环变量外的额外变量 ,要求(1)的空间复杂度,O(n)的时间复杂度。在网上看见这个题目,感觉很有意思。我的解法如下,不知道有没更好点的。#include #include void change_a2b(int a[], int len, int b[]) {
2012-04-08 09:22:32
528
原创 用TCP/IP进行网际互联第三卷 源代码编译修改
用TCP/IP进行网际互联源代码编译修改1./usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference in TCPecho.o/lib/libc.so.6: could not read symbols: Bad value删除源文件中的 extern
2012-04-06 21:09:25
1701
原创 C语言中变长形参的实现
#include "unp.h"#include /*void func(const char *fmt, ...) { va_list args; va_start(args, fmt); vfprintf(stdout, fmt, args); va_end(args); exit(1);}int main( ) { int a = 1; int b = 2;
2012-04-06 20:09:26
590
原创 xp下使用telnet 或者vnc连接linux
telnet还是挺方便的,不过属于文本界面vnc也挺方便,提供更强大的图形界面。1. 查询linux是否安装了telnet-serverrpm -qa telnet-server2. yum install telnet-server 附带安装了xinetd并置 /etc/xinetd.d/telnet 下的disable 为no或者注释。,因为telnet是由xi
2012-04-06 16:18:54
526
原创 基于线程池实现linux下守护进程运行web目录服务器
LInux先建立线程池,主函数监听套机字,accept后,将连接套接字投入线程池处理。自己搞的这个线程池,暂时没有发现问题,运行效果还行。虽然free是线程安全,不可重入的。但是我们并没使用静态变量,所以不会存在问题下为main函数,运行参数为 ./web n k ;n为想线程池初始化的线程数,k为0为终端运行,k为1则转为守护进程。运行如图支持文
2012-04-05 08:21:47
1102
转载 交换两个数组使两个数组和的差最小
交换两个数组使两个数组和的差最小 /* 有两个数组a,b,大小都为n,数组元素的值任意整形数,无序; 要求:通过交换a,b中的元素,使[数组a元素的和]与[数组b元素的和]之间的差最小。*//* 求解思路: 当前数组a和数组b的和之差为 A = sum(a) - sum(b) a的第i个元素和b的第
2012-04-03 15:26:20
533
原创 形参定义成指定大小的数组
今天在百度知道上看见一个问题。类似char *func( char str[10]) { printf(“len= %d\n”, sizeof(str));}int main() { charstr[100] = “there is a problem”;func(str);} 首先对func函数了解,形参为char str[10],
2012-04-03 10:34:24
1890
转载 B 树、 B- 树、 B+ 树、 B* 树都是什么
http://blog.youkuaiyun.com/w174504744/article/details/7419017B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如:
2012-04-02 08:53:37
401
原创 快速幂运算
普通的求幂时间复杂度为O(n);但是可以有更好的算法,实际上循环log(2,n),n^k = n^(k1*2^0 + k2*2^1 + k3*2^3 ....) k1,k2...k(log2,n)取0,1,为k的二进制中每一个bit位展开便可得。n^(k1*2^0) * n^(k2*2^1) * n^(k3*2^2).......至此,一个较优的算法出现了#include
2012-04-02 08:47:07
522
转载 两个指针之美
无意中看见了这篇帖子。感觉写的还不错。尤其是求链表中倒数第K个节点,其他技巧都是一些比较常见的思路了,不过也能带给我更多的思考。源:http://blog.youkuaiyun.com/dlengong/article/details/7418420使用两个指针可以轻松的解决许多算法问题,归纳出如下几种1、 判断链表是否带环带环链表的判断是链表中经常考察的内容。一个循环链表可以无休止地遍历下
2012-04-02 08:20:41
521
翻译 糊涂窗口综合症
什么是糊涂窗口综合症当发送端应用进程产生数据很慢、或接收端应用进程处理接收缓冲区数据很慢,或二者兼而有之;就会使应用进程间传送的报文段很小,特别是有效载荷很小。 极端情况下,有效载荷可能只有1个字节;而传输开销有40字节(20字节的IP头+20字节的TCP头) 这种现象就叫糊涂窗口综合症发送端引起的糊涂窗口综合症如果发送端为产生数据很慢的应用程序服务(典型的有telnet应
2012-04-01 10:28:17
367
原创 学习笔记:对Tcp拥塞,超时重传的一些理解
仅供个人笔记,不能保证正确#include "unp.h"extern int c_window, allow_window;extern int RTO;extern int *point1, *point2, *point3;extern int record_conges;void mult_dec( ) { /*乘法减小*/ int *tmp
2012-04-01 09:52:48
392
翻译 bloom filter
一、什么是 Bloom filter Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员,这种检测只会对在集合内的数据错判,而不会对不是集合内的数据进行错判,这样每个检测请求返回有“在集合内(可能错误)”和“不在集合内(绝对不在集合内)”两种情况,可见 Bloom filte
2012-03-31 10:39:34
473
原创 校验和总结
1:IP校验和只校验20字节的IP报头,并不会计算数据部分的校验和。因为IP也是不可靠,尽最大努力投递。2:ICMP校验和覆盖整个报文(ICMP报头+ICMP数据);3:UDP和TCP校验和不仅覆盖整个报文(头部+数据),而且还有12字节的IP伪首部,其中包括源IP地址(4字节)、目的IP地址(4字节)、协议(2字节,第一字节补0)和TCP/UDP包长(2字节)。另外UDP、TCP数据报的
2012-03-31 09:08:36
623
原创 简易ping程序
当我把icmp的检验和设置成0时,ping百度是可以有echo返回。但是ping其他主机是没有返回响应。手动添加检验和后正常。原因:可能是baidu服务器并没有检测校验和就返回一个echo,这样可以减少服务器的负担。而其他一些站点都会校验。注意点:IPV4的icmp,在原始套接字收到后,收到的是包含IP头在内的完整数据报IPV6的icmp,则是去除所有ip头和扩展头部的
2012-03-31 08:40:23
519
原创 双向链表实现线程池 用于TCP并发连接
简述:自我感觉对C指针了解的还是比较透彻,能够运用自如,一方面练习一下多线程编程,另一方面练习一下数据结构链表。但是完成的过程中,各种问题还是扑面而来,共花了2个小时完成了此线程池来实现TCP并发连接,创建固定数目的线程时间仓促,可能有某些指针未释放,或者还没完善的地方,希望能共同讨论。双向链表提高扫描速度,信号等待用while保护,防止惊群,在任务提取和加入过程动态维护链表,防止链表
2012-03-28 19:16:44
1595
原创 简单进程池实现多TCP客户服务
根据预定义进程数创建进程池。父子进程通信使用的IPC方式为:UNIX域套接字父进程listen,aeecpt,并将连接套接字发送到子进程,交由子进程处理该连接。子进程处理完毕,与父进程通信,实现资源回收,并在下一连接到来交由该完毕的子进程。#include "unp.h"#include #define IDLE 0#define BUSY 1#define END
2012-03-28 09:31:40
1398
转载 链路层访问修改
首先例子中, udpcksum.h包含了两个头文件 ip_var.h/udp_var.h,我是centos5.5的,系统中并无这些头文件。如果自己隐掉,编译时明显就会报struct udpiphdr结构不存在。可在udpcksum.h中增加以下代码:struct ipvolg{ u_char ih_x1 [9]; //9 bit u_char ih_pr;
2012-03-22 20:50:41
584
原创 源路径选项
1. V4,V6头部差异IP源路径选项:对于IPV4,由于IP头部长度字段为4位,最大可以表示15,那么限制了IPV4的头部总长度为15*4 = 60字节。前10字节为固定的头部部分,所以最多有40个字节用来填充选项字段。对于IPV6,固定长度的40字节的IPV6头部和传输层头部之间可以有扩展头部。2. V4,6头部选项字段填充和获取使用setsockopt和getsockopt,传入参数
2012-03-19 19:39:20
1137
原创 原始套接口基础知识
原始套接口输出: 1如果已经连接,则可以使用write,writev,send 2.未连接,则使用sendto,sendmsg 3.开启IP_HDRINCL:进程需要自填充IP,进程调用输出函数时的字节数包括IP头部。 IPV4的标识字段可以设置成0,由内核填充该值; IPV4的头部校验和字
2012-03-19 14:30:40
651
原创 C语言中static相关
1. 对于全局static变量,初始化:首先是全局变量,被初始化为0,其次是static也被初始化为0;存放位置:存放于内存的静态区。作用域:开始于定义位置,终止于文件的结尾。 本文件之内在没有定义此static全局变量之前,想使用的话需要加extern声明。(最好在文件开始处就定义,避免使用extern)特殊性:static还有隐藏的作用,本文件定义了static全局变
2012-03-19 10:59:26
1902
原创 寻找第K小元素O(N)算法
快速排序时间复杂度:O(n*lgn)但是没必要完整排序后再O(1)选出第k元素。思想:利用快排分区思想,分界点为q,左边的数小于等于q,右边的数大于q这个规则。如果k小于左边区间个数则以左区间递归,否则在右区间递归。#include #define MAX 100000void swap(int *a, int *b){/*交换*/ int temp; temp = *
2012-03-16 21:22:56
894
原创 异步信号驱动IO实现回射服务器
#include "unp.h"#include /*server */#define QSIZE 10struct DG{ void *data; size_t datalen; struct sockaddr_in addr; socklen_t addrlen;};struct DG client[QSIZE]; /*循环队列*/int nqueue, nin,
2012-03-16 18:51:38
451
原创 利用Unix域套接字实现IPC
写完后,至少调试了30分钟时间。错误1:snprintf(argsockfd, sizeof(argsockfd), "%d", sockfd[1]);snprintf(argmode, sizeof(argmode), "%d", mode);写作:snprintf(argsockfd, sizeof(argsockfd), "%s", sockfd[1]);snprintf(arg
2012-03-14 21:39:16
619
原创 UDP 超时重传机制
问题来源:老式方法:UDP传输设定超时未N秒,发送一个请求后等待N秒钟,若超时都没有收到确认,则重发请求,重发一定次数后便丢弃。老式方法不合理的原因:由于网络上影响因素的不同,可能RTT差别较大,设定一个固定的超时时间使资源不能得到合理应用。较好的方法:根据实测的RTT及其他因素考虑在内来估计超时时间。术语RTO:重传超时Srtt:平滑化的RTT估算因子Reevar:平滑化平均偏差估
2012-03-14 14:43:13
13178
串口调试助手高级版V0.1(升级版)
2012-11-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人