- 博客(32)
- 收藏
- 关注
原创 2021-08-26
安装opencv-python库安装opencv-python库安装opencv-python库curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.pypython get-pip.pypip install opencv_python==4.1.0.25
2021-08-26 15:43:48
142
原创 VMWare Ubuntu 共享文件夹失效解决办法
VMWare Ubuntu 共享文件夹失效解决办法Ubuntu 是 16.04sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other -o uid=1000
2021-08-04 10:09:52
538
原创 访问单个节点的删除
题目描述:实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。 给定待删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true思路:将待删除节点的下一个节点复制到待删除节点,然后删除此节点。图示:然后还要考虑指针的位置:如果指针为空或者指针指向了尾节点,则返回false代码如下:class Remove {public: bool removeNode(ListNode* pNode) { // write code here
2021-06-11 21:24:59
207
1
原创 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 NULL
我们使用两个指针,fast 与 slow。它们起始都位于链表的头部。随后,slow 指针每次向后移动一个位置,而 fast 指针向后移动两个位置。如果链表中存在环,则 fast 指针最终将再次与 slow 指针在环中相遇。如下图所示,设链表中环外部分的长度为 a。slow 指针进入环后,又走了 b 的距离与 fast 相遇。此时,fast 指针已经走完了环的 n 圈,因此它走过的总距离为 a+n(b+c)+b=a+(n+1)b+nc根据题意,任意时刻,fast 指针走过的距离都为slow 指针的 2
2021-05-25 09:45:04
305
原创 返回链表的中间结点
返回链表的中间结点给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。用快慢指针来写:Node* Fast;Node* Slow;先初始化,让Fast和Slow都指向第一个链表节点,然后让Fast每次移动两位,Slow每次移动一位,这样,Fast的路程就是Slow的两倍,当Fast到链表的末尾的时候,Slow也就到了链表的中间位置了。我们只需要返回Slow就可以了。结束的条件就是当Fast为NULL或者Fast->next为NULL。
2021-05-20 16:09:59
533
2
转载 文件操作
为什么使用文件我们在想既然是通讯录就应该把信息记录下来,只有我们自己选择删除数据的时候,数据才不复存在。这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。什么是文件磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。2.1 程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(.
2021-05-10 21:37:01
110
原创 一个宏将一个整数的二进制位的奇数位和偶数位交换
这里的奇数偶数进行交换是将他的二进制数进行的奇数偶数位进行交换,既然是对二进制进行交换了那大家自然也就想到了按位与按位或这种二进制操作。0x55555555是十六进制的:01010101010101010101010101010101。0xaaaaaaaa是十六进制的:10101010101010101010101010101010。所以开始先将n和0x55555555按位与,求出来n的所有奇数位置的数字,然后将求得的数左移一位,现在的数字就是将n的奇数位的所有内容放到了偶数位置.这时候只要求出来n
2021-05-09 18:58:31
470
原创 offsetof宏的实现,计算结构体中某变量相对于首地址的偏移
用一个宏定义offsetof求一个结构体struct里某个变量相对struc的编移量如:struct student{int a;char b;double c;}则:offsetof(student,a); //等于0offsetof(student,b);//等于4首先,ANSI C标准允许任何值为0的常量被强制转换成任何一种类型的指针,并且转换结果是一个NULL指针,所以我们的第一步(struc*)0,就是把0转换为一个struc类型的指针。&(((s*)0)->m
2021-05-09 18:44:54
299
转载 return 0和return 1和return -1的区别
1、返回值int 类型的函数返回:return语句用来结束循环,或返回一个函数的值。return 0:一般用在主函数结束时,按照程序开发的一般惯例,表示成功完成本函数。return -1::表示返回一个代数值,一般用在子函数结尾。按照程序开发的一般惯例,表示该函数失败;以上两个是约定俗成,系统提供的函数绝大部分定义为int类型返回值的都是这样的。返回值是返回给系统用的,给系统看得。一般做调试的时候也会用的,当出现错误的时候可以根据返回值来确定问题出在哪一个函数上的。再次提醒,注意此时返回的类型是i
2021-05-09 09:23:08
876
转载 #pragma once和#ifndef
#pragma once用法总结1.#pragma once这个宏有什么作用?为了避免同一个头文件被包含(include)多次,C/C++中有两种宏实现方式:一种是#ifndef方式;另一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别。但两者仍然有一些细微的区别。2.两者的使用方式有何区别?示例代码如下:方式一: #ifndef __SOMEFILE_H__#define __SOMEFILE_H__ ... ... // 声明、定义语句
2021-05-08 09:34:23
2267
原创 const char *、char const*、char *const三者的区别
一、const char *对于const char * s来说,const char * 是指向常量的指针,而不是指针本身为常量,可以不被初始化.该指针可以指向常量也可以指向变量,只是从该指针的角度而言,它所指向的是常量。* s是不变的,s是可以改变的,const限定的* s。s被一个解引用运算符修饰,故s是个普通的指针,可以修改,但是s所指向的数据(即*s)由于const的修饰而不可通过指针s去修改。即:指向数据的内容不可以修改。二、char *consts是个不可修改的指针(指向不可以修改),
2021-05-08 09:29:01
1869
转载 #define宏定义与typedef类型定义
typedef是定义了一种类型的新别名,不同于宏,它不是简单的字符串替换。比如:先定义:typedef char* PSTR;然后:int mystrcmp(const PSTR, const PSTR);const PSTR实际上相当于const char* 吗?不是的,它实际上相当于char* const。原因在于const给予了整个指针本身以常量性,也就是形成了常量指针char* const。简单来说,记住当const和typedef一起出现时,typedef不会是简单的字符串替换就行。
2021-05-08 09:14:24
364
原创 找出这两个只出现一次的数字
找单身狗一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。int a[] = { 1, 2, 3, 9, 6, 0, 1, 2, 3, 9 };#include<stdio.h>#include<string.h>#include <assert.h>void search(int a[], int num){ assert(a); assert(num > 0); int *x = (in
2021-04-25 21:10:03
141
原创 实现一个通讯录
实现一个通讯录通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1添加联系人信息2删除指定联系人信息3查找指定联系人信息4修改指定联系人信息5显示所有联系人信息6清空所有联系人7以名字排序所有联系人#define _CRT_SECURE_NO_WARNINGS#define MAX_PERSON 1000#include <stdio.h>#include <stdlib.h> #include <stri
2021-04-25 20:25:56
221
原创 模拟实现strstr
模拟实现strstr#include<stdio.h>#include<assert.h>//my_strstr char* my_strstr(const char *string, const char *strCharSet){ assert(string != NULL && strCharSet != NULL); const char *s = string; //主串 const char *t = strCharSet; //模
2021-04-25 20:09:56
84
原创 模拟实现memmove
模拟实现memmove#include<stdio.h>#include<assert.h>//my_memmovevoid * my_memmove(void* dest, const void*src, size_t num){ assert(dest); assert(src); if (dest<src) { //前->后 while (num--) { *(char *)dest = *(char *)src; dest
2021-04-25 20:08:04
107
原创 模拟实现memcpy
模拟实现memcpy#include<stdio.h>#include<assert.h>void *mymemcpy(void *str, const void *dst, size_t count) { void *ret = str; while (--count) { *(char*)str = *(char*)dst; str = (char*)str + 1; dst = (char*)dst + 1; } return ret;}i
2021-04-25 20:05:39
202
原创 模拟实现strcat
模拟实现strcat#include<stdio.h>#include<assert.h>//my_strcatchar* my_strcat(char* s, char* g)//实现字符串得追加{ assert(s&&g);//防止输入为空指针 while (*g != '\0')//先将空间大的数组走到'\0'处 { g++; } while (*s != '\0')//将空间小的数组追加到比较大的数组后面 { *g = *s;//
2021-04-25 20:02:24
74
原创 模拟实现strcmp
模拟实现strcmp#include<stdio.h>#include<assert.h>//模拟实现strcmpint Cmp(const char* arr1, const char* arr2){ int i = 0; int len = 0; size_t len1 = strlen(arr1); size_t len2 = strlen(arr2); //判断哪个字符串长,使用长的做for循环条件 if (len1 >= len2) { l
2021-04-25 19:59:59
116
原创 模拟实现strcpy
模拟实现strcpy//my strcpychar* my_strcpy(char*strdest, char*strsrc){ if (strdest == NULL || strsrc == NULL) { return NULL; } char *address = strdest; while ((*strdest++ = *strsrc++) != '\0'){} return address;}int main(){ char src[] = "abcdef";
2021-04-25 19:56:24
91
原创 模拟实现strlen
模拟实现strlen#include<stdio.h>#include<stdlib.h>#include<assert.h>int my_strlen(const char *p){ int count = 0; assert(p); while (*p != '\0') { count++; p++; } return count;}int main(){ const char arr[] = "abcdef"; int re
2021-04-25 19:54:22
58
原创 字符串循环左移k位
字符串左移k位实现一个函数,可以左旋字符串中的k个字符例如:ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDAB#include <stdio.h>#include <string.h>#include <stdlib.h>void spin(char *a, int n, int k){ char t[100] = { '\0' }; strcpy(t, a + k); strcpy(t + n - k, a); for (int
2021-04-19 14:17:56
302
原创 判断一个字符串是否为另外一个字符串旋转之后的字符串。
判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 =AABCD和s2 = BCDAA,返回1。给定s1=abcd和s2=ACBD,返回0。AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAAAABCD右旋一个字符得到DAABC#include <stdio.h>#include <string.h>#include <stdlib.h>int comper(char* a, char* b, int n){
2021-04-19 14:13:17
146
原创 用递归求解汉诺塔问题
public class Hanoi { public static void main(String[] args) { // TODO Auto-generated method stub hnt(3,"a","b","c"); } /*n为盘子的个数 第一个字符(a)为起始的柱子 第二个字符(b)为目标的柱子 第三个字符(c)为辅助的柱子*/ //把n个柱子以a为起始,以c为辅助,移到b static void hnt(int n,String
2021-04-17 09:47:24
141
原创 交换两数,不用辅助空间
交换两数,不用辅助空间用代码如何交换两个数,一般我们都会想到用第三个辅助的数(空间),比如:#include<stdio.h>int main(){int a=1;int b=10;int temp;printf("a=%d,b=%d\n", a, b);temp=a;a=b;b=temp;printf("a=%d,b=%d\n", a, b);return 0;}结果如下:但是如果我们要求不使用额外的辅助空间呢?我们可以想到加法,让temp的值为a+b
2021-04-17 09:45:44
218
原创 打印杨辉三角
打印杨辉三角杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。规律如下:1.每行端点与结尾的数为12.每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,
2021-04-17 09:38:46
118
原创 冒泡排序算法
冒泡排序算法它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。冒泡排序算法的运作如下:1、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。2、对每一对相邻元素作同样的工作,从开始第一对到结
2021-04-10 11:18:33
186
原创 用递归法求两个数的最大公约数
用递归法求两个数的最大公约数求两个数的最大公约数的思路是,用辗转现除法辗转相除法求两个数的最大公约数的步骤如下:先用小的一个数除大的一个数,得第一个余数;再用第一个余数除小的一个数,得第二个余数;又用第二个余数除第一个余数,得第三个余数;这样逐次用后一个数去除前一个余数,直到余数是0为止.那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数)。例如:求1515和600的最大公约数,第一次:用600除1515,商2余315;第二次:用315除600,商1余28
2021-03-29 21:30:28
10534
原创 出现k次与出现一次
数组中只有一个数出现了一次,其余的数都出现了k次,怎么找到这个数?例如:5,5,5,2,2,2,4,6,6,6我们要找到4这个数。我们第一时间想到的应该就是直接统计每个数的个数,然后输出个数为一的那个数,在这里我分享另外一个办法。我们先了解一个有趣的现象,在2进制中如果有两个一样的数做不进位的加法,结果是什么?例如:3+3转换为2进制就是0011+0011=0000(不需要进位)5+5=0101+0101=0000(不需要进位)也就是说2个一样的2进制数做不进位的加法等于0我们再来看10个一
2021-03-27 19:45:58
286
原创 统计一个二进制数中“1”的个数
统计一个二进制数中“1”的个数首先将一个10进制的数变成2进制的数输出,方便查看使用字符串的拼接来实现(只考虑在int范围内的数),代码如下:Scanner sc=new Scanner(System.in); int num=sc.nextInt(); int n=num;//复制一个备用String str=""; while(num!=0) { str = num%2+str; num = num/2; }System.out.println(str);
2021-03-27 16:18:26
201
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人