自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 fread()和fwrite()使用。

我们来看fread()和fwrite()函数都接受四个参数。fread读取nmwmb个对象,每个对象size大小。从stream读取到ptr中。fwrite()也类似。从ptr中读取数据到stream中,读取nmemb个对象每个对象size大小。但是fwrite()的ptr只拥有读的权限。如果读写成功,则返回读写对象个数。如果一个文件有很多字符fread(fps,1,10,fpd);fread(fps,10,1,fpd);两个函数内容都是读取10个字符。前者返回成功对象1..

2021-12-29 21:39:53 744

原创 fgets()和fputs()使用注意

gets()与fgets()区别gets()是标准IO文件下面。传过一个字符串的地址。 永远不要使用这个函数,这个函数不检查边界。因为我们没有把数据输入到约定的地址上,而是输入到输入缓冲区上,并且我们并不知道输入大小。当我们回车的时候,可能造成输入缓冲区溢出。所以我们用fgets()。fgets() 参数需要给定一个字符串的位置,然后字符串的的大小,和一个文件流。fgets()读取比最大字符少一个字符的字符串从文件流中。最后一个字符用空格替代如果定义了读取五...

2021-12-29 21:00:11 428

原创 八大常用排序算法(堆排序,冒泡排序,快速排序,归并排序,桶排序等)不同数据量的时间效率比较

#include<iostream>#include<vector>#include<windows.h>#include<random>constexpr auto sumSize = 10000;//设置想要的数据using namespace std;template<typename T> void selectSorted(vector<T>& array, const int length)//...

2021-12-29 17:21:38 449

原创 Linux c fopen() 与fclose() 使用

fopen 接受两个参数,都是const char* 类型。意味着fopen() 可以读取pathname 内容而不可以修改其中的内容。mode设定模式。该操作拥有的权限。1.fopen()该函数返回一个FILE* 类型 ,该类型是一个结构体指针,意味着返回信息需要一个结构体指针来接收。r拥有只读权限。r+拥有读写权限如果r或r+打开文件不存在,会报NO such file 错误。而w,w+则会新创建文件。2.fclose()参数是一个FILE* 类型。返回值...

2021-12-28 18:27:22 1186

原创 平衡二叉搜索树插入与删除(AVL)

1.为何要引入平衡二叉搜索树 我们知道,二叉搜索树(BST)已经有比较好的查找,插入和删除的效率。但是为什么不满足于二叉搜索树呢?我们来看一种情况,如图1-1: 从中可以看到,该树仍满足二叉搜索树的定义,但是,查找效率已经从O()退化为O(n)级别。变成的了一个链表了。我们看到引起这种变化的根本原因是深度的加深和左右子树失衡导致的。平衡二叉树为了解决这种失衡导致算法效率的退化。2.AVL树的定义平衡因子:在满足二叉搜索树的条件下,对任意结点其左右子树的深度...

2021-08-03 18:45:21 824

原创 二叉搜索树(BST)

1.概念1.1二叉树的定义与其他数据结构一样,二叉搜索树也是由一组数据项所构成的集合。二叉搜索树是一种查找、插入和删除效率都很好的一种数据结构。首先,判断一个树是否为二叉搜索树应该满足以下几点:1.该树首先是二叉树。2.对于任意结点点,如果该结点的左子树存在,左子树上的点都不比该结点更大,如果右子树存在,右子树上的点都不比该结点小。如图1-1,展示了一棵二叉搜索树。1.2二叉搜索树访问方式 数据项之间,依赖各自关键码彼此区分,通过查询关键码查找对应的值。我们称这种访问为...

2021-07-23 12:20:48 310

原创 树与二叉树

我们知道,对于向量vector和列表list属于线性结构。vector实质是由动态数组进行封装,而list内部结构是一个链表。vector的查找效率非常高,最快可以做到l级别(二分查找),而插入和删除效率低,都需要线性的时间。然而列表list恰恰相反,插入删除效率高,查找的效率低。有没有一种数据结构兼有二者优点呢? 树这种结构恰好满足这种要求。1.树的定义 在数学中,树结构被定义为一种特殊的图,也就是说它可以定义为一组元素的二元关系。元素与元素之间存在某种关...

2021-07-21 13:38:33 152

转载 priority_queue优先队列

既然是队列那么先要包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队 优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的和队列基本操作相同:top 访问队头元素 empty 队列是否为空 size 返回队列内元素个数 push 插入元素到队尾 (并排序) emplace 原地构造一个元素并插入队列 pop 弹...

2021-07-14 21:13:10 63

原创 KMP模式匹配算法

KMP算法是由D.E.Knuth、J.H.Morris和V.R.Pratt研究出来的算法。可以大大避免重复遍历的情况也称为克努特——莫里斯——普拉特算法,简称KMP算法。在我们进行字符串的模式匹配中,在主串中寻找相同的子串是非常常用的一种方法。对于字符串匹配问题,我们最容易想到的是利用暴力求解的方法,将子串中的字符逐一与主串相匹配,如果全部相同则匹配成功,如果子串中有一个字符与主串不匹配,子串就移动一个位置,重新与主串匹配。简单来看,这种暴力求解的子串匹配时间复杂度是O(n^2),算法效率并不好。K

2021-07-14 18:19:05 225

原创 c++ 关联容器map使用

目录关联容器和顺序容器的区别关联容器1.map1.1定义map1.2关联容器迭代器遍历1.3map元素的添加1.4map元素删除关联容器和顺序容器的区别 我们知道顺序容器和关联容器有根本性的不同,关联容器的元素是按照关键字来保存和访问的,顺序容器是按照它们在容器中的位置来访问的。这与这些容器的底层存储方式有关,也导致了它们索引、插入和删除效率也由区别。底层原理在这里就不介绍。关联容器标准库定义了8个关联容器:是一个map或一个set,ma...

2021-07-07 16:41:19 161

原创 浅析STL中常见顺序容器的常用方法

什么是Vector 模板类vector 类似于String类,是一种动态数组,在STL中我们把它称为容器,可以在运行阶段设置vector对象的长度,可以在末尾附加数据,可以在中间插入数据,它是new创建动态数组的替代品,vector使用new和delete管理内存,但是是自动完成的。在头文件vector中声明了vector 的模板。...

2021-05-15 12:58:43 411

原创 c++基于静态数组实现列表list

我们知道每种ADT(抽象数据类型) 都有自己的特点,每个·列表里的元素都有某些共性。列表list是我们常用的一种数据结:构,那么列表里的元素有哪些共性:这些集合都是同构的——其中的所有元素都是同一种数据类型. 这些元素有有限个大小 这些元素都是线性的:存在一个首元素和一个末尾元素. 除了末尾元素,每一个唯一的后继,除了首元素,每一个元素都有唯一的前驱。 基本操作构造函数(Construction) 创建空的列表 判空(Empt...

2021-05-09 22:22:55 921

原创 浅析 c++ string 使用方法

最近在做OJ的时候经常会碰到处理字符串的题目,对于字符串我们可以将字符串存储在字符数组中,或者将字符存储在string对象中。或者使用STL容器。本次我们不讨论容器的使用。浅谈string类的使用

2021-05-08 20:10:34 125

空空如也

空空如也

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

TA关注的人

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