常见递归&非递归实现
void my_strcpy(char *to,const char *from)
{
if('\0' == *from){
*to = '\0';
return ;
}
*to++ = *from++;
my_strcpy(to,from);
}
//只拷贝n个字符
void my_strncpy(char *to,const char* from,int n)
{
if( 0 == n || '\0' == *from){
*to = '\0';
return ;
}
*to++ = *from++;
my_strncpy(to,from,n-1);
}
//字符串比较
int my_strcmp(const char *src,const char *dest)
{
if((NULL == src || NULL == dest))
return err;
if('\0'==*src && '\0'== *dest)
return 0;
if(*src != *dest)
return ( ((*src - *dest)>0)? 1 : -1 );
my_strcmp(++src,++dest); }
//之比较n个字符
int my_strncmp(const char* src,const char *dest,int n)
{
if((NULL == src || NULL == dest))
return err;
if(0 == n)
return 0;
if(*src != *dest)
return ( ((*src-*dest)>0)? 1 : -1 );
my_strncmp(++src,++dest,--n);
}
//过滤掉重复的字符
void word_filter(char *src)
{
if(*src == '\0')
{
printf("\n");
return ;
}
int index = *src;
if(tmp[index] == 0){
tmp[index]++;
printf("%c",*src);
}
word_filter(++src);
} //字符包含问题(小写字符)
int str_include(const char *s1,const char *s2)
{
if(NULL == s1 || NULL == s2 )
return err;
enum ret no=n;
enum ret yes=y;
unsigned int bit_map = 0x0;
for( ; *s2 ; s2++)
bit_map |= 0x1 << (*s2 - 'a');
for( ; *s1 ; s1++)
if(bit_map != (bit_map |= (0x1<<(*s1 - 'a'))))
return no;
return yes;
}
//找数组中的最大值
int find_max_value(int *arr,int num)
{
if(1==num)
return arr[0];
int max = find_max_value(arr+1,num-1);
if(max<arr[0])
max=arr[0];
return max;
}
//字符串转置
void str_nizhi(char *str,int start,int end)
{
if(start>=end)
return ;
char ch=*(str+start);
*(str+start) = *(str+end);
*(str+end) = ch;
str_nizhi(str,start+1,end-1);
}
//利用循环求字符串的长度
int fun_strlen(const char *src)
{
int len=0;
for( ; *src++; len++);
return len;
} //递归实现字符串的长度统计
int ret_str_len(const char *src)
{
if(*src=='\0')
return 0;
return (ret_str_len(++src)+1);
}
//统计ch 中1的个数
int ch_tell(unsigned char ch)
{
if(ch)
{
if(ch&0x01)
return (ch_tell(ch>>1)+1);
else
return ch_tell(ch>>1);
}
else
return 0;
}
//如ch :0x00 到 0xff (0~255)中有多少偶数个1(00000000:0个1、00001001:2个1)的数
int fun_tell(void)
{
unsigned char ch = 0x0;
int sum = 0;
for( ; ; )
{
if(ch_tell(ch)%2 == 0)
sum++;
if(ch == 0xff)
break ;
ch = ch+1;
}
return sum;
}
//找数组中相同的值(数值不能大于数组的大小)
#if 1
int get_same_value1(int *arr,int len)
{
if(NULL == arr || len<=0)
return err;
int i=0, *new_array =(int *)malloc(sizeof(int)*len);
if(new_array == NULL)
return err;
//memset(new_array,-1,len);
for( ; i<len; i++)
new_array[i]=-1;
for( i=0 ; i<len ; i++)
{
if(new_array[arr[i]] == -1)
new_array[arr[i]] = arr[i];
else
return arr[i];
}
free(new_array);
return 0;
}
#endif int get_sum(int a, int b)
{
if(b == 0)
return a;
int aa = a^b;
int bb = (a&b)<<1;
return get_sum(aa,bb);
} void zhe_ban_insert_sort(int *arr,int len)
{
if(NULL == arr || len<=0)
return ;
int tmp = 0;
int i = 0,start=0,end=0,middle=0,j=0;
for(i=1 ; i<len ; i++)
{
tmp = arr[i];
start = 0;
end = i-1;
while(start<=end)
{
middle = (start+end)/2;
if(arr[middle]>arr[i])
end = middle-1;
else
start=middle+1;
}
for(j=i-1; j>=start; j--)
arr[j+1]=arr[j];
arr[start]=tmp;
}
}
static inline void get_size(void)
{
char str[] = "hello";
char *pt = str ;
char *ptr= NULL;
void *p = malloc(100);
int i =10;
printf("sizeof str is %d\nstrlen of str is %d\n",sizeof(str),fun_strlen(str));//6,5
printf("sizeof pt is %d\nstrlen of pt is %d\n",sizeof(pt),fun_strlen(pt));//4,5
printf("sizeof ptr is %d\n",sizeof(ptr));//4
printf("sizeof p is %d\n",sizeof(p));//4
printf("sizeof i is %d\n",sizeof(i));//4
return ;
}
void *str_str(const char *s1,const char *s2,int (*ncmp)(const char *,const char *,int))
{
if(NULL == s2 || s2 == NULL)
return NULL;
int len1 = ret_str_len(s1);
int len2 = ret_str_len(s2);
if(len1<len2)
return NULL;
int i = 0;
for( ; i<len1&&(len1-i>=len2) ; i++){
if(!ncmp(s1+i,s2,len2))
return s1+i;
}
return NULL;
}
常见递归&非递归实现的更多相关文章
- Reverse Linked List 递归非递归实现
单链表反转--递归非递归实现 Java接口: ListNode reverseList(ListNode head) 非递归的实现 有2种,参考 头结点插入法 就地反转 递归的实现 1) Divide ...
- 【数据结构】——搜索二叉树的插入,查找和删除(递归&非递归)
一.搜索二叉树的插入,查找,删除 简单说说搜索二叉树概念: 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右 ...
- 二叉树的先序、中序以及后序遍历(递归 && 非递归)
树节点定义: class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } 递归建立二 ...
- 二叉树——遍历篇(递归/非递归,C++)
二叉树--遍历篇 二叉树很多算法题都与其遍历相关,笔者经过大量学习.思考,整理总结写下二叉树的遍历篇,涵盖递归和非递归实现. 1.二叉树数据结构及访问函数 #include <stdio.h&g ...
- 树的广度优先遍历和深度优先遍历(递归非递归、Java实现)
在编程生活中,我们总会遇见树性结构,这几天刚好需要对树形结构操作,就记录下自己的操作方式以及过程.现在假设有一颗这样树,(是不是二叉树都没关系,原理都是一样的) 1.广度优先遍历 英文缩写为BFS即B ...
- java:合并两个排序的链表(递归+非递归)
//采用不带头结点的链表 非递归实现 public static ListNode merge(ListNode list1,ListNode list2){ if(list1==null) retu ...
- 全排列问题(递归&非递归&STL函数)
问题描述: 打印输出1-9的所有全排序列,或者打印输出a-d的全排列. 思路分析: 将每个元素放到余下n-1个元素组成的队列最前方,然后对剩余元素进行全排列,依次递归下去. 比如:1 2 3 为例首先 ...
- 二叉树的递归,非递归遍历(java)
import java.util.Stack; import java.util.HashMap; public class BinTree { private char date; private ...
- 二叉树的递归,非递归遍历(C++)
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易 ...
- 递归/非递归----python深度遍历二叉树(前序遍历,中序遍历,后序遍历)
递归代码:递归实现很简单 '二叉树结点类' class TreeNode: def __init__(self, x): self.val = x self.left = None self.righ ...
随机推荐
- c语言函数的嵌套使用和矩阵运算
这段时间,听刚刚学习c的同学说函数嵌套运用不太熟练,想做一个简单的程序进行练习,我也就当练练手了,哈哈.虽然说是比较简单,但是其中的思维也是值得思考的. 一.函数的嵌套使用 简单说明题目:对于等式 y ...
- [刘阳Java]_easyui-panel组件入门级_第3讲
EasyUI中的panel组件在前面一节中我们简单告诉了大家代码如何写.这一节我们会从panel的入门级开始讲起走,重点包括它的事件监听,属性tool介绍 1. 事件监听-通过data-options ...
- 【剑指offer】52. 两个链表的第一个公共节点
剑指 Offer 52. 两个链表的第一个公共节点 知识点:链表: 题目描述 输入两个链表,找出它们的第一个公共节点. 如下面的两个链表: 示例 示例1: 输入:intersectVal = 8, l ...
- infomation_schema基本使用
一.infomation_schema库 把 information_schema 看作是一个数据库,确切说是信息数据库.其中保存着关于MySQL服务器所维护的所有其他数据库的信息.如数据库名,数据库 ...
- 基于ifix组态软件研究控制按钮权限
背景: 在前阵子做基于ifix生成电力监控平台时,遇到业主提出的一个需求.关于如何在控制弹窗中,点击相应的合分闸按钮时,优先弹出登录界面,当输入相应的有权限用户名和密码后,才能操作这一要求.后实现如下 ...
- fastjson 1.2.24 反序列化导致任意命令执行漏洞
漏洞检测 区分 Fastjson 和 Jackson {"name":"S","age":21} 和 {"name":& ...
- leetcode最短无序连续子数组
平民解法: 既然是找最小数组,那就得到一个排序好的数组,然后直接和初试数组比对,用一个left,right分别记录从最初开始不同,到最后不同的小标,最后左右做差再加一,就能得到长度. 其他解法: 双指 ...
- 云服务器是什么?ECS、BCC、CVM...
什么是云服务器?云服务器有哪些优势?能用来干什么? 很多人不太了解云服务器的定义和用途. 云服务器是一种简单高效.处理能力可弹性伸缩的计算服务,帮助用户快速构建更稳定.安全的应用,提升运维效率,降低 ...
- SQL语句(三)分组函数和分组查询
目录 一.分组函数 特点 1. 各函数的简单使用 2. 搭配distinct的使用 3. COUNT 统计行数 4. 和分组函数一同查询的字段要求是group by后的字段 二.分组查询 1. 简单应 ...
- 洛谷P2504题解
题目 瓶颈生成树的裸题.可以查看这个来获取更多信息. 他问的是能够在所有树上自由穿梭的猴子个数,那我只需要算出这张图上最小生成树中权值最大的边,和每个猴子的最大跳跃长度进行比较即可. 因为我用的是 \ ...