自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 C++中的引用知识点小结

文章目录引用的概念引用特性常引用使用场景引用和指针的区别引用的概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。比如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。那么这里的“铁牛”、“黑旋风”就称李逵的引用。在程序中呢,引用的用法如下:类型& 引用变量名(对象名) = 引用实体;举个例子:void TestRef(){ int a = 10; int& ra = a;//<====定义引

2022-02-06 11:22:11 1817 38

原创 【Leetcode】链表的回文结构与相交链表

文章目录链表的回文结构相交链表链表的回文结构所谓回文结构通俗的讲就是链表的节点要关于中间的节点对称,那么如何判断是否对称呢,思路如下:首先我们需找出链表中的中间节点,然后再将中间节点作为新的头节点来创建一个新的链表,往后的节点依次尾插到该头节点后,再将该新链表逆置,最后再将新链表与原链表做比较即可。图示如下:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), nex

2022-01-29 15:10:08 1900 22

原创 【Leetcode】链表的合并与分割

文章目录合并两个有序链表链表分割合并两个有序链表首先看题目描述:当看完题目后,我们知道实现两链表的合并不可能在原链表中完成,所以我们需要新建链表,通过对原先两链表之间各个节点的比较依次将节点尾插在新建的链表中,最后返回新节点即可。图示如下:需要注意的是,当两链表中有一个链表已经走到尾结点,那么证明另一个链表中的剩下的节点的值都是比走结束的那个链表中的节点值要大,所以最后还需将这些剩下的节点都尾插到新链表中。代码实现如下:/** * Definition for singly-linked

2022-01-27 18:21:53 1283 29

原创 双向循环链表详解及其基本功能的实现

文章目录循环链表概念定义节点类型及初始化销毁链表链表头插链表尾插特定位置插入链表头删链表尾删特定位置删除查找节点获取节点个数判断链表是否为空打印链表循环链表概念在单链表详解中我们提到了链表的几种基本的结构,在这里要详细讲到的就是带头双向循环链表,其结构如下:该链表拥有1个头节点,且每个节点都有一个前驱指针和一个后继指针,分别用来保存前一个节点的地址和后一个节点的地址,这样就能够实现链表的双向访问的功能,需要注意的是链表的最后一个节点的后继指针指向头节点,头节点的前驱指针指向最后一个节点,带头双向循环

2022-01-25 21:45:44 3453 26

原创 【Leetcode】单链表中快慢指针(双指针)的运用

文章目录Leetcode876.链表的中间结点链表中倒数第k个结点Leetcode876.链表的中间结点相信对于学习链表的初学者来说,首次看到这个题目时,首先想到的应该是通过对整个链表进行一遍遍历求出链表节点的个数,然后再通过循环来找到中间节点(实不相瞒我第一次也是这样想的)。但是通过两次循环,不免增加了代码量和时间复杂度。那么,接下来就介绍一下最优的解题思路。最优思路定义两个指针,其中一个指针为慢指针,另一个指针为快指针,对本题而言,慢指针每次走一步(向前移动一个节点),快指针每次走两步(向前移

2021-11-13 21:14:41 1234 29

原创 单链表基础知识详解——基本概念结构及函数实现(增删查改)

文章目录链表的概念及结构初始化链表打印单链表创建新节点计算链表节点数单链表头插单链表尾插特定位置插入特定位置之前插入特定位置后插入单链表头删单链表尾删特定位置删除删除特定位置的节点删除特定位置的后一节点单链表查找修改链表链表的概念及结构概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成,每个结点包括两个部分:一部分是存储数据元素的数据域,另一部分是存储其他结点地址的指针域

2021-10-19 16:45:21 1387 19

原创 Leetcode初体验:移除元素 与 删除有序数组中的重复项

文章目录移除元素删除有序数组中的重复项移除元素图解:代码如下:int removeElement(int* nums, int numsSize, int val){ int src=0; int dst=0; while(src<numsSize) { if(nums[src]==val) //当src处的位置为val时,src向前移动一步 { src++; } els

2021-10-12 16:34:45 480 33

原创 一学就会的顺序表 —— 结构及各种接口 ( 头插 / 删、尾插 / 删、特定位置查找 / 插入 / 删除 ) 的实现

文章目录顺序表概念及结构初始化顺序表检查容量销毁顺序表打印顺序表增加数据头插尾插特定位置插入删除数据头删尾删特定位置删除顺序表查找顺序表修改顺序表概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可分为:静态顺序表:使用定长数组存储元素动态顺序表:使用动态开辟的数组存储两者的结构区别如下图:现实中,静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不

2021-10-09 17:00:26 3018 32

原创 数据结构初章——时间复杂度与空间复杂度

文章目录算法效率算法的复杂度时间复杂度大O的渐进表示方法常见时间复杂度计算举例复杂度对比空间复杂度算法效率算法效率主要涉及两种,即时间效率与空间效率;而时间效率在算法中是以时间复杂度来表示,空间效率在算法中是以空间复杂度来表示,接下来就来介绍一下复杂度。算法的复杂度算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额

2021-09-28 23:42:39 356 22

原创 C语言学习阶段性总结!(内附超详知识导图+重点知识详解)

C 语言学习阶段性结束啦!!!经过几个月时间的学习,终于对C语言有了更加全面的认识和理解,为了有更完整的知识框架,特意制作了一张思维导图,在此分享给各位博友:重难点知识详解函数系列:库函数详解 (一)库函数详解 (二)指针系列:指针系列 (一)指针系列 (二)指针系列 (三)指针系列 (四)指针系列 (五)当然除了上述博主认为的重难点之外,其实C语言中还有许许多多的重要知识点都罗列在导图中,有兴趣的博友欢迎一起学习!下一阶段将是对数据结构和算法的学习,希望以此为基,能够收获更多的

2021-09-27 11:13:32 2019 24

原创 通讯录2.0版本(文件保存版)

前言:在此前的一篇博客 通讯录动态版本 中我完成了一个能够动态增加容量的通讯录,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,但是当程序退出的时候,我们会发现通讯录中的数据就不存在了,等下次运行通讯录程序的时候,数据又得重新录入,这样的通讯录使用起来不免会有很多麻烦,所以为了解决这个问题,本次将会带来通讯录2.0版,即可以用文件保存的版本。接下来我们一起来看看吧!在 一次性就能学会的文件操作! 介绍了许多对文件的操作,本次就会用到这些操作来优化我们的通讯录。文章目录保

2021-09-19 14:17:51 554 27

原创 一次性就能学会的文件操作!(文件操作函数详解)

前言:在上一篇博客关于文件的基础知识中我们对文件有了一定的了解,本篇博客将会详细讲解操作文件的函数。文章目录文件的顺序读写字符输入输出函数 —— fgetc 与 fputcfputc函数fgetc函数文本行输入输出函数 —— fgets 与 fputsfputs函数fgets函数格式化输入输出函数 —— fscanf 与 fprintffprintf函数文件的顺序读写文件顺序读写的函数如下,接下来我们将一一介绍这些函数。注:在使用这些函数之前要引用头文件 <stdio.h>在此

2021-09-16 23:40:15 1309 23

原创 关于文件的你需要知道的一些基本知识

文章目录什么是文件为什么使用文件文件类型文件缓冲区文件指针文件的打开和关闭什么是文件文件是计算机文件,属于文件的一种,与普通文件的载体不同,计算机文件是以计算机硬盘为载体存储在计算机上的信息集合;在程序设计中,我们一般谈的文件有两种:程序文件、数据文件 (从文件功能的角度来分类的)。程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中

2021-09-14 23:24:32 1003 16

原创 通讯录动态版本的实现(源码+分析)

文章目录通讯录功能关键功能的实现1.创建和初始化通讯录2.增加联系人3.删除联系人4.查找联系人5.修改联系人代码总览test.ccontact.hcontact.c运行效果通讯录功能实现的通讯录为一个动态增加版本的通讯录,该通讯录能够通过需求自行的增加存放联系人的数量,主要功能为:1.能够根据需求(要存多少联系人就给多少空间)存放联系人信息联系人的信息:姓名+性别+年龄+电话+地址2.能够增加人的信息3.能够删除指定人的信息4.能够查找指定人的信息5.能够修改指定人的信息6.能够显示通讯

2021-09-11 23:50:41 2714 28

原创 动态内存管理详解(动态内存函数介绍 + 常见动态内存错误 + 经典笔试题)

文章目录为什么存在动态内存分配动态内存函数malloc和free为什么存在动态内存分配我们已经掌握的内存开辟方式有:例如int val = 20;// 在栈空间上开辟四个字节char arr[10] = {0};// 在栈空间上开辟10个字节的连续空间但是上述的开辟空间的方式有两个特点:1.空间开辟大小是固定的。2.数组在申明的时候必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空

2021-09-10 17:01:56 1181 30

原创 位段及其内存分配

文章目录什么是位段位段的内存分配位段跨平台问题什么是位段位段的声明和结构体是类似的,但有两个不同之处:1.位段的成员必须是int、unsigned int、signed int或char(属于整型家族)类型2.位段的成员名后面有一个冒号和一个数字举个栗子:struct A{ int _a:2; int _b:5; int _c:10; int _d:30;};这里的A就是一个位段类型。那么位段类型中的成员的冒号后的数字代表什么意思呢?其实冒号后面的数字代表该成员需要用

2021-09-05 00:50:49 712 15

原创 结构体内存对齐(结构体大小的计算)

文章目录结构体内存对齐规则结构体内存对齐规则我们知道,每种类型都有相应的大小,如int型占4字节,double型占8字节,char型占1字节;那么结构体也为一种类型,它的大小为多少呢?我们可以举个栗子看一看#include<stdio.h>struct S1{ char c1; int i; char c2;};struct S2{ double d; char c; int i;};int main(){ printf("%d\n", sizeof(str

2021-09-04 16:53:28 529 17

原创 库函数详解(二)—— 内存函数+模拟实现(部分)

文章目录memcpy——内存拷贝11.函数功能2.模拟实现memmove——内存拷贝2(可重叠)1.函数功能2.模拟实现memcmp——内存比较memset——内存设置memcpy——内存拷贝11.函数功能memcpy函数是用于拷贝内存块的函数,该函数有三个参数,第一个参数为拷贝的目标地址(void * destination),第二个参数为拷贝源地址(const void * source),因为在拷贝过程中源字符串不会变化,所以参数用 const 修饰,第三个参数为在内存中拷贝的字节数(size

2021-09-01 12:03:39 615 17

原创 库函数详解(一)—— 字符串函数+模拟实现(部分)

文章目录长度不受限的字符串函数strcpy——字符串拷贝1.功能介绍2.模拟实现strcat——字符串追加1.功能介绍2.模拟实现strcmp——字符串比较1.功能介绍2.模拟实现长度受限的字符串函数strncpy——部分拷贝长度不受限的字符串函数strcpy——字符串拷贝1.功能介绍strcpy即字符串拷贝函数,即通过该函数将一个字符串中的内容拷贝到另一个字符串中去,该函数的参数为两个指针,其中一个为目标的起始地址(即要拷贝到的目的地),另一个为被拷贝字符串空间的起始地址,因为该函数的返回值为目

2021-08-30 23:35:19 798 21

原创 玩透指针系列(终章)——指针笔试题(画图+超详解析)!

文章目录指针笔试题笔试题1笔试题2笔试题3指针笔试题笔试题1int main(){int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1);printf( "%d,%d", *(a + 1), *(ptr - 1));return 0;}//程序的结果是什么?画图分析:因为 a 为数组,在这里为首元素地址,所以 a+1 就为 2 的地址;int *ptr = (int *)(&a + 1);解释:&am

2021-08-22 15:47:01 689 16

原创 玩透指针系列(四)——这些指针和数组的题,你都会了吗?

文章目录指针和数组笔试题题目1.题目2.指针和数组笔试题题目1.//一维整型数组#include<stdio.h>int main(){ int a[] = { 1,2,3,4 }; printf("%d\n", sizeof(a)); //16 //sizeof(数组名)中的数组名为整个数组,计算的为整个数组的大小,单位为字节 printf("%d\n", sizeof(a + 0)); //4 //sizeof(a + 0)中a为数组首元素地址,a+0

2021-08-19 18:03:50 659 9

原创 模拟实现qsort函数

在上篇博客 玩透指针系列(三)中我们讲到了回调函数,本篇博客中就来利用回调函数的机制模拟qsort函数。什么是qsort函数?qsort 函数是C语言中自带的快速排序函数(能够排序任意类型的数据)我们可以看到: qsort 函数的返回类型为 void 型,共有4个形参,意义分别为:具体如下:void qsort (void* base, //base中存放的是待排序数据中第一个对象的地址, //因为不清数待排序的数据到底是什么类型,所以就设置为void* 型

2021-08-17 15:19:02 276 5

原创 玩透指针系列(三)—— 得心应手,指针应该这么玩!

文章目录1.函数指针1.函数指针我们知道,整型指针是指向整型的指针;数组指针是指向数组的指针;以此类推,那么 函数指针就是指向函数的指针。和其他指针一样,在讲解函数指针之前,首先明白这三点:1.( )的优先级高于 *2.定义一个变量是,除去变量名,剩下的就是它的变量类型3.一个指针变量去除变量名和 * 剩下的就是指针指向的内容的类型对于函数指针,举个栗子:#include<stdio.h>int Add(int x, int y){ return x + y;}in

2021-08-15 16:45:05 508 4

原创 玩透指针系列(二)—— 渐入佳境,指针还能这么用!

上篇博客是对于指针初阶的基础知识的讲解:玩透指针系列(一)接下来就来讲解指针的进阶知识。文章目录1.字符指针1.字符指针

2021-08-14 12:52:09 662 9

原创 玩透指针系列(一)——茅塞顿开,原来这就是指针!

文章目录1.指针是什么1.指针是什么在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。...

2021-08-10 22:25:03 1115 13

原创 深度解析数据在内存中的存储

文章目录类型基本归类整型在内存中的存储1. 原码、反码、补码2.大小端3. 练习在C语言中,我们知道常见的数据类型有char、short、int 、long、long long、float、double等,以及它们所占的存储空间大小:数据类型基础知识而这些类型的意义在于:使用这个类型开辟内存空间的大小(大小决定了使用范围)。如何看待内存空间的视角。下面作具体讲解。类型基本归类整型家族:char型:unsigned charsigned charshort型:unsigned

2021-08-08 22:34:26 1085 8

原创 隐式类型转换——C语言中的整型提升

整型提升概念:C语言中的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。整型提升的意义(三点说明):1).表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。2).因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。3).通用CPU(general-p

2021-08-06 21:50:14 746 11

原创 简易版扫雷游戏【C语言版】

文章目录一、游戏说明二、游戏设计步骤三、代码实现一、游戏说明首先打开游戏界面会出现一个扫雷区,有三种扫雷区可供选择,各扫雷区的扫雷难度依次递增初级:81个方块,10个雷(这里实现的是初级版的扫雷)中级:256个方块,40个雷高级:480个方块,99个雷玩法扫雷游戏的规则非常简单:挖开地雷(即点到设置成为雷的方块),被炸,游戏结束。挖开空方块,可以继续玩。挖开数字,则表示在其周围的八个方块中共有多少个雷,可以使用该信息推断能够安全单击附近的哪些方块。玩游戏过程中的情况如下:二、游戏设

2021-08-05 12:55:20 835 10

原创 三子棋游戏【C语言版】

文章目录一、游戏说明二、游戏设计步骤三、代码实现1.创建菜单2.创建和初始化游戏棋盘3.打印出棋盘4.玩家下棋5.电脑下棋6.判断输赢或者是否平局一、游戏说明三子棋相信大家都不陌生,小时候经常在纸上画出九宫格就可以直接和小伙伴一起玩,规则就是谁先在九宫格中下出同一行三个一样,或者同一列三个一样,又或者对角线的三个一样的棋子,谁就获胜;其实在编程中,代码也能实现人机版的三子棋小游戏,让我们一起来看看如何实现的吧!二、游戏设计步骤将三子棋游戏的实现逻辑分为以下步骤:1.创建菜单(选择玩游戏或者退出游

2021-08-01 23:37:10 912 13

原创 斐波那契数列(Fibonacci)+青蛙跳台阶问题

文章目录什么是斐波那契数列(Fibonacci)?如何求第n个斐波那契数?青蛙跳台阶问题什么是斐波那契数列(Fibonacci)?斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n -

2021-07-30 18:05:48 695 3

原创 函数递归讲解

什么是函数递归?程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于:把大事化小递归的两个必要条件:1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。2.每次递归调用之后越来越接近这个限制

2021-07-30 00:18:14 486 5

原创 随机数的生成+猜数字游戏

随机数的生成:关于随机数的生成,如果你去百度,你会看到这样的两段代码:srand((unsigned int)time(NULL));int ret=rand();那么随机数到底是如何生成的呢?在编程中有哪些应用呢?接下来我们一起来看一下它产生的原理吧。在MSDN或网站 www.plusplus.com 中可以看到这个函数的功能和用法:上图中红色方框中的RAND_MAX又是什么呢,这里我们可以在VS中查看它的定义可以看出它为一个0x7fff(16进制)的数,转换为10进制也就为3276

2021-07-25 00:32:42 2133 5

原创 putchar与getchar函数的细节及运用

在C语言中,输入和输出除了用printf和scanf外,另外还有用于输入字符的函数为getchar()函数,用于输出字符的函数为putchar()函数。功能解释如下:下面用例子来说明函数的用法#include <stdio.h>int main(){ int ch = 0; while ((ch = getchar()) != EOF) putchar(ch); return 0;}结果:可以看出,当按下键盘上的回车键时,getchar函数会读取

2021-07-24 17:46:28 1428 7

原创 【C语言】分支与循环语句(基础知识详解)

本篇前言:C语言是结构化的程序设计语言!而所有的结构又可大致分为三种,分别是:顺序结构,选择结构,循环结构。顺序就是从前往后,从上到下,我们的写好的程序就是按顺序从第一行起被一行一行的编译的选择也叫分支,是同一时间点面对问题时,有不同的选择,我们选其一而行循环是指程序进入了一段不断重复的路,可能会一直在此循环往复,也可以打破循环,继续前进。在顺序执行的程序中,分支中可能有循环,循环中也可能有分支。分支和循环是让我们的代码变得多姿多彩的关键技能,今天就让我们来升级它们吧!——————————————

2021-07-12 12:09:44 1499 12

原创 C语言基础学习笔记

1.计算机中的存储单位:bit(比特位)——计算机中存储的最小单位byte——字节 = 8bitkb——千字节 = 1024bytemb——兆字节 = 1024kbgb——吉字节 = 1024mbtb——太字节 = 1024gbpb—— 拍字节 = 1024tb2.数据类型:长度单位为字节,地址长度即为多少个长度如:数据类型为char的占一个字节长度,地址长度即为4个字节具体运行图如下:3.C语言怎么描述:分为常量和变量常量:不可改变的量变量:能被改变的量其中变量又分为全

2021-05-23 12:47:16 255 1

空空如也

空空如也

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

TA关注的人

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