自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (1)
  • 收藏
  • 关注

原创 栈、队列和堆详解(c++)

111

2022-05-22 09:48:21 1357 14

原创 list的讲解及模拟实现(c++)

与介绍vector时相同为了方便大家理解, 我们采用便模拟实现便讲解使用方式的方式, 展开对list容器的讲解.一.list的介绍使用时注意包含头文件: #include<list>list相关特性介绍:1.list的底层是一个带头结点的双向循环链表.2.list是可以在常数范围内在任意位置进行插入和删除的序列式容器, 并且该容器可以前后双向迭代.3.list的底层是双向链表结构, 双向链表中每个元素存储在互不相关的独立节点中, 在节点中通过指针指向其前一个元素..

2022-05-08 12:11:36 1680 20

原创 vector的讲解及模拟实现(c++)

为了方便大家理解我们边模拟实现vector容器的常用操作,然后根据代码讲解如何使用vector的这些功能,这样的话相信可以帮助大家更好的理解vector.一.vector的介绍什么是vector以及同其他容器相比的优缺点:1.vector是表示可变大小数组的序列容器.(因此其空间存在于堆上)2.就像数组一样,vector也采用的连续存储空间来存储元素,也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效,但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器..

2022-05-01 23:11:51 3743 16

原创 string类的讲解及模拟实现(c++)

目录一.什么是STL1.什么是STL2.STL的版本3.STL的六大组件4.STL的缺陷二.什么是string1.为什么学string?2.文档中对string的介绍3.总结三.string类的成员函数1.string类对象的常见构造2.string类对象的容量操作3.string类对象的访问及遍历操作4.string类对象的修改操作5.string类非成员函数四.string类的模拟实现1.成员变量&迭代器声明&...

2022-04-12 18:28:34 1705 21

原创 c++内存管理

一.c/c++内存分布1.c/c++内存区域划分我们直接来看c/c++中的内存区域划分.2.各个区域的功能①.内核空间:操作系统内核代码的运行空间.②.栈:又叫做堆栈,非静态局部变量/函数形参/返回值/表达式中间结果/某些寄存器信息等等,栈是向下增长的.③.内存映射段: 是高效的I/O映射方式,用于装载一个共享的动态内存库,用户可以使用系统接口创建共享内存,进行进程间通信.④.堆:用于程序运行时动态内存分配,堆是向上增长的.⑤.数据段:存储全局数据和静态数据...

2022-04-04 17:29:33 6383 42

原创 类与对象后续(c++)

上篇我们对空类进行了介绍,这篇对类与对象进行结尾.内容介绍:1.再看构造函数2.static成员3.C++11的成员初始化新玩法4.友元5.内部类(了解)目录一.再看构造函数1.构造函数:2.初始化和赋初值:3.explicit关键字二.static成员1.概念2.特性3.实现一个类,计算中程序中创建出了多少个类对象4.静态成员函数可以调用非静态成员函数吗?5.非静态成员函数可以调用类的静态成员函数吗?三.C++11的成员初始化新玩..

2022-03-28 21:18:36 1383 20

原创 类与对象中阶(c++)

上篇最后我们说到了this指针,这次从空类开始,本篇的所有内容都会围绕空类来展开....内容介绍:1. 类的6个默认成员函数 2. 构造函数 3. 析构函数 4. 拷贝构造函数 5. 操作符重载 6. const成员函数 7. 取地址及const取地址操作符重载目录一.类的6个默认成员函数二.构造函数1.什么是构造函数:2.作用:3.默认构造函数:4.特征:三. 析构函数1.什么是析构函数?2.作用:3.默认析构函数:4

2022-03-21 20:08:37 2473 15

原创 类与对象初入(c++)

我们从一下几方面先来初步认识c++中的类和对象.一.面向过程和面向对象我们学习c++之前得先了解什么是面向过程,什么是面向对象,这样才能帮助我们更好的学习c++,先来看他们的定义:面向过程:面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了.面向对象:面向对象是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为.(现实生活中的任何事物都可以看做对象)知道其定义后我们

2022-03-17 12:27:48 1140 16

原创 inline函数的特性

一.inline的作用(内联函数)我们使用关键字inline和函数定义一起就可以创建一个内联函数,它的作用就是减少函数调用的开销,假如我们的程序中有一个函数会频繁的被调用,这样使程序的运行速度十分缓慢,那么我们使用内联函数,就可以解决这种问题,提高程序的运行效率.内联函数的定义:inline void add(int a, int b){ return a+b;}上面这个就是一个内联函数,假如我们的程序中频繁使用add操作时,将其声明为内联函数就可以减少调用开销提高效率.注意

