自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++模拟实现priority_queue(代码)

【代码】C++模拟实现priority_queue(代码)

2025-01-24 20:51:41 121

原创 C++模拟实现list(代码)

【代码】C++模拟实现list(代码)

2025-01-18 12:19:31 89

原创 vector的模拟实现(C++)

【代码】vector的模拟实现(C++)

2025-01-12 21:44:31 449

原创 string模拟实现(部分功能)

【代码】string模拟实现(部分功能)

2025-01-07 16:05:29 229

原创 C++模板初阶

class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public :, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表if(_Data)

2024-12-10 17:32:17 362

原创 C++内存管理

int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间//还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;

2024-12-05 17:23:22 665

原创 友元和内部类

友元提供了一种突破封装的方式,有时可以提供便利。但友元会增加耦合度,破坏封装,因此友元不宜多用。友元分为:友元函数和友元类运行错误: 当我们运行上述代码时,我们会发现代码运行崩溃。这是因为我们重载的“<<”,由于cout放在符号的左侧,因此cout本应该是隐含的this指针,但实际上隐含的this指针是Date类型,因此cout的输出流对象和隐含的this指针在抢占第一个参数的位置,即左操作数。但实际使用中cout需要是第一个形参的对象,如果将该重载函数放在类外的话,又无法访问成员变量,这时就要用到友

2024-12-04 17:27:10 367

原创 初始化列表与Static成员

定义是不添加static,类中只是声明。

2024-12-03 21:23:14 598

原创 日期类的实现

【代码】日期类的实现。

2024-12-01 16:32:45 357

原创 C++类(赋值运算符重载)

也具有其返回值类型,函数名即参数列表,其返回值类型与参数列表与普通的函数类似函数名:关键字该关键字不能通过连接其他C++中不存在的符号创建新的操作符:如operator@重载操作符必须有一个自定义类型参数用于内置类型(int、char、double等)的运算符,其含义不能改变。因此operator只能用于自定义类型作为类成员函数重载时,其形参看起来会比操作数数目少1,因为成员函数的第一个参数为隐藏的this指针: .”以上5个运算符不能重载。

2024-11-29 17:22:08 495

原创 C++类(拷贝构造函数)

引用。

2024-11-28 16:50:21 813

原创 C++类(构造函数与析构函数)

构造函数是一个,创建类的类型对象时会,以保证,并且。

2024-11-27 21:11:21 593

原创 C++类(2)

用类的类型创建对象的过程被称为类的实例化。

2024-11-27 18:13:27 371

原创 C++类(1)

/成员函数或成员变量声明和定义全部放在类体中,如:class Aint a;int b;注:成员函数在类中定义,编译器可能会将其当成内联函数处理。声明放在在头文件中,定义放在源文件中。成员函数在定义时,需要在函数名前加。//头文件class namepublic:private:char* n;int a;//源文件。

2024-11-25 21:40:15 301

原创 内联函数(C++)

以的函数叫做内联函数,编译时C++编译器会,内联函数提升了程序运行的效率。通过上述图片,我们看出在运行上述代码时,调用Add函数是有建立栈帧的开销的。当我们用inline修饰函数后,可以观察到如下图所示:通过对上面两张图片的对比,我们可以看出加上inline后,没有了函数栈帧的开销,它会直接在调用内联函数的地方展开运行。

2024-11-21 16:15:11 299

原创 函数重载与引用

函数重载、引用

2024-11-20 16:56:41 790

原创 命名空间与缺省参数

命名空间、缺省参数

2024-11-19 20:51:02 417

原创 计数排序(C语言)

1.首先,遍历数组统计出相同元素出现的次数2.根据统计的结果将序列收回到原来的数组。

2024-11-15 19:29:05 319

原创 归并排序(C语言)

2.采用分治的思想对数组中的元素进行比较,将数组一份为二,midi = (left + right) / 2,分为[left,midi] [midi + 1,right]3.重复第二步采用递归算法往深处递归,直到数组中只包含一个元素(不包含数组不存在的情况),故递归的结束条件是left == right。4.然后函数返回到上一层,对两个数进行比较,然后按照顺序插入临时数组tmp。5.当tmp数组有序时,拷贝到原数组中结束。

