自定义博客皮肤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++智能指针

2023-11-14 08:22:21 120

原创 红黑的插入

红黑树是一种二叉搜索树每个结点上增加一个存储位表示结点的颜色,可以是Red或Black 通过对任何一条从根到叶子的路径上各个结点着色方式的限制。红黑树是如何保证该核心属性的呢?通过下列五个性质。

2023-08-23 17:55:46 145

原创 默认成员函数

本文全文以日期类为例先简单写一个日期类且补充一个小知识。

2023-07-09 12:23:44 188

原创 类与对象 (一)

*对象:**表示的是某一类事物的抽象的名词和概念,是对一类事物的抽象表示。**实例化对象:**根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同**类 : **对象在计算机中的表示。class为定义类的关键字,ClassName为类的名字,{}中为类的主体。略。类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。// 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号成员函数的定义有两种。

2023-07-05 11:13:47 130

原创 c++为什么支持函数重载?

在c语言中,函数名是不可以重复的,在同一作用域中函数名称都是唯一的。这也使得我们的函数调用充满了种种麻烦。而c++则支持通过函数重载解决了这个问题。

2023-06-30 15:32:17 406

原创 二叉树搜索树详解

二叉搜索树(BST,Binary Search Tree)或为一颗空树,或满足一下性质若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树注:二叉树中元素是单一的,无重复。

2023-04-22 11:54:37 268 1

原创 命名空间与库

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。声明与定义}

2022-07-22 09:55:42 380

原创 快速排序详解

是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:1.任取待排序元素序列中 的某元素作为基准值,2.按照该排序码将待排序集合分割成两子序列,3.然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。注:左子序列中所有元素均小于基准值,右 子序列中所有元素均大于基准值当一个元素他左方全部小于它本身,右边全部大于他本身时,此数已处于应在的位置了转成代码快速排序的大体逻辑如上文所示现在的问题是 partion函数的实现,partion函数是用于将数组按照快排的规则分成以下三

2022-07-07 15:10:12 581 1

原创 插入排序与希尔排序

将一元素插入到已排序完毕的数组中可以将无序数组的第一个元素看作 只有一个元素的有序数组后将数组中的元素一一插入到有序数组中的合适位置所有元素被插入到有序数组中时,便已将此数组置为有序动图演示 以升序为例将插入的元素通过 tmp保存假设 此时有序数组中有 i+1 个元素将有序数组的最后元素(最大的元素)的下标,记为end通过end遍历数组,寻出元素插入的合适位置 将 tmp 与 a[end]进行比较,当 a[end] > tmp 时,将 a[end]后移一位,后 end--接着与tmp进行比较 ,直至找

2022-07-04 18:39:21 140 1

原创 循环队列中的有效长度

此循环队列题,所求的为队内的有效长度头指针为 front尾指针为 rear循环队列长度为 N,最多存储N-1个数据假设 N=5即循环队列长度为 5 最多存储4个数据可以按照rear 与 front的大小关系将问题划分为一下三个部分一.rear > front时此时,rear - front 即为队内有效长度二.rea = front时也可以用 rear - front来表示此时的队内有效长度三.rear < front时以此题为例子此时可以看出实际上,队内有效长度为 3三个长度可以分为两部分 rear一部分

2022-06-07 16:16:39 2151

原创 环形链表详解

一.如何判断链表是否成环成环链表与不成环链表相比,有一个很明显的差异成环链表中是不存在尾节点的所有节点中的指针都是指向下一节点的根据这个差异,便可以很好的分辨链表分辨出来该如何利用这个差异呢?诺在一个成环链表中寻其尾节点,定为死循环但设计程序时,也不能将程序设计成死循环。如果利用快慢指针,便可以很好的解决这个问题假设 fast 指针一步前进2个节点slow 指针一步前进1个节点fast定先进入环,此后便在环内不断变量,就像打转一样。slow指针会在之后的某一个时刻进入环中fast

2022-06-01 11:29:41 2563

原创 offectof宏的实现

offsetof是用于计算结构体中成员的偏移量的定义如下乍一看,像一个函数的声明,其实不然。offsetof是一个宏但通过这个声明可以很好的理解offsetof宏的使用StructName : 结构体类型memberName : StructName结构体类型的成员名返回值 :将偏移量以size_t的数据类型返回offsetof的模拟实现在讨论offsetof的模拟之前,不妨先将结构体S的内存布局画出来struct S{ int a; char b; double c;};

2022-04-16 16:51:43 419 3

原创 C语言文件操作

前言在以往编写程序时,无论是输入的数据还是输出的数据,都会在程序运行结束后,便销毁了。显然这种短暂的数据存储无法满足所有的需求。而文件操作便能很好的解决这个问题在正式讨论文件操作之前,不妨先了解一下文件为什么使用文件?通过文件实现数据的持久化(将数据存储于硬盘上)文件是什么?从功能的角度来说分为两类文件名:一个文件要有一个唯一的文件标识,以便用户识别和引用。文件名包含3部分:文件路径+文件名主干+文件后缀文件指针就像上文所述,文件是存储于硬盘之上的,而程序是在内存上运行的。程序无法

