![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法练习
liukexiongjob2011
这个作者很懒,什么都没留下…
展开
-
一个线程池的最小实现
在消息中间件的实现中,为了提高客户端和服务器端通信的效率以及提高资源的利用率,利用线程池是必不可少的一环. 下面我们简单介绍下线程池的实现方式,线程池的实现主要由以下部分组成: 1.任务接口:要让线程去执行的代码段应该用任务接口定义好 2.任务队列:在任务队列中保存了所有将要执行的任务 3.工作线程:工作线程继承自Thread类或实现Run...2011-01-26 16:52:48 · 93 阅读 · 0 评论 -
从字符串中找出连续最长的数字串
/* * 写一个函数,它的原型是int continummax(char *outputstr,char *inputstr) * 功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长 * 数字串赋给其中一个函数参数outputstr所指内存.例如:"abcd12345ed125ss123456789" * 的首地址传给inputstr后,函数将返回9,outp...2011-01-01 13:58:09 · 114 阅读 · 0 评论 -
判断两个有序数组中是否存在相同的数字(要求时间复杂度为O(n))
/* * 判断两个有序数组中是否存在相同的数字(要求时间复杂度为O(n)) */#include<stdio.h>#include<stdlib.h>bool existthesame(int *a,int n1,int *b,int n2){ int i=0; int j=0; bool flag=false; while(i&...2011-01-01 11:50:54 · 546 阅读 · 0 评论 -
将给定的一个数字字符串转换成整数
/* * 请编写一个函数,该函数将给定的一个数字字符串转换成整数 */#include<stdio.h>#include<stdlib.h>//用来标识转换操作是否发生错误(true:发生了 false:没有发生)bool flag=false;int convert(const char *str){ const char *s...2011-01-01 11:29:14 · 658 阅读 · 0 评论 -
将一个整数转换为字符串
/* * 请编写一个函数,该函数将给定的一个整数转换为字符串 */#include<stdio.h>#include<stdlib.h>/* * 判断value>0或value<0或value=0 */char *convert(int value){ int a[20]; int loc=0; char *s...2011-01-01 10:54:08 · 440 阅读 · 0 评论 -
猴子吃桃问题
/* * 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 * 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 * 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少 */#include<stdio.h>#include<stdlib.h>int getsum...2010-12-31 14:01:34 · 72 阅读 · 0 评论 -
用c语言实现顺序队列(采用少用一个存储空间的方式解决假溢出问题)
/* * 用c语言实现顺序队列(采用少用一个存储空间的方式解决假溢出问题) */#include<stdio.h>#include<stdlib.h>#include<math.h>typedef struct queue{ //保存队列中的元素 int *a; //保存队列头部元素的索引 int front;...2010-12-31 12:32:34 · 1996 阅读 · 0 评论 -
用c语言实现顺序队列(采用计数器解决假溢出问题)
/* * 用c语言实现顺序队列(采用计数器解决假溢出问题) * 添加一个计数器 */#include<stdio.h>#include<stdlib.h>typedef struct queue{ //保存元素的数组 int *a; //保存队头元素的索引 int front; //保存队尾元素的索引 int ...原创 2010-12-31 11:51:02 · 230 阅读 · 0 评论 -
用c语言实现顺序队列(采用标志位解决假溢出问题)
/* * 用c语言实现顺序队列(采用标志位解决假溢出问题解决假溢出问题) * 添加一个标志位 *(采用的思路是增加一个标志位flag,当入队列的时候设置flag=1,出队列的时候设置flag=0,因为队列满只可能存在于入队列的时候,所以多加一个判断就可以了) */#include<stdio.h>#include<stdlib.h>#includ...2010-12-30 17:42:43 · 855 阅读 · 0 评论 -
比较两个字符串大小(带大小写的比较)
/* * 给出一个函数,原型为int compare(char *dest,char *src) * 要求比较两个字符串(由dest与src字符指针标识) * 1.如果两个字符串所含字母完全相同,则返回0 * 2.如果两字符串所含字母相同(不区分大小写,A与a也算相同),则返回1 * 3.否则返回2 */#include<stdio.h>#include...2011-01-01 14:20:58 · 790 阅读 · 0 评论 -
在父串中寻找子串首次出现的位置
/* * 在父串中寻找子串首次出现的位置(实现类似于java中的indexof()方法) * str1="cbcdabcf" * str2="bcf" */#include<stdio.h>#include<stdlib.h>#include<string.h>/* * str1:父串 * str2:子串 */...2011-01-01 15:30:43 · 1008 阅读 · 0 评论 -
寻找数组中第二大数
/* * 写一个函数找出一个整数数组中,第二大的数(microsoft) * 要求效率尽可能高 */#include<stdio.h>#include<stdlib.h>int find(int *a,int n){ int i=1; int second=*(a+i); while(i<n) { if(*(a+i...2011-01-01 20:02:42 · 136 阅读 · 0 评论 -
实现一个优先级队列
由于我的硕士毕业论文选题是关于中间件方面的,故在写论文过程中涉及到一些常见的数据结构,今天就实现一个基于优先级的队列. 下面是我的任务类:(其实应该定义为接口的,在这里只是为了方便) package com.liu.queue;public class Task { //任务的优先级 private int grade;...2011-01-26 14:07:49 · 246 阅读 · 0 评论 -
递归方式求数组中的最大值
/* * 递归方式求数组中的最大值 */#include<stdio.h>#include<stdlib.h>int getmax(int *a,int i,int n){ //特别注意递归的出口 if(i>=n)return *(a+i-1); int value=getmax(a,i+1,n); if(*(a+i)>...2011-01-03 14:38:29 · 216 阅读 · 0 评论 -
打印以下图形
/* * 打印以下图形: * 1 2 3 4 5 * 2 3 4 5 1 * 3 4 5 1 2 * 4 5 1 2 3 * 5 1 2 3 4 */#include<stdio.h>#include<stdlib.h>...2011-01-03 11:34:50 · 1021 阅读 · 0 评论 -
字符串原地压缩
/* * 字符串原地压缩 * 例如:"eeeeeaaaff"压缩为"e5a3f2" */#include<stdio.h>#include<stdlib.h>#include<string.h>char *change(char *str){ int count=0; char *s=str; //最坏情况下需要申...2011-01-03 11:09:20 · 93 阅读 · 0 评论 -
用两个栈实现队列
/* * 用两个栈实现队列 */#include<stdio.h>#include<stdlib.h>typedef struct stack{ //用来保存元素 int *a; //当前的下标 int loc; //栈中最多可以容纳的元素个数 int max;}st;/* * 初始化指定大小的栈 */...2011-01-02 14:10:15 · 58 阅读 · 0 评论 -
在字符串s中查找子串t最后一次出现的位置
/* * 设计一个算法,在字符串s中查找子串t最后一次出现的位置 */#include<stdio.h>#include<stdlib.h>#include<string.h>int lastindexof(char *s,char *t){ char *s1=s; char *t1=t; int n1=strlen(...2011-01-02 13:02:50 · 4938 阅读 · 0 评论 -
将一个浮点数转换为字符串(有bug,不知道什么原因)
/* * 将一个浮点数转换为字符串 * 例如:123.456转换为"123.456" */#include<stdio.h>#include<stdlib.h>char *convert(double d){ //代表浮点数d的整数部分 int d1=(int)d; //代表浮点数d的小数部分 double d2=d-d1;...2011-01-02 11:17:21 · 178 阅读 · 0 评论 -
最长平台问题
/* * 已知一个已经从小到大排列好的数组,说这个数组中的一个平台(Plateau) * 就是连续的一串相同的元素,并且这一串元素不能再延伸 * 例如,在1,2,2,3,3,3,4,5,5,6中1,2.2,3.3.3,4,5.5,6都是平台 * 编写程序把这个数组中最长的平台找出来 */#include<stdio.h>#include<stdlib....2011-01-01 21:03:16 · 124 阅读 · 0 评论 -
用c语言实现顺序队列(存在假溢出现象,即队列中有空间却无法插入)
/* * 用c语言实现顺序队列(存在假溢出现象,即队列中有空间却无法插入) */#include<stdio.h>#include<stdlib.h>typedef struct queue{ //用来保存元素的数组 int *a; //队头元素下标 int front; //队尾元素下标 int rear; //数组...原创 2010-12-30 15:03:35 · 508 阅读 · 0 评论 -
用c语言实现顺序堆栈
/* * 用c语言实现顺序堆栈 */#include<stdio.h>#include<stdlib.h>typedef struct stack{ //用来保存元素 int *a; //已经保存的元素个数 int index; //最多允许容纳的元素个数 int max;}st;/* * 初始化堆栈 ...2010-12-29 10:48:24 · 177 阅读 · 0 评论 -
用c语言实现动态数组(类似于java中的Arraylist)
/* * 用c语言实现动态数组(类似于java中的Arraylist) */#include<stdio.h>#include<stdlib.h>typedef struct str{ //保存元素的数组指针 int *a; //当前元素的个数 int index; //数组最多容纳的元素 int max;}st;...2010-12-28 23:16:42 · 279 阅读 · 0 评论 -
正整数的划分问题
/* * 正整数的划分问题 * 6 * 5+1 * 4+2=4+1+1 * 3+3=3+2+1=3+1+1+1 * 2+2+2=2+2+1+1=2+1+1+1+1 * 1+1+1+1+1+1 */#include<stdio.h>/* * 将正整数n分解为最大加数为m的组合 */int getDivideNum(int m,int n...2010-12-21 16:08:42 · 143 阅读 · 0 评论 -
买鸡问题
/* * 一只公鸡5块钱,一只母鸡3块钱,3只小鸡一块钱, * 一个农夫用100块钱买100只鸡(不许解方程),怎么实现? */#include<stdio.h>/* * n1:鸡的总数 * n2:钱的总数 */void divide(int n1,int n2){ int i,j; for(i=0;i<n2/5;i...2010-12-21 15:11:23 · 175 阅读 · 0 评论 -
费波那其数列(非递归)
/* * 费波那其数列,1,1,2,3,5……编写程序求第十项(非递归) */#include<stdio.h>int getValue(int n){ int n1=1; int n2=1; int result=0; if(n==1||n==2)result=1; else { for(int i=...2010-12-21 14:27:25 · 284 阅读 · 0 评论 -
费波纳奇数列(递归)
/* * 费波那其数列,1,1,2,3,5……编写程序求第十项。 */#include<stdio.h>/* * 递归解法 */int getValue(int n){ if(n==1||n==2)return 1; else return getValue(n-1)+getValue(n-2);}int main()...2010-12-21 14:20:12 · 483 阅读 · 0 评论 -
反转字符串(另解)
/* * 将"I am a programmer"输出成"remmargorp a ma I"。 * 注意:相邻两个单词的空格数一次是1个,2个,3个 */#include<stdio.h>#include<stdlib.h>#include<string.h>char *reverse(char *str){...2010-12-21 14:14:49 · 117 阅读 · 0 评论 -
去掉一个已经排好序的数组的重复数字
/* * 去掉一个已经排好序的数组的重复数字,尽量快 * 输入a={1,1,3,5,5,7,9} * 输出b={1,3,5,7,9} */#include<stdio.h>int delSameValues(int *a,int n){ int i; int j=0; for(i=0;i<n;i++) { ...2010-12-21 13:41:06 · 206 阅读 · 0 评论 -
按照最大值,最小值,次大值,次小值..的顺序排列数组
/* * 对int数组进行排序,使第1个是最大,第2个是最小的 * 第三个是次大的,第四个是次小的,以此类推 * 例如a={3,7,1,9,10,2,6,4,8,5} * 则输出结果为{10,1,9,2,8,3,7,4,6,5} */#include<stdio.h>/* * 采用类似于选择排序的算法 */ void ad...2010-12-20 16:23:45 · 963 阅读 · 1 评论 -
最大子序列之和,O(N)复杂度
/* * 有序列[5,0,2,-6,4],它的子序列可以有[5,0],[5,0,2][2,-6],[5,0,2,-6,4] * 但不能是[5,2],[5,-6]求最大的序列和,例子的最大序列是[5,0,2]=7 */ #include<stdio.h> int getMaxSubSum(int a[],int n) { int max...2010-12-20 15:48:22 · 92 阅读 · 0 评论 -
将字符串中的'*'移动到字符串开头`
/* * 编码完成下面的处理函数。 * 函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*' * 字符的先后顺序, * 函数返回串中字符'*'的数量。 * 如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。 * (要求使用尽量少的时间和辅助空间) */#include<stdio.h>...2010-12-21 16:48:33 · 405 阅读 · 0 评论 -
将字符串按照单词顺序颠倒(单词顺序保持不变)
/* * 将"I am a programmer"输出成"programmer a am I" * 注意:相邻两个单词的空格数一次是1个,2个,3个 */#include<stdio.h>#include<string.h>/* * 反转字符串 */void reverse(char *begin,char *end)...2010-12-22 09:52:49 · 429 阅读 · 0 评论 -
字符串比较大小的函数实现
/* * 字符串比较大小(类似于String的CompareTo()方法) */#include<stdio.h>#include<stdlib.h>int compare(const char *s1,const char *s2){ while(*s1!='\0'&&s2!='\0') { if(*s1==*s2...2010-12-22 10:31:50 · 2433 阅读 · 0 评论 -
约瑟夫问题(非常规解法,用数组模拟报数的过程)
/* * 作者:刘克雄(转载请说明出处:http://liukexiong.iteye.com/) * n个人围成一圈,1,2,3循环报数,报到3的人退出.到最后只余1人,输出最后留下的是第几号 */#include<stdio.h>#include<stdlib.h> /* * 用数组去模拟报数的过程 * n:数组中的元素个数 * ...2010-12-27 20:29:41 · 131 阅读 · 0 评论 -
打印如下图形
/* * 输出以下图形(注:printf输出特殊字符可能无法在屏幕显示) * 2 2 2 2 2 1 2 2 2 2 2 * 2 2 2 2 1 2 1 2 2 2 2 * 2 2 2 1 2 1 2 1 2 2 2 * 2 2 1 2 1 2 1 2 1 2 2 * 2 1 2 1 2 1 2 1 2 1 2 * 1 2 1 2 1 2 1 2 1 2...2010-12-27 19:21:37 · 529 阅读 · 0 评论 -
判断一个字符串是不是回文
/* * 判断一个字符串是不是回文 */#include<stdio.h>#include<stdlib.h>bool check(const char *str){ const char *begin=str; const char *end=str; while(*end!='\0')end++; en...2010-12-26 22:57:17 · 102 阅读 · 0 评论 -
不添加任何参数,将a,b值互相交换
/* * 有两个数int a,int b,中途不要添加任何参数,将a,b值互相交换 */#include<stdio.h>#include<stdlib.h>void swap(int *a,int *b){ *a=*a+*b; *b=*a-*b; *a=*a-*b;}int main(){ int...2010-12-26 22:46:49 · 287 阅读 · 0 评论 -
下台阶问题
/* * 有个楼梯,长度为length,有人下楼,一次走一步或者一次走两步,问有多少种方法,用具体的方法实现 */#include<stdio.h>#include<stdlib.h>int getcount(int length){ if(length==1)return 1; else if(length==2)return 2;...2010-12-26 22:36:00 · 144 阅读 · 0 评论 -
非递归计算1/1+1/2+1/3+...+1/100
/* * 非递归计算1/1+1/2+1/3+...+1/100的值 */#include<stdio.h>#include<stdlib.h>double getsum(int n){ double sum=0.0; for(int i=1;i<=n;i++) { sum+=1.0/i; } ...2010-12-26 22:24:48 · 450 阅读 · 0 评论