- 博客(68)
- 收藏
- 关注
原创 【408之计算机组成原理】计算机系统概述
本文主要包含以下内容:计算机发展历程及计算机的系统层次结构(计算机系统的基本组成和计算机硬件的基本组成,计算机硬件和软件的关系,计算机系统的工作原理),和计算机的性能指标
2023-03-02 20:18:14
2611
5
原创 【C++之容器篇】AVL树的底层原理和使用
AVL树其实是在搜索树的基础上加上一些限制因素,从而使搜索树的结构保持相对平衡,通过前面我们对二叉搜索树的学习,我们知道,如果我们向一棵二叉搜索树中插入一些有序的数据,那么整棵树就会偏向于一边 ,从而使整棵树失去平衡,那么在查找的时候就会效率低下,退化为顺序表的效率了,今天我们学习的AVL树本质上就是为了解决二叉搜索树中失去平衡的问题,为了控制二叉搜索树中的子树的左右子树的高度差保持相对平衡,我们采取在树中的每一个结点中增加一个变量来记录每一个结点的平衡因子,我们可以定义平衡因子为该子树的右子树的高度-左子
2023-02-20 15:28:41
698
3
原创 【C++之容器篇】map和set常见函数接口的使用与剖析
map和set是数据结构中非常常用的结构,这两个结构都属于二叉搜索树,set中的结点存储的是关键字,map中的结点存储的是键值对。set和map都只支持存储唯一一个关键字,不允许关键字冗余,但是其衍生出来的multiset和multimap数据结构就支持存储多个关键子,下面将通过实际代码来详细介绍这两类数据结构的使用。
2023-02-18 12:43:20
1384
9
原创 【C++之容器篇】二叉搜索树的理论与使用
在数据结构初阶我们学习了二叉树的相关知识,普通的二叉树的作用只是用来存储数据,并没有任何的性质,所以在任何方面都没有什么优势,今天学习的二叉搜索树是在普通的二叉树的基础上加上了一些性质,使整体的搜索效率大大提升
2023-02-16 22:32:10
677
4
原创 【C++之容器适配器】反向迭代器的实现
前面我们学习的C++中适配器模式的一个例子:栈和队列的模拟实现,C++中的适配器模式本质上是一种代码复用的手段,其可以实现相同功能代码的复用,而不会写出一些重复的代码,从而造成代码的冗余。C++中另一个适配器模式的经典设计就是反向迭代器的封装,其通过适配正向迭代器的功能,从而实现了反向迭代器的功能,本篇文章将重点讲解C++中反向迭代器的适配模式,并以list和vector的反向迭代器为例。
2023-02-15 23:03:24
369
6
原创 【C++之容器适配器】栈和队列模拟实现
前面我们学习的都是C++标准模板库中的一些容器,今天我们要学习几个容器适配器,容器适配器的底层原理是通过适配另一个容器的功能来完成当前容器功能的实现,今天学习的栈和队列是通过deque来适配的,下面我们详细讲解stack和queue还有priority_queue的模拟实现
2023-02-14 23:49:49
472
9
原创 【C++之容器篇】造轮子:list的模拟实现与使用
前面我们已经学习了string和vector的模拟实现和使用,相信对于容器的模拟实现和使用的能力已经上升一定的水平,今天我们要学习的是list的模拟实现,List的模拟实现和string和vector其实没有本质的区别,只是在list的模拟实现过程中,list的迭代器和string和vector有所不同,这是我们实现List的模拟实现中需要重点掌握的,今天学习的List本质就是一个带头双向循环链表。
2023-02-12 23:49:30
598
6
原创 【C++之容器篇】造轮子:模拟实现vector类
vector本质就是一个支持顺序存储数据,并且容量支持修改得到顺序表。但是vector的底层结构实现相比于之前实现的string来说略有不同。string中的底层结构是通过一个指针数组和两个变量来标识数组中数据的变化。vector是通过三个迭代器来标识上述过程。
2023-02-11 22:35:23
1067
7
原创 【C++之容器篇】精华:vector常见函数的接口的熟悉与使用
前面我们在学习C语言版本的数据结构时,学习过SeqList顺序表的实现,C语言实现的顺序表存在一定的局限性,一次性只能支持存储一种类型的数据,今天我们将学习C++标准库中一种新的顺序表:vector的使用
2023-02-10 23:45:49
2335
24
原创 【C++之容器篇】造轮子:string类的模拟实现
前面我们学习了string类型中常见函数接口的使用,今天这篇文章我们重点是要对string做到知根知底,这样我们才知道更加熟练地使用string来处理各种问题。
2023-02-09 23:43:50
610
6
原创 【C++之容器篇】精华:string常见函数接口的熟悉与使用
今天开始我们要开始学习C++中的一些常见的容器了,学习这些容器需要学会如何使用这些容器的常见的函数接口,同时还要学会这些容器的底层实现原理,这个能够为我们刷OJ题打下良好的基础。
2023-02-08 18:32:50
747
10
原创 【C++之进阶提升】深剖面向对象三大特性之多态
面向对象三大特性是:封装,继承和多态。前面我们已经学习了封装和继承,今天我们重点就是来学习最后一个特性:多态。在现实生活中通常会有这样场景:不同的身份去请求同一个服务,结果是不一样的。为什么会出现这样的结果?这就是我们今天要解决的问题:多态
2023-02-07 22:16:20
845
6
原创 【C++之进阶提升】两万字深剖面向对象三大特性之继承
在实现类的过程中,我们发现很多相近的类是具有一些共同的属性的,那么如果我们不讲究任何技巧,那么结果就是在每一个类中都实现了同样的代码,比如:人有的一些属性:姓名,性别,年龄,电话号码等,学生和老师和其他的身份也具有相同这些属性,那么我们是否能够采取一些方法复用这些代码,从而减少代码的冗余呢??这就是继承需要回答的问题了。
2023-02-07 00:02:05
332
9
原创 【C++】模板详解(特化后面补)
在我们学习模板之前,我们实现过很多的函数和类,其中函数主要是针对某种数据类型的方法,类主要是存储某种数据类型的结构。我们会发现,我们实现的函数或者类的代码一次只能适用一种特定的类型,如果想要适用多种类型,就必须实现多份代码,这样会出现代码的冗余,显然会比较麻烦,所以C++为了解决这样的问题,就引入了模板,即所谓的泛型编程。
2023-02-06 12:00:36
629
9
原创 【C++之动态内存管理】深剖new和delete的本质
平时我们在函数中创建的变量属于局部变量,其所需要的空间是在栈上开辟的,但是由于栈的大小是有限的,并且比较小,所以很容易就会被用完。因此,我们不能一直在栈上开辟空间,需要学会到其他地方申请空间,比如:堆,堆的大小相比于栈就会比较大了,并且相比于栈上的变量,堆上的变量的生命周期更长。另外,在C语言中我们也学会了使用`malloc,calloc,realloc`等函数来向堆申请空间,那么C++为什么会再重新使用其他方法呢??这也是我们这篇文章需要回答的问题。
2023-02-05 18:14:17
608
4
原创 【C++之类和对象】初始化列表,C++11初始化新玩法,static成员,友元
这篇文章我们重点学习类和对象剩下的内容:初始化列表,C++11新玩法,友元,static成员。
2023-02-05 13:21:07
1413
2
原创 【C++之类和对象】日期类的实现
在我们的日常生活中都需要知道当天的日期,同时也可能需要知道几天后的日期,几天前的日期,还有就是距离我们想要的日期还剩几天,比如:距离高考还有几天这样的信息,所以日期类对于我们任何人来说都是一个非常重要的工具。今天这篇文章将详细介绍日期类中各种功能的实现以及细节
2023-02-04 17:17:53
949
6
原创 【C++之类和对象】默认成员函数
前面我们学习了一些类和对象的基本知识,知道了什么是类,类中包括什么东西,以及能够使用一个类来实例化对象,并且会计算类对象的大小。这次我们重点是学习类中的一些非常重要的知识:默认成员函数和运算符重载。默认成员函数一共有6个,但是比较重要的就是四个:构造函数,析构函数,拷贝构造函数,赋值运算符重载
2023-02-03 20:24:29
466
6
原创 【C++之类和对象】初识类和对象
C++是一门面向对象的语言,之前学习的C语言是一种面向过程的语言,通过学习,我们就需要知道面向过程和面向对象的区别了。本文主要介绍C++中的类和如何使用类来创建出对应的对象,这是学习C++后面更加复杂的内容的基础
2023-02-02 17:40:21
632
7
原创 【数据结构之排序系列】校招热门考点:归并排序
目录前言一、递归版本二、非递归版本前言归并排序在实际的应用中是非常频繁的,通常可以应用于合并两个有序数组,而归并排序就是利用这样的思想,对于一列数,我们如何使用归并排序对其进行排序呢??这个过程就涉及到归并排序中的两大重要步骤:分割+合并。一、递归版本递归版本的归并排序重点是要掌握区间的分割过程中是怎么样的,这个过程比较难理解,最好借助画图+调试进行辅助理解。下面我们会给出归并排序递归版本的相关代码并加以分析其过程:// 归并排序的子函数void _MergeSort(int* a, int
2023-02-01 17:27:23
151
9
原创 【数据结构之排序系列】校招热门考点:快速排序
目录前言一、hoare版本1. 单排2. 单排的代码实现3. 综合排序的实现4. 测试二、挖坑法1. 单排2. 单排的代码实现3. 综合排序的实现4. 测试三、前后指针法1. 单排2. 单排的代码实现3. 综合排序的实现4. 测试前言快速排序的效率是所有排序算法中比较高的一种排序算法了,其非常之重要,在校招中的考试也经常会遇到。我们今天重点学习的就是快速排序的相关内容,快速排序有三种版本,我们都必须熟练掌握。一、hoare版本1. 单排思想:一般情况下,首先选择左边第一个数字作为一个基准值,记
2023-01-31 19:14:27
583
7
原创 【数据结构之排序系列】直接插入排序,冒泡排序,直接选择排序,堆排序,希尔排序
排序算法章节在校招方面考察是相对比较频繁的,所以本章中所学习的所有排序算法需要引起很大的重视。需要掌握各种排序算法的时间复杂度
2023-01-30 21:44:44
1770
9
原创 【数据结构之二叉树系列】层序遍历
前面我们学习的几种遍历方式主要有:前序遍历,中序遍历,层序遍历。这几种遍历方式都是采用递归进行实现的,而今天学习的层序遍历采取的是非递归的方式进行实现,主要是迭代的方式进行实现,同时需要使用队列结构进行辅助实现。
2023-01-29 23:28:19
1431
6
原创 【数据结构之二叉树系列】二叉树算法题
前面学习的是二叉树的一部分基础知识,现在我们主要是总结普通链式二叉树中常见的一些算法题,一些比较高级的二叉树的相关知识我们会放在C++再进行总结。二叉树的解题思想主要是分治算法思想,因此,学习并掌握好分治算法思想对于解决二叉树相关算法题尤为重要。
2023-01-27 23:40:18
471
17
原创 【数据结构之二叉树系列】万字深剖数据结构---堆
堆是一个很重要的数据结构,在排序中充当的角色非常重要,从而后面会衍生出一个堆排序,其效率是非常高的,用途广泛!!!
2023-01-24 23:02:13
409
5
原创 【数据结构之二叉树系列】二叉树的基本知识
前面我们学习的都是一些线性的数据结构,比顺序表,链表,栈和队列,逻辑结构比较简单,今天我们重点学习的是一种非线性的数据结构,就是树形结构
2023-01-23 12:41:09
1731
9
原创 【数据结构之链表系列】认清带头双向循环链表的庐山真面目
前面我们学习的是单链表,我们主要学习的是不带头结点的单链表,这个单链表是单向的,只支持从前往后遍历,也就是说它只能从上一个结点找到下一个结点,不能从下一个结点找到上一个结点,因此在解决一些问题的时候就会比较麻烦。今天我们将学习一个比较优秀的链表:带头双向循环链表
2023-01-11 23:00:04
1494
25
原创 【数据结构之队列系列】队列详解
前面我们学习了一种数据结构:栈,栈是一种只允许在一端尽进行插入删除的数据结构,而今天我们将学习另一种数据结构:队列,队列是一种支持在一端进行插入,在另一端进行删除的数据结构。
2023-01-11 11:36:31
4106
8
原创 【数据结构之栈系列】栈及其经典面试题详解
前面学习的线性表中包含顺序表和链表,这两种数据结构允许在任意位置进行插入和删除,那么有没有一种数据结构是不能在任意位置进行插入删除,而只允许在一边进行插入删除的呢??当然有的,这就是我们今天要学习的一种新的数据结构:栈
2023-01-11 10:18:44
1153
2
原创 一文解决用C语言实现一个链表(全都是细节)
链表是指数据使用一个一个的结点连接起来的数据结构,这样的数据结构中不像顺序表一样,顺序表中不同的数据在内存中的存储空间是相邻的,链表中的相邻结点在内存中的存储位置是没有任何关系的,每一个链表都是由许多的结点组成的,而一个链表,我们需要一个对应的头指针来管理这个链表,也就是说,如果我们拥有一个链表的头指针,那么我们就可以拿到这个链表中的所有的结点,在此基础上,如果我们还学会对链表中的结点进行一些常见的操作(增删查改),那么我们就可以熟练使用链表来解决现实中的问题了
2023-01-06 11:03:26
1953
4
原创 详解文件篇(待更)
在前面,我们学习C语言的时候已经学习过相关的对文件进行操作的函数接口,我们知道对文件进行的操作最常见的有打开文件,关闭文件,对文件进行读写操作,那么今天我们需要学习的是**操作系统层面上的对文件进行操作的理解,会进一步加深对文件的理解和学习
2022-12-12 12:06:42
674
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人