2022-03-15 16:36:37 3404 10

原创 快速排序(非递归)

快速排序非递归:基本思想(默认升序):从数组中选取一个数来作为标准数,所有比这个数小的数全部放到其前面,比这个数字大的数放到其后面,此时这个标准数所处的位置就是其在有序数组中的位置,因此该标准数就不用在移动了,我们对其左右两边的数字继续执行之前的操作,这样每次都可以确定一个标准数在有序数组中的位置,直到所有数字都处在正确的位置为止,此时这个数组就为有序数组.优化:三数取中:我们取标准数的时候,取的数越居中则算法的时间复杂度越低越接近O(N*logN)效率越高,我们取的数越极端越接近最大或最小值则

2022-03-13 21:24:25 4881 8

原创 八大排序算法(C语言)

目录一.插入排序1.1直接插入排序1.2希尔排序二.选择排序2.1选择排序2.2堆排序三.交换排序3.1冒泡排序3.2快速排序四.归并排序4.1归并排序五.非比较排序5.1计数排序一.插入排序基本思想:(默认升序)从数组中的第二个元素开始,先使用一个变量保存这个元素的下标,开然后始跟前一个比较,如果比他小则交换位置继续跟前一个比较,直到找到一个位置比它的前一个元素大则停止(或走到数组开头也停止),然后保存的下标后移继续之前的操作,直到数组末

2022-02-20 23:47:44 1963 9

原创 二叉树的实现(数据结构+C语言)

一.主函数调用a.我们使用数组存储二叉树中的所有结点,以前序遍历的方式存储(下面创建的时候就必须采用前序的方式创建二叉树,在数组中的存储方式必须和创建时的方式相同)空结点以#表示.在主函数中我们只需定义一个指针用来存储根节点就行,根据根节点我们便可以访问到二叉树中的所有结点.//主函数int main(){ BTDataType str[]="ABD##E#H##CF##G##"; int num=0; int k=0; char x,Empty; BTNode* root;

2022-02-12 23:11:41 1776 2

原创 二叉树的后序遍历(C语言)