2024-11-15 18:05:12 566

原创 快速排序(C语言)

1.首先,先确定一个元素作为关键值赋值到变量keyi中(keyi保存的是该元素的坐标,即数组的下标)2.其次,用变量left保存数组的左边左边,right保存数组的右边坐标3.然后right先向左边开始走,直到找到小于keyi的元素停止4.right停止后,left开始向右侧找,找到大于keyi的元素停止5.将left和right位置的元素互换,然后重复3、4步6.直到left和right相遇后,将left赋值给keyi。

2024-11-13 21:45:13 586

原创 选择排序(C语言)

1.首先,我们先建立一个乱序数组,如:2.其次,我们遍历数组选出最大或最小的元素,与数组的尾部或首部位置的元素位置互换。在这里,为了提高效率,我们可以遍历一遍把最大和最小的元素一起选出,然后放到该在的位置。3.重复上述步骤即可。

2024-11-13 20:52:09 271

原创 希尔排序(C语言)

希尔排序是在直接插入排序的基础上演变的1.先选定一个小于n的整数gap作为间隔(一般gap = n / 3 + 1),然后将所有距离为gap的元素分在同一组,并对每一组的元素进行直接插入排序。它将一组数组分为了gap组,一组中每个元素的间隔为gap。2.当gap的大小减到1时,就相当于整个序列被分到一组,进行一次直接插入排序,排序完成。图片讲解将上述同一颜色相连的数分为一组,一共分了gap组,一组中每个元素的间隔为gap,对同一组中的元素进行插入排序。

2024-11-12 18:03:10 791

原创 插入排序(C语言)

2.然后取出下一个元素,在这里是第二个元素即5,将这个元素赋值变量tmp,然后进行插入。3.如果前一个元素大于tmp,则该元素向后移,重复上述步骤,直到找到小于tmp的位置。4.找到小于tmp元素的位置后,插入到该元素的后面,就完成了一次插入排序。从第一个元素开始排序,当只有第一个元素4时,我们可以认为它是有序的。重复上述步骤,直到排序结束。1.给定一个乱序的数组,如。

2024-11-12 17:28:00 350

原创 C语言模拟实现堆排序

开始向下调。由于在数组上有n个空间,因此最后一个结点的位置为n-1,故它的父结点的位置是(n-1-1)/2,故我们要从结点24的父结点8开始向下调。由于结点24大于结点8,因此8不需要向下调整。然后看结点4,结点4的孩子分别是4和68,由于两个孩子中,结点4要小于68,且与父结点相等,因此父结点4也不需要向下调整。依次向上遍历,直到结束。

2024-11-02 21:04:09 691

原创 C语言模拟实现队列和栈

【代码】C语言模拟实现队列和栈。

2024-10-30 17:39:34 227 1

原创 模拟实现二叉树(C语言)

遍历如下图所示的二叉树。

2024-07-27 22:09:28 299

原创 二叉树及其概念

树是一种非线性的数据结构,它是由n个有限结点组成一个具有层次关系的集合。如图:树有一个特殊的结点,被称为根结点(上图R结点),根结点没有前驱结点。除了根结点外,每个子树的根结点有且仅有一个前驱,但可以有0个或多个后继结点,因此树是递归定义的。注:树形结构中,子树之间不能有任何交集,否则就不是树形结构。结点的度:一个结点含有子树的个数成为该节点的度。如:A的度为6,B的度为0叶结点:度为0的结点。如:B、C、H、I等分支结点:度不为0的结点。如A、D、E、F等父结点:若一个结点含有子结点,则这个结点称为其子结

2024-07-25 20:28:22 383

原创 C语言模拟堆的实现

堆总是一颗完全二叉树;堆中某个节点的值总是不大于或不小于其父节点。

2024-07-18 20:39:23 257

原创 带头双向循环链表的增删查改

双向链表的增删查改

2024-05-16 20:24:27 124

原创 单链表的增删查改

头插尾插。

2024-04-19 10:52:26 148 2

原创 预处理详解

#define、定义宏和条件编译

2024-02-26 20:43:18 850 1

