自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Juli yi~的博客

一名努力学习编程,乐于分享的学生

  • 博客(32)
  • 收藏
  • 关注

原创 反转链表(图解,易懂)

题目要求:题目链接:点击这里,直接跳转思路:方法1:头插法将链表每个节点依次取下来头插到新链表,即为原链表的反转;因为改变了当前节点的 next 指向,必须先保存 next 地址。图解如下:重复以上步骤:直到终止循环实现代码:struct ListNode* reverseList(struct ListNode* head){ //新链表的头指针 struct ListNode* newhead = NULL; //需要头插的结点 struct Li

2020-12-19 11:49:06 24084 10

原创 2020-9-10 C语言实现扫雷

扫雷大家应该都玩过。接下来介绍一下C语言设计扫雷小游戏。所实现的功能是随机分布雷,玩家输入坐标,可显示该位置周围都多少雷涉及知识:一定的编程逻辑数组-二维数组函数设计循环效果图图中有0和1的是给设计者看的雷分布情况。全是‘ * ’的棋盘是给玩家扫雷的。那我们就需要用二维数组来打印两个棋盘,假如我们要打印9 * 9的棋盘,二维数组元素也要为9 * 9吗?,不能,因为我们在设计算法时需要统计坐标周围8个方位雷的个数,假如要统计边界坐标周围雷的个数,那么就会有数组越界的问题,那我们就要在9 *

2020-09-10 18:10:39 308

原创 #8-30(C语言实现--三子棋)

实现三子棋游戏主要是运用二维数组知识,我们分文件编写代码。三子棋和五子棋的实现是类似的。下边主要介绍三子棋一个头文件两个源文件game.h //包括函数声明,宏定义game.c //三子棋游戏所需函数的具体实现test.c //负责测试代码实现步骤:1 将棋盘初始化为空格2 打印棋盘(包括分割线)3 玩家输入坐标选择落棋位置4 产生随即坐标作为电脑输入1 将棋盘初始化为空格void Initboard(

2020-08-30 11:48:03 188

原创 函数模板和类模板

模板:函数模板,类模板函数模板: 代表了一个函数家族,与类型无关,在使用时被参数化,根据 实参类型 产生特定函数类型版本。函数模板格式:template<class T>T add(T a, T b){ return a + b;}int main(){ //编译器根据传入的实参类型推演生成对应类型的函数 int x = 1; int y = 2; double d1 = 1.1; double d2 = 2.2; cout << add(x, y

2021-03-24 21:04:38 130

原创 冯诺依曼体系结构以及操作系统

冯诺依曼体系结构图介绍每个部分:输入设备:键盘,鼠标,扫描仪,写字板,摄像头,麦克风,网卡,硬盘等。输出设备:显示器,打印机,声卡,喇叭,网卡,硬盘等。内存:掉电易失性存储介质,相对于硬盘等,存储速度较快。其中:所有设备只与内存(指存储器)打交道。CPU只能通过内存进行读写,不能直接访问外设(输入输出设备);外设要输入输出数据,也只能写入内存或者从内存中读取。存储器金字塔层次结构现代计算机的存储设备一般有 Cache、内存、HDD(SSD) 硬盘。这些存储设备越靠近 CPU 速度越

2021-03-12 19:04:38 479

原创 力扣打印日期和日期差值

打印日期#include<iostream>using namespace std;int main(){ int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int year; int days; int month; while(cin>>year>>days) { int month=1; if((year%4==0 &amp

2021-03-10 21:13:40 171

原创 编译过程详解及Linux调试(gdb)

C/C++编译过程分为了以下几部分预处理:头文件展开 去注释 宏替换 条件编译gcc -E hello.c -o hello.i编译(生成汇编):将C代码翻译为汇编代码gcc -S hello.i -o hello.s汇编:生成机器识别的二进制代码gcc -c hello.s -o hello.o链接:生成可执行文件或库文件gcc hello.o -o hello文件库分为静态库和动态库。gcc默认是动态链接的。可以用file命令来验证Linux调试器-gdbL

2021-03-10 21:07:53 291

原创 初始化列表与static的类成员

初始化列表构造函数给类的对象初始化时有两种方式://构造函数 函数体内初始化成员变量 Date(int year = 1999, int month =1, int day =1) { year = _year; month = _month; day = _day; }//构造函数 初始化列表初始化成员变量 Date(int year = 1999, int month = 1, int day = 1) :_year(year) , _mo

2021-03-10 20:03:13 367

原创 彻底理解Linux权限

了解一些概念:Linux下有两种用户:root(超级用户) user普通用户超级用户:可以在Linux下做任何事情,不受限制普通用户:在Linux下做有限的事情用户切换命令 su [用户名]例:从root切换为普通用户:su user普通用户user切换为root:su (root) # root可以省略Linux中的三种权限:文件和目录的所有者:u --User'文件和目录的所属组:g --Group'其他用户:o --Others例:文件基本

2021-03-07 21:19:50 201

原创 彻底搞懂隐式类型转换

《C++ Primer》中提到:“可以用 单个形参来调用 的构造函数定义了从 形参类型 到 该类类型 的一个隐式转换。”注意, “可以用单个形参进行调用” 并不是指构造函数只能有一个形参,而是它可以有多个形参,但那些形参都是有默认实参的。那么,什么是“隐式转换”呢? 从 构造函数形参类型 到 该类类型 的一个编译器的自动转换。通过下面代码来看一看:#include <string>#include <iostream>using namespace std;clas

2021-03-06 19:33:42 1609

原创 关于命名空间,内联函数,引用和函数重载

命名空间:避免命名冲突或名字污染。需要使用到的关键字是namespace。命名空间是定义一个新的作用域命名空间使用(三种方式):#include<iostream>//使用关键字namespace定义 命名空间Nnamespace N{ //a b c为命名空间成员 int a = 1; int b = 2; int Add(int a, int b) { return a + b; }}//2 使用using将命名空间中成员引入using N::b;

2021-02-02 22:13:03 177

原创 排序

常见的排序算法一:插入排序直接插入排序:[0,end]有序,将end+1 插入到区间[0,end],保持有序。举例如图所示:数组为 [ 3,4,2,1,6,0,9,5 ]实现代码:// 插入排序void InsertSort(int* a, int n){ for (int i = 0; i < n - 1;i++) { //将end+1 往有序区间[0,end]中插入,使其保持有序 int end = i; int insert = a[end + 1]; wh

2021-02-02 17:26:56 94

原创 二叉树的四种遍历 前中后序+层序(附代码)

二叉树前序遍历:先访问根节点,接着访问左子树,最后是右子树二叉树中序遍历:先访问左子树,接着访问根节点,最后是右子树二叉树后序遍历:先访问左子树,接着访问右子树,最后是根节点如图所示:以前序遍历为例,进行画图。中序遍历,后序遍历同理实现代码:// 二叉树前序遍历 void BTPrevOrder(BTNode* root){ if (root == NULL) return; printf("%c ", root->_data); BTPrevOrder(root-&gt

2021-02-01 17:13:36 485

原创 力扣 - 622. 设计循环队列

题目要求:题目链接解题思路:任何数据结构中都不存在环形结构,但是可以使用一维 数组 模拟,通过操作数组的索引构建一个 虚拟 的环。很多复杂数据结构都可以通过数组实现。对于一个固定大小的数组,任何位置都可以是队首为了区分数组的空和满,需要 开辟的数组长度 要比 存放元素个数多一个。判空:return obj->_rear == obj->_front;判满:return obj->_front == (obj->_rear+1)%(obj->_k+1);如图所示:

2021-01-11 22:35:14 183

原创 leetcode138 — 复制带随机指针的链表

题目:题目链接思路:1. 遍历原来的链表并拷贝每一个节点,将拷贝节点放在原来节点的下一个,创造出一个旧节点和新节点交错的链表。2. 迭代这个新旧节点交错的链表,并用旧节点的 random 指针去更新对应新节点的 random 指针。3. random 指针已经被赋值给正确的节点, next 指针也需要被正确赋值,以便将新的节点正确链接同时将旧节点重新正确链接。图示如下://如果cur->random不为空,则copyNode->random 为 cur->random-&

2021-01-01 11:46:47 73 2

原创 牛客(删除链表中重复节点)

题目要求:题目链接方法:直接删除法在遍历单链表的时候,检查当前节点与下一点是否为相同值,如果相同,继续查找相同值的最大长度,然后指针改变指向。图示:实现代码:class Solution {public: ListNode* deleteDuplication(ListNode* pHead){ //链表为空链表或者只有一个结点,直接返回头节点 if(pHead==NULL || pHead->next==NULL)

2021-01-01 10:41:21 190 1

原创 环形链表

环形链表题目要求:题目链接思路: 假想「乌龟」和「兔子」在链表上移动,「兔子」跑得快,「乌龟」跑得慢。当「乌龟」和「兔子」从链表上的同一个节点开始移动时,如果该链表中没有环,那么「兔子」将一直处于「乌龟」的前方;如果该链表中有环,那么「兔子」会先于「乌龟」进入环,并且一直在环内移动。等到「乌龟」进入环时,由于「兔子」的速度快,它一定会在某个时刻与乌龟相遇,即套了「乌龟」若干圈。我们可以根据上述思路来解决本题。具体地,我们定义两个指针,一快一满。慢指针每次只移动一步,而快指针每次移动两步。初始时,

2020-12-25 18:05:41 121 1

原创 字符串的左旋右旋问题(C语言实现,三种方法求解)

字符串左旋右旋问题其实是同理的,下边以左旋为例:方法一思路:左旋一次就是将整个字符串向左移一个字符,第一个字符(arr[0])移动到最右侧。这样循环操作左旋次数就是最终左旋结果,如上图所示。实现代码:void LeftRotate1(char *arr,int count){ assert(arr); int len = strlen(arr); //左旋count次 while (count--) { //从前往后移动之前先保存arr[0] char temp = arr[0

2020-12-20 12:38:48 441 2

原创 求最大公约数(C语言实现)

求最大公约数有多种方法,接下来我对辗转相除法、更相减损法分别做介绍。辗转相除法: gcd(a,b) = gcd(b,a mod b)。假如,需要求 1997 和 615 两个正整数的最大公约数,用辗转相除法,是这样进行的:1997 / 615 = 3 (余 152)615 / 152 = 4(余7)152 / 7 = 21(余5)7 / 5 = 1 (余2)5 / 2 = 2 (余1)2 / 1 = 2 (余0)至此,最大公约数为1以除数和余数反复做除法运算,当余数为 0 时,取当前算式

2020-12-17 20:35:48 31783 4

原创 获取一个整数二进制序列中所有的偶数位和奇数位

思路:我们要分别获得一个二进制序列的奇数偶数位,需要运用位操作运算符我们知道,任何数与1 & 等于原来的任何数(0 & 1 = 0, 1 & 1=1),基于此,我们还需要知道位运算符的左移 (<<) 右移(>>)举例:如图所示接下来,代码实现#include<stdio.h>int main(){ int num = 13; //int占4个字节,32个bit位,i:0-31 int i = 31; printf("%d二进

2020-12-17 18:13:54 480

原创 详解-移除链表元素

移除链表元素要求如下:leetcode链接请点击这里方法:哨兵节点如果删除的节点是中间的节点,则问题似乎非常简单:选择要删除节点的前一个结点 prev。将 prev 的 next 设置为要删除结点的 next。当要删除的一个或多个节点位于链表的头部时,事情会变得复杂。可以通过哨兵节点去解决它,哨兵节点广泛应用于树和链表中,如伪头、伪尾、标记等,它们是纯功能的,通常不保存任何数据,其主要目的是使链表标准化,如使链表永不为空、永不无头、简化插入和删除。在这里哨兵节点将被用于伪头。算

2020-12-16 20:13:56 221 1

原创 对链表进行插入排序(图解)

图解 对链表进行插入排序该题目力扣链接点击这里从前往后找插入点插入排序的基本思想是,维护一个有序序列,初始时有序序列只有一个元素,每次将一个新的元素插入到有序序列中,将有序序列的长度增加 1,直到全部元素都加入到有序序列中。如果是 数组 的插入排序,则数组的前面部分是有序序列,每次找到有序序列后面的第一个元素(待插入元素)的插入位置,将有序序列中的插入位置后面的元素都往后移动一位,然后将待插入元素置于插入位置。对于 链表 而言,插入元素时只要更新相邻节点的指针即可,不需要像数组一样将插入位置后

2020-12-16 17:00:35 9213 9

原创 找单身狗(C实现)

题目要求:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字。这道题目主要是考察位运算符的应用我们应该知道:相同的两个数字 异或 结果为 0任何数 按位与 1,可以判断最低位是 0 还是 1整体思路:数组所有数字进行 异或 求和,该 异或 求和 结果就是两个只出现一次的数字 异或 结果。我们根据 异或 求和 结果找到 从低位到高位 首次出现 1 的位置 。根据该位置,将两个数字分成两组数字(该位置为 0,该位置为 1),这样他们所在

2020-11-22 20:06:23 473 3

原创 小乐乐和子串问题

在庆祝祖国母亲70华诞之际,老师给小乐乐出了一个问题。大家都知道China的英文缩写是CHN,那么给你一个字符串s,你需要做的是统计s中子串“CHN”的个数。子串的定义:存在任意下标a < b < c,那么“s[a]s[b]s[c]”就构成s的一个子串。如“ABC”的子串有“A”、“B”、“C”、“AB”、“AC”、“BC”、“ABC”。输入描述:输入只包含大写字母的字符串s。(1 ≤ length ≤ 8000)输出描述:输出一个整数,为字符串s中字串“CHN”的数量。示例1

2020-11-22 17:22:08 205 2

原创 (C语言)指针

大家对于指针并不陌生,具有一定编程基础的都知道指针的概念:指针是个变量,用来存放地址,地址唯一标识一块内存空间指针大小是固定的4/8个字节(32位平台/64位平台)指针是有类型的,指针的类型决定了指针+ - 整数的步长,指针解引用时候的权限指针的运算接下来我们讨论一下指针类型:字符指针,数组指针以及数组传参,函数指针字符指针字符指针 char *常见的两种使用方式:存放一个字符的地址int main(){ char c = 'a'; char *cp = &c;

2020-11-15 15:58:31 96

原创 文件操作(C语言)

C语言中的文件操作在我们介绍文件操作之前需要理解的知识点包括:文件类型、数据流、缓冲区、文件存取方式什么是文件磁盘上的文件是文件,但在程序设计中,我们谈到的文件分为程序文件和数据文件程序文件:包括源程序文件(后缀为.c),目标文件(Windows环境后缀为.obj),可执行文件(Windows环境后缀为.exe)数据文件:文件内容不一定是程序,而是程序运行时读写的数据。文件类型数据在内存中以二进制形式进行存储,如果不加转换输出到外存,就是二进制文件。如果在外存中需要以

2020-11-14 16:35:40 627

原创 2020-11-03

自定义类型:结构体,枚举,联合结构体结构体声明struct tag{ member_list;}variable_list;例如:定义一个学生结构体struct Stu{ char name[20]; //姓名 int age; //年龄 char sex[5]; //性别 char id[20]; //学号};结构体内存对齐计算结构体大小,对齐规则:第一个成员在与结构体变量偏移量为0的地址处其他变量成员要对齐到对齐数的整数

2020-11-03 16:13:17 128

原创 2020/10/26(字符函数和字符串函数的讲解以及实现)

字符函数和字符串函数C语言对字符和字符串的处理还是很频繁的。字符串可以存放在字符串常量中,也可以存放在字符数组中。我们应该掌握有关字符函数和字符串函数的使用。下边介绍一些常用的字符串的库函数及使用求字符串长度 strlen长度不受限制的字符串函数 strcpy strcat strcmp字符串查找 strstr内存操作函数 memcpy memmovestrlensize_t strlen(const char* str);该函数

2020-10-26 21:29:04 92

原创 2020/10/4剖析数据在内存中的存储

数据类型分为:内置类型 自定义类型一 常见的内置类型:char //字符数据类型short //短整形int //整形long //长整型long long //长长整形float //单精度整形double //双精度整形二 自定义类型:数组类型结构体类型枚举类型联合

2020-10-04 20:30:17 82

原创 2020-9-17(C语言实现菱形打印)

实现菱形打印,我们需要把没打印 * 的位置用空格代替代码如下:#include<stdio.h>int main(){ char str[100] = " "; int mid = 6; int i = 0; int j = 0; int row = 0; for (row = 0; row < 7; row++) { for (i = mid, j = mid; (i >= mid - row) && (j <= mid + row)

2020-09-17 20:25:12 70

原创 #2020-9-12(C语言实现统计二进制中1的个数)

我们知道,整型数字在内存中都是以二进制形式进行存储。要统计二进制中1的个数,我们可以用以下两个方法实现:都是通过位操作符来实现的。方法一:#include<stdio.h>int main(){ int num = 0; printf("请输入:"); scanf("%d", &num); int count = 0; while (num) { count++; num = num & (num - 1); } printf("二进制中1的个

2020-09-12 20:59:57 124

原创 #2020-9-12 不能创建临时变量(第三个临时变量),实现两个数的交换

这是某公司的一道面试。我们平时交换两变量值用的都是定义中间变量来保存某一个值,实现交换。代码如下:int temp = a;a = b;b = temp;该题目不允许使用中间变量,此题可以运用位操作符来实现。如下:#include<stdio.h>int main(){ int a = 0; int b = 0; printf("请输入:a,b\n"); scanf("%d %d", &a, &b); a = a ^ b; b = b ^ a;

2020-09-12 20:50:05 79

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除