
C Program
文章平均质量分 80
过往记忆
这个作者很懒,什么都没留下…
展开
-
数据结构:胜者树与败者树
已移到: http://www.iteblog.com/archives/93假设有k个称为顺串的有序序列,我们希望将他们归并到一个单独的有序序列中。每一个顺串包含一些记录,并且这些记录按照键值的大小,以非递减的顺序排列。令n为k个顺串中的所有记录的总数。并归的任务可以通过反复输出k个顺串中键值最小的记录来完成。键值最小的记录的选择有k种可能,它可能是任意有一个顺串中的第1个记录。并归k个顺串的最原创 2012-10-15 22:15:36 · 27542 阅读 · 0 评论 -
小米2013校园招聘笔试题
题目:一个数组里,除了三个数是唯一出现的,其余的都出现偶数个,找出这三个数中的任一个。比如数组元素为【1, 2,4,5,6,4,2】,只有1,5,6这三个数字是唯一出现的,我们只需要输出1,5,6中的一个就行。下面是我的思路:这个数组元素个数一定为奇数,而且那要求的三个数一定不可能每一bit位都相同,所以我们可以找到其中一个bit位不同,可以把那三个数字分出来,而且可以很推出三个数肯定可以分到原创 2012-09-29 17:10:34 · 32208 阅读 · 74 评论 -
用01背包解决石子归并问题
题目:有一堆石头质量分别为W1,W2,W3...WN.(W<=100000)现在需要你将石头合并为两堆,使两堆质量的差为最小。 这道题目可以用01背包问题来解决。即求出和最接近sum/2的一个子集 令f(i, j)表示前i个元素中和最接近j的子集的和(有点绕),则有: f(i, j) = max( f(i-1, j), f(i-1, j-a[i])+a[i] ) ,其中a数组是用来原创 2012-09-28 16:12:52 · 9341 阅读 · 2 评论 -
[ACM]在命令行以LED样式显示输入的数字
昨天,一个同学和我说了一道ACM题目,说很有趣,于是乎我就听了他给我介绍了题目的要求:每行输入两个数如下所示:1 1234567890输出: 2 1234567890输出3 1234567890输出我想我图贴到这里大家应该知道题目的要求了吧。分析:上面的数字输出有点想LED数字输出,不知原创 2012-09-10 14:13:35 · 33772 阅读 · 5 评论 -
平面上求最近点对问题
求点集中的最近点对有以下两种方法:设p1=(x1, y1), p2=(x2, y2), …, pn=(xn, yn)是平面上n个点构成的集合S,设计算法找出集合S中距离最近的点对。 1、蛮力法(适用于点的数目比较小的情况下) 1)算法描述:已知集合S中有n个点,一共可以组成n(n-1)/2对点对,蛮力法就是对这n(n-1)/2对点对逐对进行距离计算,通过循环求得点集中的最近翻译 2012-02-26 16:47:43 · 13709 阅读 · 9 评论 -
给定a和n,计算a+aa+aaa+a...a(n个a)的和(大数据处理)
题目描述:给定a和n,计算a+aa+aaa+a...a(n个a)的和。输入:测试数据有多组,输入a,n(1输出:对于每组输入,请输出结果。样例输入:1 10样例输出:1234567900从题中就可以看出,当a = 9, n = 100的时候,一个int类型的数是存不下100位的数,所以不能运用平常的方法来求,下原创 2012-07-13 21:12:24 · 7804 阅读 · 2 评论 -
C调用C++链接库
C调用C++链接库: 1.编写C++代码,编写函数的时候,需要加入对C的接口,也就是extern “c" 2.由于C不能直接用"class.function”的形式调用函数,所以C++中需要为C写一个接口函数。例如本来要调用student类的talk函数,就另外写一个cfun(),专门建一个student类,并调用talk函数。而cfun()要有extern声明 3.转载 2012-07-13 16:04:37 · 8158 阅读 · 0 评论 -
编辑距离
一、问题描述设A和B是两个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括: (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符; 将字符串A变换为字符串B所用的最少字符操作数称为字符串A到B的编辑距离,记为d(A,B)。试设计一个有效算法,对任给的两个字符串A和B,计算出它们的编辑距离d(A,B)。翻译 2012-05-13 15:18:44 · 4860 阅读 · 0 评论 -
寻找二叉树两节点的最近的公共祖先[转载+整理]
1.树节点定义中带有parent指针struct TreeNode{ int data; TreeNode *left,*right,*parent;};算法思想:(1). p->parent(2). 将q的所有祖先节点依次和p->parent作比较,如果发现两个节点相等,则该节点就是最近公共祖先,直接将其返回。如果没找到相等节点,则转3翻译 2012-05-30 11:07:08 · 8126 阅读 · 1 评论 -
又一道编程面试题
题目以及要求:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间。 我的实现类似冒泡排序。#include #include // Author: 397090770// E-mail:wyphao.2007@163.com// Date: 2012/09/29 //题目以及要求:把一个字符串的大写字母放到字符串的后面,//各个字符的相原创 2012-09-29 00:32:24 · 24682 阅读 · 40 评论 -
随机化快速排序
快速排序的算法的性能取决于划分的对称性。通过修改函数 Partition ,可以设计出采用随机选择策略的快速排序算法。在快速排序算法的每一步中,当数组还没有被划分时,可以在a[p:r]中随机选出一个元素作为划分基准,这样可以使划分基准的选择是随机的,从而可以期望划分是较对称的。 代码如下: #include #include int a[]={15,56,2,5翻译 2011-12-19 22:09:34 · 9035 阅读 · 2 评论 -
自己动手之 快速排序
#include#include#define Elem int typedef struct sqlist{ Elem key ; int data ; }sqlist ;void quicksort(sqlist R[] , int min , int max){ int i ,j ; i = min ; j = max ;翻译 2011-10-02 20:35:48 · 4584 阅读 · 0 评论 -
在fedora里面安装BerkeleyDB数据库
已转到:http://www.wypblog.com/archives/179 一、首先到oracle的官网下载Berkeley db数据库源文件下载地址http://download.oracle.com/otn/berkeley-db/db-5.3.15.tar.gz 二、下载之后的文件是一个打包好的文件,需要在命令行里面利用tar来解压(当然你也可以利用一些可原创 2012-03-09 16:29:34 · 5998 阅读 · 1 评论 -
用分数形式精确表达有理数和循环无理数
已迁往:http://www.iteblog.com/archives/63学过计算机编程的就知道,在计算机中,浮点数是不可能用浮点数精确的表达的,如果你需要精确的表达这个小数,我们最好是用分数的形式来表示,而且有限小数或无限小数都是可以转化为分数的形式。比如下面的几个小数:0.3333(3) = 1/3的(其中括号中的数字是表示循环节)0.3 = 3 / 100.25 = 1 / 40. 28原创 2012-08-27 16:35:51 · 23720 阅读 · 36 评论 -
数据结构: 平衡二叉树
一、定义 平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用算法有红黑树、AVL、Treap、伸展树等。 平衡二叉树是在二叉排序树(BST)上引入的,就是为了解决二叉排序树的不平衡性导致时间复杂度大大下原创 2012-10-27 22:33:01 · 40650 阅读 · 3 评论 -
2013年各大IT公司研发类笔试题
不可以看见的部分请见http://www.wypblog.com/archives/262一、百度(武汉地区)第一部分:1、描述数据库的简单操作。2、描述TCP\IP四层模型,并简述之。3、描述MVC的内容。第二部分:1、给出a-z0-9,在其中选择三个字符组成一个密码,输出全部的情况,程序实现。2、字符串的反转,比如abcde,输出edcba.3、许多程序会大量使用字符串。对于不同的字符串,我们原创 2013-03-01 12:02:28 · 3649 阅读 · 4 评论 -
2012年腾讯招聘实习生笔试题
已移到:http://www.wypblog.com/archives/155程序的问题:已知数组a[n],求数组b[n].要求:b[i]=a[0]*a[1]*……*a[n-1]/a[i],不能用除法。 a.时间复杂度O(n),空间复杂度O(1)。 b.除了迭代器i,不允许使用任何其它变量(包括栈临时变量等)大家有什么解法?先不要看我下面的解法。希望大家讨论讨论一下,留个言,一起交流一下。下面给出原创 2012-04-11 13:59:02 · 6509 阅读 · 5 评论 -
字符串相似度计算
已迁移到:http://www.wypblog.com/archives/58思想是编程之美上面的,我只是做了一点点优化。。。许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把“a”替换为“b”); 2.增加一个字符(如把“abdd”变为“aebdd”);原创 2012-10-14 22:33:43 · 13048 阅读 · 0 评论 -
数据结构:堆
已移到:http://www.wypblog.com/archives/97堆常用来实现优先队列,在这种队列中,待删除的元素为优先级最高(最低)的那个。在任何时候,任意优先元素都是可以插入到队列中去的,是计算机科学中一类特殊的数据结构的统称一、堆的定义最大(最小)堆是一棵每一个节点的键值都不小于(大于)其孩子(如果存在)的键值的树。大顶堆是一棵完全二叉树,同时也是一棵最大树。小顶堆是一棵完全完全二原创 2012-10-16 11:27:35 · 54751 阅读 · 4 评论 -
各种常见的排序算法及其实现
一、排序的概念一、排序(sort)或分类所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。其确切定义如下:输入:n个记录R1,R2,…,Rn,其相应的关键字分别为K1,K2,…,Kn。输出:Ril,Ri2,…,Rin,使得Ki1≤Ki2≤…≤Kin。(或Ki1≥Ki2≥…≥Kin)。 1.被排序对象--文件被排序的对象--文件由一组记录组成。记录原创 2012-10-15 21:30:41 · 17181 阅读 · 0 评论 -
堆和栈的区别 [转贴]
非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据翻译 2012-05-30 10:13:05 · 4955 阅读 · 1 评论 -
linux网络编程之:获取指定网卡网络数据包并分析(附C语言源码)
#include #include #include #include #include int main(){ char *net_dev; char *ip_addr; char *net_mask; char errbuf[PCAP_ERRBUF_SIZE]; bpf_u_int32 netp; bpf_u_int32 mask; struct in_addr a原创 2012-04-13 10:43:17 · 10453 阅读 · 2 评论 -
linux网络编程之:多播
#include #include #include #include #include #include #define BUFLINE 256int main(int argc, char *argv[]){ struct sockaddr_in local; int fd, n; struct ip_mreq mc; char msg[BUFLINE + 1]; i原创 2012-04-14 20:17:51 · 5213 阅读 · 0 评论 -
linux中的C里面使用pthread_mutex_t锁
linux下为了多线程同步,通常用到锁的概念。posix下抽象了一个锁类型的结构:ptread_mutex_t。通过对该结构的操作,来判断资源是否可以访问。顾名思义,加锁(lock)后,别人就无法打开,只有当锁没有关闭(unlock)的时候才能访问资源。它主要用如下5个函数进行操作。1:pthread_mutex_init(pthread_mutex_t * mutex,const p翻译 2012-02-16 14:07:37 · 42755 阅读 · 6 评论 -
平面中判断点是否在某一三角形内算法 .
给定平面上一点p(x0,y0),判断该点是否在三角形ABC中,三角形顶点坐标分别为A(xa,xb),B(xb,yb),C(xc,yc)。可以使用面积法来判断,方法如下:其中S(A,B,C)表示三角形ABC的面积。 1、 若abs( S(A,B,C) ) = abs( S(P,B,C) ) + abs( S(A,P,C) ) + abs( S(A,B,P) ) ,则P在三角形ABC的内部或翻译 2012-02-14 19:15:13 · 17331 阅读 · 1 评论 -
如何判断一点在三角形内
假定在右手坐标系中的三角形3点坐标为A,B,C,判断P是否在ABC之内 ( 主要来自 3D引擎研发QQ群(38224573 )的各位朋友的讨论 ,我仅仅算做个总结吧,特别感谢各位朋友的热情支持。 ) 方法1:三个Perplane的方法 设AB,BC,AC边上的垂直平面为Perplane[3],垂直朝向内侧的法向为n[3] 1)先根据任意翻译 2012-02-14 19:22:36 · 6389 阅读 · 1 评论 -
数据挖掘K-平均值(K-means)程序C实现
k平均聚类发明于1956年, 该算法最常见的形式是采用被称为劳埃德算法(Lloyd algorithm)的迭代式改进探索法。劳埃德算法首先把输入点分成k个初始化分组,可以是随机的或者使用一些启发式数据。然后计算每组的中心点,根据中心点的位置把对象分到离它最近的中心,重新确定分组。继续重复不断地计算中心并重新分组,直到收敛,即对象不再改变分组(中心点位置不再改变)。 劳埃德算法和k平均通常是紧密原创 2011-12-01 21:26:22 · 7693 阅读 · 0 评论 -
用c语言产生随机数
在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的翻译 2011-10-02 20:34:17 · 5766 阅读 · 1 评论 -
自己动手编程 :双向气泡排序
#include#include#define Elem int typedef struct sqlist{ Elem key ; int data ; }sqlist ;void doublesort(sq翻译 2011-10-02 20:36:36 · 5042 阅读 · 0 评论 -
linux非阻塞式socket编程之select()用法
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个转载 2011-09-27 15:10:43 · 61551 阅读 · 8 评论 -
Linux Socket编程(不限Linux)
“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ翻译 2011-09-27 15:15:27 · 6418 阅读 · 0 评论 -
C++预处理
一、预处理的由来: 在C++的历史发展中,有很多的语言特征(特别是语言的晦涩之处)来自于C语言,预处理就是其中的一个。C++从C语言那里把C语言预处理器继承过来(C语言预处理器,被Bjarne博士简称为Cpp,不知道是不是C Program Preprocessor的简称)。 二、常见的预处理功能: 预处理器的主要作用就是把通过预处理的内建功能对一个资源进行等价替换,最翻译 2012-02-27 16:21:00 · 4955 阅读 · 1 评论 -
C语言解析lrc文件
本程序将歌词文件的时间和歌词分开来,并把 时间转换为微秒的单位。#include #include #include #include #define MAXLINE 256#define MAXBUF 256char *tmp;int chartoint(char ch){ return ch - '0';}int strtoint(char *str){//计算时间原创 2012-03-26 18:03:32 · 7355 阅读 · 2 评论 -
C语言解析多格式的lrc文件
昨天写了一个程序,只能解析简单的lrc文件,今天我有修改了一些源程序,现在可以解析很多格式的lrc文件,并弄好歌词的顺序/*** create by: w397090770* Email:wyphao.2007@163.com* create data: 2012.3.27**/ #include //for printf,fgets... #include //for e原创 2012-03-27 15:01:31 · 6586 阅读 · 3 评论 -
linux网络编程之:接受网络中的ARP数据并分析(附C语言实现)
ARP协议是“Address Resolution Protocol”的缩写,它的作用是将IP地址转换成物理地址(就是常说的MAC地址), 协议ARP的分组格式如下:------------------------------------------以太网目的地址(6个字节)以太网源地址(6个字节)帧类型(ARP = 0806)(2个字节)-------------------原创 2012-04-16 20:44:51 · 8289 阅读 · 1 评论 -
linux网络编程之 :ARP协议的报文格式[转]
结构ether_header定义了以太网帧首部;结构arphdr定义了其后的5个字段,其信息用于在任何类型的介质上传送ARP请求和回答;ether_arp结构除了包含arphdr结构外,还包含源主机和目的主机的地址。定义常#define EPT_IP 0x0800 /* type: IP */#define EPT_ARP 0x0806 /* type: ARP */#原创 2012-04-19 11:17:09 · 7458 阅读 · 0 评论 -
二叉树的建立、节点查找以及节点删除C和C++实现
程序是建立一颗二叉排序树,查找节点找到了返回其父节点,失败的时候返回NULL,删除节点分为四种情况:1、左子树和右子树都为空;2、左子树为空,右子树不为空;3、左子树不为空,右子树为空;4、左子树和右子树都不为空。C语言版本(利用结构体实现):#include #include typedef int DataType; typedef struct BTree{ DataT原创 2012-05-03 11:23:50 · 28101 阅读 · 4 评论 -
二叉树的链表表示法实现
本程序实际上是构建了一颗二叉排序树,程序最后输出构建数的中序遍历。代码实现:#include #include typedef int DataType; typedef struct BTree{ DataType data; struct BTree *Tleft; struct BTree *Tright; }*BTree;BTree CreateTree()原创 2012-05-02 16:41:01 · 5723 阅读 · 0 评论 -
树的中序非递归遍历和层次遍历实现
在树的中序遍历中需要用到栈,在层次遍历中需要用到队列,下面就是树的结构:代码实现:#include #include // TreeNode//////////////////////////////////////////////////////////////////////////typedef struct TreeNode{ char m_cVal;原创 2012-05-02 16:05:53 · 4556 阅读 · 0 评论 -
Short URL implement
Few months ago, I introduced a simple algorithmthat allow users to implement their own short URL into their system. Today,I have some spare time so I decided to write the short URL algorithm'simplem翻译 2012-04-27 13:55:27 · 7803 阅读 · 1 评论