2022-04-13 18:31:06 724 1

原创 动态内存管理

在正常申请内存时,所申请的内存大小都是固定的比如说 int a = 0; //向内存申请四个字节的空间 char arr[10]; //向内存申请10个字节的空间但在一下情况下,在程序开始运行之前是不知所需的空间的大小此时有两种方案解决这个问题1.开辟大量的空间,使得不论程序需要多大的空间,均能够满足。2.动态内存管理动态内存函数...

2022-04-03 18:08:41 1273 1

原创 c语言通讯录——动态内存版

本程程序实现了几个功能1.增加成员 2.删除成员3.修改 4.查找5.排序 6.清空通讯录程序如下所示本程序分为三个文件contact.h#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>#define NAME_MAX 10#define SEX_MAX 3#define TELE...

2022-03-31 19:13:34 1194 1

原创 结构体在内存中的存储

strcpy与strncpy一.strcpy函数声明char *strcpy(char *dest, const char *src)两个参数一为目的地首元素指针 dest二为源字符串首元素指针 src返回值为目的地首元素地址作用将src指向的字符串拷贝到dest。实例int main(){ char arr1[] = "123456"; char arr2[10] = { 0 }; printf("%s", strcpy(arr2, arr1))

2022-03-29 16:16:07 3773 1

原创 memcpy、memmove的模拟实现

一.memcpy声明void *memcpy(void *str1, const void *str2, size_t n)作用将自str2往后的n个字节的数据,复制到str1往后的n个字节的内存当中模拟实现void* my_memcpy(void* str1, const void* str2, int n){ while (n--) { *(char*)str1 = *(char*)str2; str1 = (char*)str1 + 1; str2 = (

2022-03-26 12:24:21 81 3

原创 初识strlen函数

strlen函数是一个位于C标准库<string.h>的库函数是用以计算字符串长度的函数,即为计算 ‘\0’前字符的数量函数的声明与使用size_t strlen(const char *str)参数类型是 字符指针,在调用strlen函数时,需将数组的数组名(也就是首元素地址)传给strlen函数,strlen函数会以此地址为起始位置,向后计算字符串长度。返回值类型是 size_t,其实也就是 unsigned int 类型。举个例子int main(){

2022-03-25 09:52:00 4268 1

原创 一道指针面试题

int main(){ char *c[] = {"ENTER","NEW","POINT","FIRST"}; char**cp[] = {c+3,c+2,c+1,c}; char***cpp = cp; printf("%s\n", **++cpp); printf("%s\n", *--*++cpp+3); printf("%s\n", *cpp[-2]+3); printf("%s\n", cpp[-1][-1]+1); return 0;}这一道面试题,可以分为两个部.

2022-03-21 18:39:11 341 4

原创 一道指针题

int main(){ int a[5][5]; int(*p)[4]; p = a; printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]); return 0;}乍一看到这串代码,想必是有些蒙的。想要理解这串代码,不妨将代码逐行分析一下。 int a[5][5];声明一个五行五列的二维数组int(*p)[4];声明一个指针变量.

2022-03-19 10:19:11 369 2

原创 初识qsort函数

qsort函数C语言编译器函数库自带的排序函数,是基于快速排序的一种函数位于 stdlib.h语法void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))base :指向要排序的数组的第一个元素的指针。nitems : base指向得到数组中元素的个数。size:数组中的元素大小,以字

2022-03-14 11:25:36 1939 2

原创 浮点型在内存中的存储

浮点型与整型在内存中存储时,规则是不一样的。根据IEEE754标准,任意一个浮点型可以写做:(-1)^S*N*2^E (-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。 M表示有效数字,大于等于1,小于2。 2^E表示指数位。以5.5为例 (-1)^0*1.01*2^3 其中 S = 0 M = 1.01 E = 3。通过这个式子可以将任意的浮点数转化为S,M,E这三个数值,通过存储这三个数值便可以实现将浮点型数据存储在内存当中。在存储这三个数据时,会对M与E进行转化。

2022-03-02 16:26:12 203 1

原创 整型在内存中的存储

引言当声明一个变量时,会按照数据的类型分配空间。 int a = 0;但一个数字是如何在内存中存储的呢?数据在计算机中存储时,均是以0,1组成的二进制存储的。十进制 二进制 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 二进制进行加减都十分方便,但计算机中只存在加法器,减法只能依靠负数

2022-02-26 16:53:11 177

原创 对越界访问导致死循环函数的理解

死循环的函数#include <stdio.h>int main(){ int i = 0; int arr[] = {1,2,3,4,5,6,7,8,9,10}; for(i=0; i<=12; i++) { arr[i] = 0; printf("hello bit\n"); } return 0;}原由函数中声明的局部变量是在栈区中存储的。栈区在使用时,优先使用高地址的空间,再使用

2022-02-24 15:44:24 519 1

原创 移位操作符与位操作符

移位操作符移位操作符的操作数只能是整型左移操作符规则:左边抛弃,右边补0。int main(){ int a = 1; // 00000000 00000000 00000000 00000001 int b = a << 1; // 00000000 00000000 00000000 00000010 return 0;}左移操作符一定程度上有放大两倍的效果但要切记, a <<1 并未改变 a的值。可以类比于 a+1 a没

2022-02-10 16:34:10 480 1

原创 C语言——数组

数组:一组相同元素的集合一维数组声明:数据类型 数组名称[常量表达式];常量表达式:必须是一个大于零的整数常量。举个例子int main(){ char arr1[10]; //类型为 char 的包含 10 个元素的数组 arr1 int arr2[1 + 9]; //类型为 int 的包含 10 个元素的数组 arr2 long arr3[1 * 10]; //类型为 long 的包含 10 个.

2022-02-05 19:17:06 2286 1

原创 C语言——扫雷(分享)

分了三个文件game.h#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<time.h>#include<stdlib.h>#define EASY_COUNT 10#define ROW 9#define COL 9#define ROWS ROW + 2#define COLS COL + 2void Initboard(c

2022-01-23 11:48:34 94 1

原创 C语言——二分查找(分享)

int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int main(){ int x = 11; int az = sizeof(arr) / sizeof(arr[0]); int left = 0; int right = az - 1; while (left <= right) { int mid = (left + right) / 2; if (x > arr[mid]) left = mid + 1; else if (x.

2022-01-22 12:13:40 276 2

原创 C语言——冒泡排序(分享)

#include<stdio.h>void bubble_sort(int*, int);int main(){ int arr[] = { 9,8,7,6,5,4,3,2,1,0 }; int sz = sizeof(arr) / sizeof(arr[0]); bubble_sort(arr, sz); int i = 0; for (i = 0; i < sz; i++) printf("%d ", arr[i]); return 0;}void bubb.

2022-01-22 12:11:27 441 1

原创 C语言——三子棋(分享)

我将三子棋分了三个文件text.c:#include "game.h"void game(){ int ret = 0; char board[3][3] = { 0 }; //棋盘初始化 InitBoard(board, ROW, COL); while (1) { //玩家下棋 PlayerMove(board, ROW, COL); DisplayBoard(board, ROW, COL); ret = IsWin(board, ROW, COL);

2022-01-22 12:04:21 145 1

原创 C语言——递归

定义程序调用自身的编程技巧称为递归。 一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。 递归策略 只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于:把大事化小递归的两个必要条件举一个简单的递归例一:void H(){ printf("haha\n"); H(); //H()函数调用函数H()}int main(){ H.

2022-01-21 11:07:19 4127 2

原创 C语言——函数

函数定义在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软 件库。意义函数为计算的分装提供了一种非常简便的方法,使用函数时便无需考虑函数是如何实现的,只需知道函.

2022-01-19 18:26:09 981 6

原创 C语言—循环结构

循环结构循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。它由循环体中的条件,判断继续执行某个功能还是退出循环。根据判断条件,循环结构又可细分为以下两种形式:先判断后执行的循环结构和先执行后判断的循环结构。循环控制语句循环控制语句改变你代码的执行顺序。通过它你可以实现代码的跳转在正式讨论循环类型前,先大致介绍一下循环控制语句break:当break语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。conti...

2022-01-17 18:01:48 9295 5

原创 C语言-选择结构

目录选择结构一、if-else语句1.单选择2.双选择3.多选择二.switch语句选择结构选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程一、if-else语句1.单选择单选择通过if语句就可以实现,if语句的语法及执行流程如下:if(表达式){ 代码块(表达式返回值为真时执行)}当程序运行到if语句时,会由表达式进行判定,诺表达式的返回值为真,则进入代码块执行语句,为假便跳过代码块.

2022-01-16 16:07:24 17283 8

原创 我的第一篇博客

首先自我介绍一下啊,我是大一学生,专业是软件工程。怀着对编程的兴趣,我选择了这个专业。经过一段时间的学习,也对这个专业有了一些初步的认知和一些自己的理解。一直以来都是在各个论坛上看别人的博客,从未自己写过。趁着假期闲来无事终于下笔写下了我的第一篇博客。对于学习编程为了什么这个问题,我现在大体上还是迷茫的。但我知道一点,我是为了就业而学习编程的。希望在未来学习的过程中我能逐渐找到我的目标所咋。近些日子在学习c语言,目前我的学习方法甚是简陋。大体上就是在听课与实操上发现问题,通过各个平台学习解决问题

2022-01-10 15:29:43 127 1

空空如也

空空如也

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

TA关注的人

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