![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 64
小一!
小小程序员
展开
-
深入理解红黑树
红黑树目录红黑树的概念红黑树的性质红黑树的插入操作红黑树的验证红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。红黑树的性质每个结点不是红色就是黑色根节点是黑色的如果一个节点是红色的,则它的两个孩子结点是黑色的(红色不连续)。对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点(每一条原创 2021-11-20 19:45:27 · 229 阅读 · 2 评论 -
奇思妙想 “位运算“
奇思妙想 "位运算"目录不用加减乘除做加法查找输入整数二进制中1的个数不用加减乘除做加法题目链接写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。数据范围:两个数都满足 0≤n≤1000进阶:空间复杂度 O(1),时间复杂度 O(1)class Solution {public: int Add(int num1,int num2) { while( num2 != 0 ){ int sum = num1 ^ num2; //得到相加后不原创 2021-11-13 00:25:44 · 625 阅读 · 1 评论 -
如何判断链表是否有环,确定环的起点
如何判断链表是否有环,确定环的起点目录判断链表是否有环如何找到环的入口判断链表是否有环使用快慢指针确定链表是否有环快指针(fast) 慢指针(slow)思路:让快指针和慢指针从链表的起点同时走,快指针每次走两步,慢指针每次走一步,如果链表没有环,则快指针率先走出链表(走到NULL),慢指针也最终走出链表。如果链表有环,则慢指针和快指针最终会在环内相遇。当去面试时?面试官会有如下提问?1、为什么slow指针走一步,fast指针走两步,他们一定会在环里相遇,会不会永远追不上?请证明。2、原创 2021-04-14 15:07:51 · 905 阅读 · 2 评论 -
C语言实现不带头单链表的增、删、查、改
C语言实现不带头单链表的增、删、查、改目录什么是链表不带头单链表的增、删、查、改完整代码实现什么是链表概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:单向、双向带头、不带头循环、非循环这里介绍一种OJ题常考的,不带头节点的单向非循环链表。无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。另外这种结原创 2021-04-13 20:15:00 · 367 阅读 · 0 评论 -
C语言实现顺序表详解
C语言实现顺序表详解目录什么是顺序表顺序表的,增、删、查、改完整代码实现什么是顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表的,增、删、查、改一、增增加的方式有两种,在顺序表的头部增加,和尾部增加,分别为头插和尾插。插入数据之前,要确认一下顺序表是否有足够空间,若是没有空间,则需要先扩容,再进行插入。判断是否有剩余空间的方法是:有效数据的个数是否和空间的容量相等。即size=capacity,若相等则没有空间,原创 2021-04-05 17:33:57 · 391 阅读 · 0 评论 -
小白可以看懂的C代码通讯录
小白可以看懂的C代码通讯录目录显示通讯录标题目录增、删、查、改、排序联系人信息逐一分析各项功能代码演示成果显示通讯录标题目录增、删、查、改、排序联系人信息逐一分析各项功能代码演示成果具体要求描述写一个通讯录,里面存放个人信息名字年龄性别电话地址主要功能:1.增加一个人的信息2.删除一个指定联系人3.查找一个指定联系人4.修改一个指定联系人5.显示通讯录中所有人信息6.排序0.退出可以将每个人的信息保存到文件中,不至于丢失下面将每个功能模块进行封装,逐一详细讲解1原创 2021-03-18 15:27:56 · 398 阅读 · 1 评论 -
青蛙跳台阶问题(C语言)
青蛙跳台阶问题 用c语言实现题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目分析分析思路:青蛙对每级台阶可选择过或者不过换个角度来看,题目的问题等价于,青蛙现在在起点n=0处。目标是n=n处。那么经过序号1,2,3…n-1层台阶。对于每一层台阶,都可以随意选择通过,或者不通过。数学归纳法证明下面是严格的数学归纳法证明:我们设青蛙需要跳上的台阶级数为n,f(n)代表一个青蛙跳上n级台阶的跳法数目。类似于之前的普通青蛙跳原创 2021-03-17 16:03:34 · 1072 阅读 · 0 评论 -
求最小公倍数的三种方法(C语言)
求最小公倍数的三种方法1.常规暴力求解法2.辗转相除法3.迭乘法1.//1.常规暴力求解法 #include <stdio.h> int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); int max = a > b ? a : b; while (max % a != 0 || max % b != 0) { max++; } printf("%d", max); return原创 2021-03-08 10:34:42 · 45153 阅读 · 7 评论 -
什么是结构体内存对齐,有什么好处
什么是结构体内存对齐,有什么好处下面先看一个例子:#include<stdio.h>int main(){ struct S1 { char c1; int i; char c2; }; struct S2 { char c1; char c2; int i; }; printf("%d\n", sizeof(struct S1)); printf("%d\n", sizeof(struct S2)); return 0;}由运行结果可知原创 2021-03-07 20:53:18 · 1391 阅读 · 0 评论 -
C语言标准库函数模拟实现之memcpy()
C语言库函数模拟实现之memcpy()memcpy是内存拷贝函数,之前学过字符串拷贝函数strcpy,只能拷贝字符串,不能对内存进行拷贝memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝count个字节到目标dest所指的内存地址的起始位置中。是以字节为单位拷贝的。#include<stdio.h>#include<assert.h>#include<string.h>char* my_memcpy(void* dest, const vo原创 2021-02-26 14:24:23 · 410 阅读 · 0 评论 -
C语言标准库函数模拟实现之--strcmp
C语言标准库函数strcmpstrcmp(str1,str2)是用来比较两个字符串的,设这两个字符串为str1,str2,若str1=str2,则返回零;若str1< str2,则返回负数;若str1>str2,则返回正数。例如:abcd>abcc。思路:把两个字符串一个一个进行比较,当两个字符串不一样时,直接减,当两个字符串相等时,直接输出0。#include <stdio.h>#include <assert.h>int my_strcmp(cons原创 2021-02-26 11:57:21 · 729 阅读 · 0 评论 -
C语言模拟实现标准库函数之strcpy()
C语言模拟实现库函数之strcpy()strcpy是一种C语言的标准库函数,用来字符串的拷贝,strcpy把从源src地址开始且含有’\0’结束符的字符串复制到以目的dest开始的地址空间,并以’\0’结束,返回值的类型为char*。拷贝时,不会改变源空间里的内容,所以用const修饰,比较严谨。代码:#include <stdio.h>#include <assert.h>char* my_strcpy(char* dest, const char* src){原创 2021-02-26 11:17:07 · 317 阅读 · 0 评论 -
C语言实现猜数字游戏
目录前言一、猜数字游戏内容:方法:代码实现:二、生成随机数的方法总结前言C生万物,想要学好编程,就要多敲代码。对于C中小白来说,学习了控制语句之后(顺序、选择和循环),写一个小游戏来练手还是很有必要的。一、猜数字游戏内容:顾名思义,猜数字游戏就是让系统随机生成一个数字,由玩家来猜,之后系统反馈信息,猜大了还是猜小了,逐一减少默认数字的范围之后,最终锁定目标。方法:1、生成游戏菜单 1. play(进入游戏) 0. exit (退出游戏)2、使用循环语句,构建游戏框架,使原创 2021-01-29 09:56:44 · 25642 阅读 · 5 评论 -
手把手教你实现C语言三子棋
目录一、三子棋游戏介绍二、c语言实现三子棋三、演示游戏流程四、完整c代码一三子棋游戏介绍:三子棋是一种民间传统游戏,又叫九宫棋、井字棋、一条龙等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。先手:正中间,对面如果走边中间位置,就落子在紧贴对方棋子的角位置。对方必定堵你,然后你就落子在刚才自己角位置棋子的旁边(边中间位置),必赢。如果对方也会玩,就会先落子在角位置,基本最后就是和棋。后手:对方中间,你就角位置,然后堵对方就行。只要对方不原创 2021-01-26 13:46:48 · 359 阅读 · 0 评论 -
统计一个数中二进制里1的个数
#define _CRT_SECURE_NO_WARNINGS// 统计一个数中二进制里1的个数//注意:求的是补码。#include <stdio.h>int count_bit_one(unsigned int n)//用unsigned int 接收是因为可能输入负数{//可以用模2除2的方法,得到每一位int count = 0;while (n){ if (n % 2 == 1) { count++; } n = n /原创 2020-12-07 09:22:58 · 393 阅读 · 1 评论 -
杨氏矩阵
// 杨氏矩阵//内容:有一个数字矩阵,矩阵的每行从左到右都是递增的,矩阵从上到下都是递增的//请编写程序在这样的矩阵中,查找某个数字是否存在//要求:时间复杂度小于O(N)#include <stdio.h>int FindNum(int arr[3][3], int k, int *px, int *py){int x = 0; //第0行,最后一列int y = *py - 1; //即是一行中的最大数,又是一列中的最小数while (x.原创 2020-12-03 09:10:02 · 145 阅读 · 0 评论 -
实现两个数组的交换
对两个数组内容进行交换#include<stdio.h>void Print(int arr[], int sz){int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");}int main(){int arr1[] = { 1,3,5,7,9 };int arr2[] = { 2,4,6,8,0 };int tem = 0;int i = 0;int sz = si原创 2020-12-02 09:02:02 · 1297 阅读 · 0 评论 -
实现数组的逆序
对数组实现逆序方法一:#include <stdio.h>void Init(int arr[], int sz){int i = 0;for (i = 0; i < sz; i++){arr[i] = 0;}}void Print(int arr[], int sz){int i = 0;for (i = 0; i < sz; i++){printf("%d “, arr[i]);}printf(”\n");}void Reverse(int原创 2020-12-02 08:52:57 · 4471 阅读 · 0 评论 -
找到1000-2000年之间的闰年
找到1000-2000年之间的闰年方法一:函数法#include <stdio.h>int is_leap_year(int y){if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)){return 1;}elsereturn 0;}int main(){int year = 0;int count = 0;for (year = 1000; year <= 2000; year++){/原创 2020-11-30 20:39:44 · 235 阅读 · 0 评论 -
求S=a+aa+aaa+aaaa+...的和
求S=a+aa+aaa+aaaa+…的和#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){int a = 0;int n = 0;scanf("%d%d", &a, &n);//2,5int sum = 0;int i = 0;int ret = 0;//2 22 222 2222 22222for (i = 0; i < n; i++){ret = ret * 10 + a;原创 2020-11-30 20:35:15 · 138 阅读 · 0 评论 -
求水仙花数(C语言)
求100000以内的水仙花数**什么是水仙花数:**水仙花数也被称为超完全数字不变数、自恋数、自幂数、水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。#include <stdio.h>int main(){int i = 0;for (i = 0; i <= 100000; i++){//判断i是否为水仙花数(字幂数)//1.计算i的位数-n位数int n = 1;int tmp = i;i原创 2020-11-30 20:33:07 · 756 阅读 · 0 评论 -
智力开发(赛马问题)
赛马问题有36匹马,6个跑道,没有计时器,请赛马确定,36匹马中的前三名。请问最少比赛几次:答:先分成六队进行比赛,求出六个第一名,然后六个第一名再进行比赛,求出前三名,这样就比赛了7次。假设第一名在一队,第二名在二队,第三名在三队,这样四,五,六队的马将不再前三名内,三队最厉害的马也才排在第三名,所以三队后面的马不在总的前三名内,可以忽略,同理,二队的前两名可以参加最终前三名的竞争,一队的前三名有资格参加最终的比赛,所以最终,一队的前三名,二队的前两名,三队的第一名,可以进行比赛。共比赛8次原创 2020-11-26 19:29:02 · 296 阅读 · 0 评论