- 博客(28)
- 收藏
- 关注
转载 Linux系统中的“动态库”和“静态库”
Linux系统中的“动态库”和“静态库” 在Linux操作系统中,普遍使用ELF格式作为可执行程序或者程序生成过程中的中间格式。ELF(Executable and Linking Format,可执行连接格式)是UNIX系统实验室(USL)作为应用程序二进制接口(Application BinaryInterf...
2018-09-07 21:30:17
957
原创 排序(下)---快排、归并
排序(下)—快排、归并快速排序 采用分治的思想:每次选区一个数作为基准,让整个数据中凡是大于此数的放在此数的右边,小于此数的放在此数的左边,然后进行对此数的两边进行选基准,如上方式的分法,递归下去,直到分出来的数据只有一个元素,或者无元素,停止分支,因为每次分支都会进行调整,所以当分到每个分支中只剩一个数的时候,整组数据就有序了。首先得定义一个选选基准,并进行一次的分支的方...
2018-09-01 22:39:19
1733
1
原创 排序(中)---选择、冒泡
排序(中)—选择、冒泡选择排序 简单来说就是众神归位法,每一趟排序都会选出一个最大的和一个最小的数据,并放在该放的位置上。由小到大进行排序:遍历整个数据,选出最大的数据(下标),与最后一个下标的数据进行交换,数组的大小减一。遍历剩余的数据,选出最大的数据(下标),与最后一个剩余数据的最后一个下标的数据进行交换。直到剩余的数据中只有一个元素,排序完成。时间复杂度都是...
2018-09-01 22:38:08
685
原创 排序(上)---插排、希尔、堆排
排序(上)—-插排、希尔、堆排插入排序 给每个新增的数在已有的数列中找到合适的位置,然后插入进去 例如一个由小到大的排序: 原数组为: 4, 5, 2, 9, 3, 6, 8, 7现在我们有了一个数组,我们可以假装现在排过序的只有第一个数,也就是说已有序列是第一个数(i和j是下标,key代表当前要插入的数,j代表当前已经插入到了第几个数,i是动态的用来与...
2018-09-01 22:33:49
829
原创 STL模板库
STL标准模板库内容:常见的数据结构:将常见数据结构封装 线性结构特殊线性结构二叉树结构(搜索树)哈希通用算法:与类型无关的算法,与数据结构无关,用户可定制 特点:通用性强效率高六大组件容器线性结构的容器(序列式容器)string(动态顺序表,char型,也叫字符串) array(静态顺序表)(C++11添加进STL...
2018-09-01 22:29:42
2847
原创 模板
模板泛型编程 特点:通用灵活函数模板 模板函数不是一个单独的函数,时编译器生成代码的规则 格式://例子说明:template<class T>//template关键字用来创建模板,其中T不是类名,是代表是一种类型或数据,也可以使用typename代替classT Add(T left, T right)//生成函数的规...
2018-09-01 22:24:16
674
原创 多态
多态和虚函数什么是多态? 同一种事物在不同场景下表现出的所中形态(可以比喻为一个会说话的人,见人说人话,见鬼说鬼话) 例如:* 的处境、函数的重载(静态的多态)静态的多态:程序在编译期间就确定程序的行为函数重载泛型编程动态的多态:程序在运行期间确定程序的行为实现多态的条件基类中必须包含虚函数(在成员函数之前加上virutal 关键字),并...
2018-08-23 15:15:08
1509
原创 继承和派生
继承和派生单继承 为了代码复用继承类的声明格式: class [派生类名] : [继承权限] [父类名]class Base//基类{public: int _pubB; Base(int pub, int pro, int pri) :_pubB(pub) ,_proB(pro) ,_priB...
2018-08-23 15:12:07
567
原创 复杂度
时间复杂度和空间复杂度 为什么要有时间复杂度和空间复杂度?它们能干什么? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们都知道,一台计算机是有固定的内存空间和计算速度的,如果这里有两个程序,一个只需要2KB的内存空间,并且只需要cpu计算100次就能达到目的,而另一个需要5KB的内存空间,并且需要CPU计算1000次才能得出结果,
2018-08-14 13:28:31
581
原创 位图和海量数据
位图和海量数据问题什么是位图? 问题: 有40亿个数,未排序,设计程序能很快的判断出一个个数据在不在其中。 如果直接将者40亿个数放在内存中那么需要 40亿*4字节 = 160亿字节,大概是2^34字节,也就是2^4GB空间,16G内存,抱歉,我的电脑只有8G内存,那此时应该怎么办呢? 思考:我们会发现我们只是为了表示在与不在,那我们为什么要这么大的空间呢...
2018-08-11 10:27:11
678
原创 非连续内存分配
非连续存储分配需求背景连续分配内存的缺点分配给程序的物理内存必须连续存在外碎片和内碎片内存分配的动态修改困难内存利用效率低非连续分配的设计目标 提高内存利用效率和管理灵活性允许一个程序使用非连续的物理地址空间允许共享代码于数据支持加载和动态链接实现虚拟地址和物理地址的转换软件实现(灵活,开销大)硬件实现(够用,开销小)...
2018-08-06 22:55:11
722
原创 哈希(hash、散列表)
哈希的概念 可以认为哈希有着数组的思想,它将所有的数据段拼成一个数组(顺序表)进行存储,通过哈希函数,可以基本上以O(1)的时间复杂度来查找和存储数据。哈希函数 通过数据段中的唯一关键字(key),经过某种算法,得出此数据段在整个哈希数组(顺序表)中的的下标,然后直接取元素即可。哈希的存储(插入)过程 有数据结构如下://数据段(key,val...
2018-08-06 22:52:08
932
原创 C++内存管理(new操作符和delete操作符)
##new操作符和delete操作符 1. 使用new [类型] 可以申请一个[类型]的空间,返回值为[类型]的指针,例如new int(申请单个类型的空间) , new int[10](申请数组的空间)。 2. new申请的空间也是在堆里。 3. 使用new [单个类型](初始化值) 可以进行初始化,连续的空间不可以使用此方式进行初始化 4. 用delete [单个类型] 来释放单个类型...
2018-08-06 22:47:33
657
原创 类和对象
类和对象类的定义Class 类名{ 函数; 变量};类里面的函数可以在类里面进行定义 缺点:多次引用的时候会出现函数重复定义有点:但是编译器很有可能会将它定义为内联函数类的声明(函数的声明)在.h 头文件里,类的定义(函数的定义)在.c 文件里类的封装定义 类+访问限定符 就叫封装 访问限定符: publicpriva...
2018-08-06 22:44:44
571
原创 计算机存储以及连续内存分配
计算机内存层次 速度又高到低分别是寄存器、高速缓存、内存、外存。 处理器是从寄存器拿数据的,寄存器是从高速缓存拿数据的,但是在CPU中是看不到有高速缓存的存在,因为高速缓存是通过硬件(MMU)实现的,如果拿数据的时候高速缓存中没有,会进一步从内存中拿取。 内存中如果拿取不到数据,那就会通过操作系统的控制,从外存中拿取操作系统的内存管理MMU:在系统...
2018-07-26 22:28:10
1707
原创 Linux文件结构与权限
Linux文件结构 在linux系统中,所有的文件及目录都可以归结一个树状结构,一个以根目录为根节点向下的分支结构 根目录的绝对路径为 / ,在Linux中,大部分的操作都是通过改变当前工作路径到指定位置(cd 命令)
2018-07-26 12:25:22
694
原创 中断、异常、系统调用
系统调用 应用程序主动向操作系统发出的服务请求 操作系统服务的编程接口 通常由高级语言编写(C或C++) 程序访问通常是通过高层次的API接口而不是直接进行系统调用。系统调用的实现 每个系统调用都对应一个系统调用编号来维护表的索引 系统调用接口调用内核态中的系统调用功能实现,并返回系统调用的状态和结果 用户不需要知道系统调用的实现,需要设置调用的...
2018-07-25 22:19:06
807
原创 BIOS
计算机系统启动BIOS 固化到计算机主板上的程序 包括程序设置、自检程序和系统自启动程序 BIOS-MBR(主引导记录,但只能描述4个分区)、BIOS-GPT(全局唯一表述分区表,可以描述更多的分区)、PXM(网络启动标准,网络启动) 启动时计算机内存和磁盘布局 &n...
2018-07-25 22:17:55
1365
原创 初入C++
C++第一课命名空间为了防止在同一个工程或文件中两个相同变量的命名冲突 一个命名空间就是一个作用域 命名空间的属性命名空间里面可以放 变量函数命名空间(q嵌套)命名空间的使用[空间名]::[空间内容](只是一次使用某个空间的内容) using namespace [空间名] (默认使用某个空间) using [空间名] :: [...
2018-07-22 19:59:14
525
原创 linux入门级指令
Linux指令linux指令格式Linux的大部分指令格式都是: 指令名称 选项 路径(可无) 以上只是linux种大部分的命令格式,但并不是所有的命令都是这个格式。linux的常用命令ls (list) 语法: ls [选项][目录] 功能: 当[目录]为一个目录文件的时候作用为显示目录里的文件和目录,当[目录]为一个文件的时候作用为文件的时候作...
2018-07-20 10:16:34
643
原创 c语言自定义类型——结构体、枚举、联合
c语言自定义类型——结构体、枚举、联合结构体我们都知道数组是相同类型元素的集合,那有没有一种数据类型可以将不同类型的元素放在一块儿呢? 结构体类型了解一下。结构体类型的定义struct stu{ char name[10]; int age; char sex[4];};以上就是简单的定义了一个 struct stu 结构体类型,其中...
2018-05-25 20:22:02
1031
原创 最让人头疼的指针们(含二维数组)
指针数组首先是一个数组其次每个元素都是指针类型指针指向的类型在定义时也已经确定指针数组的声明首先是声明的格式:(基本类型)*(指针数组名)[元素个数];这里举个例子:char* arr[10];数组arr就是一个指针数组,怎么看呢?来,跟着我的步伐:首先arr左边是一个*号,右边是[ ]号,我们知道arr是先和[ ]号进行匹配,那么说明ar...
2018-05-21 16:02:30
1146
1
原创 可变参数函数的创建以及源码的剖析
可变参数函数什么是可变参数?想象一下库函数的printf函数,这个函数不管用多少参数只要正确引用,都可以实现它的功能,但是当我们写函数时,其参数只能是固定的有限个,并且类型都固定,所以这就很局限。因此我们将参数的数量、类型可变的函数称为可变参数函数。可变参数函数的创建要想写可变参数的函数,首先你得对函数的栈帧有非常深的了解。先放上一个问题:请实现一个求平均值...
2018-04-28 22:43:28
553
原创 关于函数的调用堆栈
堆栈的概念堆栈一般指的就是栈,一种内存中存取数据的方式,最大的特点就是后进先出,一个只有一个门的仓库一样,最后放入的东西往往被先拿出来,这种存取模型就叫作栈。函数的调用堆栈过程函数的创建都是创建在内存的栈区里面的,所以函数的调用方式也是一种后进先出:我们先来看一段代码:#include<stdio.h>#include<stdlib.h>in...
2018-04-27 17:43:44
3582
原创 C语言小游戏-----扫雷
C语言的第二个小项目 —– 《扫雷小游戏》扫雷这个游戏在我高三之前我一直认为扫雷这款游戏是一个运气游戏,但是第一次知道其规则之后觉得扫雷是一个很神奇的游戏,因为那些数字和雷的数量怎么能这么凑巧?现在一想,当时真的太天真,因为现在知道了这个游戏开发者的思维,让我来帮你分析分析。别急,先来把扫雷机制想想:当每次玩家点击一个块时,这个块会显示周围九个块区域有雷的数量,那么我们就完全可以设...
2018-04-13 23:34:03
906
原创 C语言小游戏设计——三子棋
学了c语言这么长时间也没有个让我自己满意的成果,此次编写三子棋小游戏也算是人生中第一个项目了,接下来直接进入项目:首先是任务的要求: 1、三子棋首先得有个棋盘,随后得有棋子。 2、棋子棋盘都有了当然还得让电脑会下棋子和人进行对弈。 3、最后就是判断输赢啦。直接进入代码的编辑: 先捋一下整个下棋的过程, 首先棋盘需要...
2018-04-11 22:01:23
2369
原创 神奇的C语言数组(一维)
c语言的数组 数组指的是相同数据类型的集合,说白了,就是把相同数据类型的数据集合在一起。例如: int arr1[10]={ 0 },int arr2[10][10] = { 10 }, char arr3[10] = {'a'}(char型数组的先不介绍)一维数组一维数组的创建 int arr[10]={ 0 }; 等号前面意思为创建一个int 型的数组...
2018-04-05 13:38:10
1376
原创 C语言操作符总结
C语言操作符 C语言里面有很多操作符,按照我的个人,我会将它们分为以下两种: 1、常用的操作符(很容易理解并被使用的):+、-、*、/、=、==、!=、<、>、<=、>=、&&、||、!、++、--、+=、-=、*=、/=。 2、不常用的操作符(意义比较复杂,大家都不太喜欢用的那种):<<、>>、~、^、&、...
2018-03-31 00:11:24
565
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人