
C与C++
文章平均质量分 62
复习
I_AM_KK
只看代码不说话
展开
-
二叉树递归遍历结点个数
这里先直接按照上一篇博客单链表的递归套路写下来。int count(BiTree root){ if (root == NULL){ return 0; } int l_count = conut (root->lchild); int r_count = count (root->rchild); return l_count + r_count + 1;}其实,单链表是“一叉树”,遍历的时候只有写一个递归句子就好了,二叉树相当于向左遍历一次,向右遍历一次。难想的是,为原创 2021-08-17 21:57:57 · 1237 阅读 · 0 评论 -
单链表 循环遍历和递归遍历 以及循 环求结点个数和递归求结点个数 的思考
我前面有很多文章一直说,递归和循环是一样的,可以相互转换。循环是一直重复某个语句,递归是一直调用自己。要想转化,递归就得好好想想自己的内部代码和循环执行的那句代码的关系(应当一样)。1.打印单链表非递归void printLnode (l* p){ while(p){ print(p); p = p->next; }}递归void printLnode (l* p){ print(p); printLnode (p->next);}内容上,打印的代码不变,循原创 2021-07-30 17:16:01 · 1001 阅读 · 0 评论 -
c++二叉排序树的非递归插入与递归插入,递归之间不同写法的思考
一、非递归非递归1:Node *bst_insert(Node *t, int key){ Node *p = t; while(p != NULL){ if(key = p->data){ return t; }else if(key < p->data){ p = p->lchild; }else { p = p->rchild; } } //执行到这里p为空 p = (Node *)malloc(sizeof(Node));原创 2020-12-26 15:55:15 · 639 阅读 · 3 评论 -
c++常用函数记录
sort排序三个参数a.size()求长度a.begain()第一个值a.end()最后一个值a.push_back参考原创 2020-12-26 14:28:11 · 250 阅读 · 0 评论 -
非递归与递归循环读取数字的每一位c语言
#include<stdio.h>int main(){ int a; int res; scanf("%d", &a); while(a > 0){ res = a % 10; printf("%d\n", res); a /= 10; } return 0;}改成递归#include<stdio.h>int f原创 2020-11-29 19:19:39 · 216 阅读 · 0 评论 -
C语言:求两数的最大公约数与最小公倍数
最大公约数我们知道辗转相除法是用来求最大公约数的,辗转相除法的代码演变可以看辗转相除法.这里的返回值就是n和m的最大公约数int gcd(int n, int m){ return m ? gcd(m, n%m) : n;}最小公倍数最小公倍数就是n*m去掉最大公约数int devgcd(int n, int m){ return n*m/gcd(n,m);}可运行版本:#include <stdio.h>int gcd(int n, int m){ .原创 2020-11-15 22:53:34 · 342 阅读 · 0 评论 -
c语言实现可变参数的使用
带有可变参数的函数int kkkkkkkk(int num, ...){}num 是可变参数的个数,… 是可变参数定义变量存可变参数int kkkkkkkk(int num, ...){ va_list v1; //int a;}类似于int a;va_list是重点初始化变参变量int kkkkkkkk(int num, ...){ va_list v1; //int a; va_start(v1, num); //a = 6;}类似于a = 6;**.原创 2020-10-28 13:52:38 · 259 阅读 · 0 评论 -
素数筛选,从O(n^2)到O(n),从暴力到线性筛,从小白到欧几里得
1暴力筛选素数从2开始:4 6 8 10 12 14 16 18 20 …都是合数从3开始:6 9 12 15 18 21 24 …都是合数从4开始:8 12 16 20 24 28 …都是合数……从2开始依次向后开始遍历(i),每次遍历过程中,都乘以2,乘以3,乘以4标记(这里写成每次都加上i,也就是相乘的意思)#include <stdio.h>#define MAX_N 100int prime[MAX_N + 5];void init(){ for(int原创 2020-10-07 19:23:15 · 305 阅读 · 0 评论 -
辗转相除法求最大公约数递归与非递归代码c++
非递归int gcd(int n, int m){ if(n<m) swap(n,m); while(m>0){ int t = n%m; n = m; m = t; } return n;}递归int gcd(int n, int m){ if(n>=m){ if(m==0) return n; int t = n%m; n = m; m = t; gcd(n,m); }else{ return gcd(m,n); }.原创 2020-09-07 01:10:21 · 1077 阅读 · 0 评论 -
并查集查找的递归与非递归代码c++
非递归int Find(int s[],int x){ while(s[x]>=0){ x=s[x]; } return x;}递归int Find(int s[],int x){ if(s[x]>=0){ x=s[x]; Find(s,x); } return x;}递归与非递归可以通过while循环转换。原创 2020-08-21 00:35:43 · 304 阅读 · 0 评论 -
c++把字符串形式数字转换为数字
字符串:“321”数字:321string s="321";int num=0;for(int i=0; i<s.size() ;i++){ //把单个字符变为数字 int x= s[i]-'0'; //每次都要进位,也就是*10 num = num*10 + x;}原创 2020-07-06 15:19:54 · 2555 阅读 · 0 评论 -
折半查找的非递归算法和递归算法C++
非递归//a[]是数组,n是数组长度,key是查找的关键字int BinSearch(int a[],int n,int key) { int l=0,r=n-1; int mid; while(l<=r){ mid=(1+r)/2; if(a[mid]==key) return mid; else if(a[mid]<key) l=mid+1; else r=mid-1; } return -1;}递归//函数头和非递归的不一样,是为了递归的时.原创 2020-07-06 11:06:50 · 1291 阅读 · 0 评论 -
C语言中scanf函数与空格回车
scanf()函数有返回值,且返回值是正确读取的个数scanf("%d%d", &x, &y);若是x,y都被正确读取了,则返回值是2;若只有x被正确读取了,则返回值是1;(不存在x没有被正确读取,但是y被正确读取的情况)若x,y都没有被读取,则返回值为0;若是遇到错误或者文件末尾,则返回-1,这个-1就是常见的E0F(end of file),他俩等价;scanf是从缓存区读取数据的每成功读取就会把缓存区的该数据删掉;若是需要读取但是缓存区还没有值,scanf..原创 2020-09-28 00:22:47 · 2436 阅读 · 2 评论