首先我们从两个方面讲解二叉树的后序遍历(递归+迭代)一.二叉树的后序遍历.(递归)思想:首先我们从二叉树的根节点开始先遍历其左孩子,①接着同样继续遍历其左孩子的左孩子,直到某个左孩子节点的左孩子为NULL时,②开始遍历其右孩子,如果其为NULL则访问该节点的值域,并返回其双亲节点重复第二步的操作,如果其不为NULL则以该节点为根节点重复第一步的操作.直到访问完所有节点时结束递归.代码:void BTreePostOrder(struct TreeNode* root,int* arry

2022-01-23 21:17:32 4911 2

原创 二叉树的中序遍历(C语言)

我们从两个方向讲解二叉树的中序遍历(递归+迭代)一.递归思想:从根节点开始向其的左孩子遍历,一直访问每个节点的左孩子,当其走到NULL时返回,返回时记录每个节点的数值,然后访问该节点的右孩子,如果为NULL直接返回上一层,如果不为NULL则重复上面的操作,直到遍历完所有的节点为止.代码如下:void BTreeInOrder(struct TreeNode* root,int* arry,int* returnSize){//中序遍历 if(NULL==root){//判出条件

2022-01-09 22:52:35 7509

原创 二叉树的前序遍历(C语言)

我们从两个方向讲解二叉树的前序遍历(递归+迭代)一.递归思想:从根节点开始向其左孩子遍历每经过一个节点记录一下该节点的数值(只在第一次经过该节点时进行记录),当走到NULL时返回上一个节点,然后遍历其右孩子,如果右孩子存在记录其数值,再重复上面操作,如果不存在为NULL直接返回上一个节点再重复上面的操作.代码如下:void BTreePrevOrder(struct TreeNode* root,int* a,int* returnSize){//前序遍历 if(NULL==r

2022-01-02 21:59:48 6929 1

原创 GDB常用调试命令(Linux)

首先我们要知道程序的发布方式有两种:debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项.一.最简单的调试方式:就是让程序停在一个位置然后使用printf输出一些相关的需要查看的变量的值,因此我们可以在程序中感觉存在问题的位置加上printf以此来进行调试,但是这种方式太过麻烦了,所以我们使用GDB来进行调试十分方便,其根本原理也相似.二.进入方式:在使用gcc进行编译时加上-

2021-12-19 22:25:50 962 1

原创 栈和队列相关经典算法题总结(数据结构+C语言)

我们这里针对栈和队列的一些经典算法题做详细讲解:1.括号匹配问题.2.用队列实现栈.3.用栈实现队列.4.设计循环队列.一.详细讲解如下:1.括号匹配问题.(如下图)给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。(试题来源力扣)//判断括号是否匹配bool isValid(char * s){ if(NULL==s){//判空.

2021-12-13 22:28:29 2693

原创 链表相关经典算法题总结(C语言+数据结构)

我们针对链表中最经典的几道算法题做讲解:1.求两个链表的公共节点.2.判断链表是否有环.3.给定一个链表,判断是否有环,有返回入环的第一个节点,无返回空.(在第二题上的加强版).4.给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深度拷贝.5.对链表进行插入排序.6.在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针.一.详细讲解1.求两个链表的公共节点.(如图)

2021-12-12 22:06:47 1666

原创 (C语言) 复制带随机指针的链表

1.给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么..

2021-11-28 22:30:25 227

原创 数据结构+带头结点双向循环链表+(C语言)

针对带头的双向循环链表的基本功能展开讲解:目录1.结构体定义a.typedef int LTDataType;typedef struct ListNode{ LTDataType _data; struct ListNode* _next; struct ListNode* _prev;}ListNode;

2021-11-27 21:55:50 733

原创 (C语言)轮转数组

给你一个数组,将数组中的元素向右轮转 k个位置,其中k是非负数。来源:力扣(LeetCode)示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#in...

2021-11-22 20:00:58 890

原创 (C语言)删除有序数组中的重复项

给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。(试题来源于力扣)示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素#define _CRT_SECURE_NO_WARNINGS#i

2021-11-22 19:23:36 2182 2

原创 (C语言)求最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。(试题来源力扣)示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。回文的意思例如:上海自来水来自海上.#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>//求最长回文子串int judgeDrome(char* s, int le

2021-11-21 22:38:20 1702

原创 (C语言)求不重复的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。(试题来源力扣)示例1:输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。int equalNum(char a[],char b[],int k,int n){//判断测试数组中的元素是否有重复 int temp=0; for(int i=0;i<=k;i++){ if(a[i]==b[n]){ ...

2021-11-20 20:57:17 2549

原创 交换一个整数的二进制的奇数位和偶数位(使用宏定义)

1.我们使用宏定义的形式把一个整数的二进制的奇数位和偶数位进行交换.思路:a.(该整数为int类型)所以有32个比特位,因此我们可以找一个奇数位全为1偶数位全为0的数,和一个偶数位全为1奇数位全为0的数,分别使用与运算将这个整数的奇数位和偶数位全部提取出来.b.然后提取出来的奇数位后移一位变成偶数位,偶数位前移一位变成奇数位,然后使用或运算结合起来,就完成了奇数位和偶数位的交换.c.奇数位全为1偶数位全为0的数:0x55555555d.奇数位全为0偶数位全为1的数:0xaaaaaaaa

2021-11-14 21:08:23 646 2

原创 C语言实现通讯录(动态内存+文件存储)

说明:a.使用malloc申请空间存储信息,当空间满的时候使用realloc扩充空间.b.将用户输入的信息写入文件中,每次打开程序时自动读取文件内容,这样就不用每次都重新输入了.c.我们采用结构体数组来存储数据.d.在进行结构体传参的时候都是用指针来传参,避免过度使用空间.注意:1.开始使用前先在桌面创建一个名为:sodum的txt文件用来读取和写入数据.2.因为在以人名排序的时候采用的是字符串比较,所以对于数字的人名并不能准确排序.​#define _CRT_SECUR

2021-11-13 16:12:15 129

原创 明码(C语言实现)

(蓝桥杯)汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。把每个字节转为2进制表示,1表示墨迹,0表示底色。每行2个字节,一共16行,布局是:第1字节,第2字节第3字节,第4字节…第31字节, 第32字节这道题目是给你一段多个汉字组成的信息,每个汉字用32个字节表示,这里给出了字节作为有符号整数的值。题目的要求隐藏在这些信息中

2021-11-12 23:07:12 342

原创 乘积尾零(C语言实现)

(蓝桥杯)如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零?5650 4542 3554 473 946 4114 3871 9073 90 43292758 7949 6113 5659 5245 7432 3051 4434 6704 35949937 1173 6866 3397 4759 7557 3070 2287 1453 98991486 5722 3135 1170 4014 5510 5120 729 2880 90192049 698 4582 43

2021-11-12 22:42:54 1439

原创 C语言动态内存管理

1.首先我们要知道为什么要动态内存管理:a.我们平时申请的内存空间大多是以数组形式申请的,所以它的大小都是固定的(就是数组的长度).它所给的长度在编译时就已经确定,之后无法更改.b.当我们输入的数据把数组填满时,就无法再输入数据了,如果再输入就会发生内存越界,系统就会崩溃.因此我们就必须使用动态内存管理了,这样我们在数据填满空间之后,就可以再次按自己的需要扩大空间了.2.知道以上两点我们就知道了动态内存管理的重要性了,因此接着介绍四个动态内存管理的相关函数了.(malloc,free,callo

2021-11-09 21:28:59 663

原创 C语言(程序环境和预处理)

1.程序的翻译环境1.首先第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。我们要明白我们所写的代码,都是在编译器上进行的,那么编译器是如何运行代码的呢?2.以VS为例,随便写一段(C语言)代码,进行保存可以发现,他是一个以.c结尾的文件这是一个源代码文件,它没有经过编译器的编译是没有办法运行的,而编译器的作用就是将我们写的代码(源文件)进行编译变成机器指令(二进制形式的目标文件)以.o结尾的文件,在这里我们使用的是汇编语言,然后再经过链接器(并应用到该语言中所使用的相关库函数)从而形成

2021-11-09 18:09:17 364

原创 C语言实现手机通讯录

简单的使用结构体,总共实现了6个功能。使用vs2019进行编译,如果使用别的编译器可以将第一行删掉。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#include<math.h>#include<Windows.h>typedef struct person

2021-11-03 19:53:27 993

原创 结构体相关类型解析

在了解结构体之前我们首先要知道对齐数,因为在我们使用结构体时一定会用到结构体的大小和结构体中相关元素所占的字节,所以必须知道结构体大小的计算规则(对齐规则):a. 第一个成员在与结构体变量偏移量为0的地址处。b. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的值为8 c. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。d. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数.

2021-11-03 19:32:56 143

原创 字符串相关函数和内存相关函数的实现

1.求字符串长度首先是最经典和最常用的strlensize_t myStrlen(const char* str) {assert(str != NULL);size_t temp_1 = 0;while (*str != '\0') {temp_1++;str++;}return temp_1;}int main() {char str[] = "abcdefgh";char str1[10];printf("%d", myStrlen(str1)

2021-11-01 17:41:05 84

原创 C语言实现简单扫雷游戏(二维数组)

a.输入坐标来排雷。b.雷排完之后,胜利游戏结束。c.踩中雷之后,失败游戏结束。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#include<math.h>#define ROW 9#define COL 9#define ROWS ROW+2#define CO

2021-10-27 21:55:47 166 1

原创 C语言指针相关问题解析

1.判断下列三个表达式的输出是多少?struct Test{ int Num; char *pcName; short sDate; char cha[2]; short sBa[4];}*p;//假设p 的值为0x100000。 如下表表达式的值分别为多少?//已知,结构体Test类型的变量大小是20个字节int main(){ printf("%p\n", p + 0x1); printf("%p\n", (unsigned long)p + 0x1); printf(

2021-10-25 22:39:58 249

原创 C语言实现三子棋

简单的三子棋,电脑随即下子,使用二维数组定义棋盘并存储棋子。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#define ROWSIZE 3//宏定义行数#define COLSIZE 3//宏定义列数char jugde(char chess[ROWSIZE][COLSIZE]) {/

2021-10-15 10:57:00 85 2

原创 求字符串长度

1.如何在不引用新变量的情况下查找字符串长度(使用递归求字符串长度)递归的使用(图解)#include<stdio.h>int strLengh(char a[]) {//求字符串的长度 if (a[0] == '\0') { return 0; } return strLengh(a + 1) + 1;}int main() { char a[] = "abcdsd"; printf("该字符串的长度为:%d\n", strLengh(a));}

2021-09-29 22:31:19 132 1

原创 2021-09-18

begin1.自我认知与思考在不同的人生阶段,我们往往都会面对不同的问题,学习,生活,感情等等,相信大家也会有这些方面的问题。而我正处在学习与工作的交接点,一方面学习目标繁重,一方面就业压力山大,因此我时常会思考这时的我应该怎么做?做什么?如果要回答这些问题,首先要认清自我,就我自己来说,我是学什么的–计算机毫无疑问,那我的爱好是什么–打球,游戏,旅游很多,我的自制力怎样–比较差,我的学习编程多久了–两年但学的不怎么样,我最喜欢什么语言–java毫无疑问。如果这些问题都能很清楚的回答那便可以进行之后的思

2021-09-18 18:27:16 81 2

linux进程概念和进程控制章节思维导图

linux进程概念和进程控制章节,详细内容思维导图.

2022-03-03

空空如也

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

TA关注的人

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