原创 编译和链接

翻译环境:在这个环境中,源代码被转换为可执行的机器指令。运行环境:又称为执行环境,它是用于实际执行代码的。

2024-02-24 12:43:47 800

原创 字符串函数和内存函数

字符串函数的头文件是string.h。

2024-02-18 12:43:54 904

原创 C语言中的文件操作

在计算机操作系统中,文件是指存储在硬盘等外存储器上的信息集合。在程序设计中,我们说的文件有两种:程序文件、数据文件。(这是从文件功能的角度来分类的)上面说的适用于所有输入流一般指适用于标准输入流和其他输入流(如文件输入流);所有输出流也是同理。根据上面我们可以得出fputc的功能是将一个字符写进流内。其中character是要写的字符,stream是流,返回值为int类型。如果返回失败,则返回EOF。fclose(pf);pf = NULL;

2024-02-03 13:37:41 935 1

原创 结构体的介绍

/变量的定义int x;int y;}p1;//声明类型的同时定义变量p1//初始化struct Stuint age;int main()//按照结构体成员的顺序进行初始化struct Stu s = { "张三",20,"男","20230815648" };//按照指定的顺序初始化struct Stu s2 = { .age = 18,.name = "李四",.id = "21015120",.sex = "男" };

2024-01-24 14:49:23 896 1

原创 数据在内存中的存储

整数在内存中以二进制的形式存在,主要以原码、反码和补码的形式存在。其中有符号整型的这三种表示方法均由符号位和数值位两部分组成,其中符号位是用0表示‘正’,用1表示‘负’,而数值位最高位的一位是被当做符号位,剩余的都是数值位。无符号整型中没有符号位,所有的0和1都是数值位。正整数的原码、反码和补码都是相同的,而负整数的原码、反码和补码都是不同的。

2024-01-22 20:16:00 957 1

原创 指针(4)

在指针中,有一种指针类型叫做字符指针:char*我们可以这样使用还有一种使用方法如下这里和数组一样,并不是把字符串hello world放入字符指针ph中,而是将字符串首字符的地址放进ph中,上述代码就是讲首字符h的地址放在指针变量ph中。代码的输出结果如图所示:上述代码中,str1、str2、str3和str4的内容是一样的,但为什么输出的结果却是上图所示呢?因为这里的str3和str4是一个常量字符串。

2023-12-03 20:17:12 682 1

原创 冒泡排序的代码及优化

我们设flag=1,意思就是假设这一趟是有序的不需要交换任何元素,那么代码就会跳过if(arr[j]>arr[j+1])语句,flag的值不会改变,那么flag==1就会进入if(flag == 1)这条语句,因此,会跳出这一趟循环,就会节省时间。我们要将其变成一个升序,因此先将10和9进行比较,由于10>9,因此要把10和9的位置互换,然后再比较10和8的大小,将10和8的位置互换,一直把10放到合适的位置,这一次循环就结束。而变量j表示某一趟中,需要交换的元素个数,再交换10时,交换了9个元素;

2023-11-30 17:13:26 582 1

原创 指针(3)

对于一位数组来说,数组名是数组首元素的地址。而对于二维数组来说,数组名是数组第一行的地址。但这种情况也不是绝对的,有两种例外:(1)sizeof(数组名):数组名单独存放在sizeof中,这里的数组名表示的是整个数组,计算的是整个数组的大小,单位是字节。(2)&数组名:这里的数组名表示的也是整个数组的大小,取出的是整个数组的地址(虽然打印出来与数组首元素的地址相同,但整个数组的地址与数组首元素的地址是有区别的)。除了这两种情况外,其他任何地方使用数组名,都代表数组首元素的地址。

2023-11-29 10:51:27 1430 1

原创 指针(2)

void*类型是一类特殊的指针类型,这一类型的指针可以接受任意类型的地址,但它不可以直接进行指针的+-整数和指针的解引用的运算。当运行以上代码是会报错,如图:我们可以看出void*可以接受任何类型的地址,但不能直接解引用,如果想要使用,可以强制类型转换后再解引用。

2023-11-27 20:43:17 1658 1

空空如也

空空如也

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

TA关注的人

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