04 2020 档案

摘要:之前说了单链表,下面来说一下双向链表。和单链表不同,双向链表中的每个节点都有两个指针,分别用来指向它的前驱和后继。所以从双向链表中的 任意一个节点开始,都可以很方便地访问到他的钱去纪念和后继结点。下面给张图来展示一下什么是双向链表 这就是双向链表,每个结点都有两个指针,其中表头结点的前驱指针prio 阅读全文
posted @ 2020-04-30 22:02 和运气碰碰 阅读(544) 评论(0) 推荐(0)
摘要:二分法排序其实是一种改进的插入排序,也是通过查找待插入位置来实现排序,这和插入排序是类似的。 算法思想,在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半部分再进行折半,否则对后半进行折半, 直到left<right,然后再把第i个元素前1位与目标位置之间 阅读全文
posted @ 2020-04-30 18:04 和运气碰碰 阅读(7416) 评论(0) 推荐(0)
摘要:直接插入排序简称插入排序,对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入 到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。在其实现过程中使用双层循环,外层循环对除了第一个元素之外的所有元素, 内层循环对当前元素前面有序表进行待插入位 阅读全文
posted @ 2020-04-30 17:16 和运气碰碰 阅读(344) 评论(0) 推荐(0)
摘要:鸡尾酒排序又叫双向冒泡排序,是冒泡排序的一种变形。它与冒泡排序的不同处在于排序时是以双向在序列中进行排序。以数组为例 数组中的数字本是无规律的排放,先找到最小的数字,把他放到第一位,然后找到最大的数字放到最后一位,然后再找到第二小的数 字放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到完 阅读全文
posted @ 2020-04-30 15:54 和运气碰碰 阅读(245) 评论(0) 推荐(0)
摘要:冒泡排序、选择排序是在学习排序算法时必先接触到的,作为一种简单的排序算法,它们的思路都很简单,所以就不再详细介绍了,直接看代码吧 1 #include<iostream> 2 using namespace std; 3 4 void swap(int a[],int i,int j) 5 { 6 阅读全文
posted @ 2020-04-29 22:01 和运气碰碰 阅读(168) 评论(0) 推荐(0)
摘要:在查找数据的时候除了暴力查找外,还可可以使用二分法查找,二分法查找又叫折半查找。二分法在查找的时候效率是比较高的,但是它有 局限性,就是仅适用于顺序表,不管是升序还是降序都适用。原理就是取顺序表的中间那个元素mid,然后用中间的元素mid和待查找元素x进 行比较大小,以此改变下次的查找区间,使得下次 阅读全文
posted @ 2020-04-29 21:25 和运气碰碰 阅读(2084) 评论(0) 推荐(0)
摘要:队列和链表、堆栈一样都是一种线性结构。只不过队列的操作限定在两端,只能够在队头和队尾进行操作。它的特性是先进先出,在队尾进队头出。 队列的物理结构包括顺序存储结构和链式存储结构,也就是我们常说的顺序队列和链式队列。 这里就说一下顺序队列,顺序存储结构要预先分配内存,最好能知道队列的最大长度,在顺序队 阅读全文
posted @ 2020-04-29 18:20 和运气碰碰 阅读(778) 评论(0) 推荐(0)
摘要:栈是一种线性的数据结构,它的操作限定在了栈顶,即只能够在栈顶进行数据的插入,删除以及其它各种操作;栈的操作特性为先进后出,下面给出 一张图来说明一下栈的入栈操作。 通过这个图,发现入栈都是在栈顶进行的,top等于base表示此栈为空栈。上面的入栈顺序为A、B、C、D,在出栈的时候由于只能在栈顶操作, 阅读全文
posted @ 2020-04-29 11:07 和运气碰碰 阅读(1160) 评论(0) 推荐(0)
摘要:链表的操作包括插入、删除、翻转、清空、判空、求链表长度等,下面分别找了链表的插入和删除操作的图,第一个是插入,第二个是删除。 在插入的时候,要先找到待插入的位置,一般是找到待插入位置的前一个位置,假如要在3号位置插入,那就找到2号位置,这样方便插入,下面 的代码中就提到了这一点,然后把新结点插入在3 阅读全文
posted @ 2020-04-28 23:10 和运气碰碰 阅读(687) 评论(0) 推荐(0)
摘要:介绍过了头插法,再来介绍一下尾插法。假如我们现在要在链表中插入一些数据:1、2、3、4、5,并从键盘输入这些数据,最后插入到链表中的数据的顺序和输入数据的 顺序是一致的,即{1,2,3,4,5},因为尾插法每次都是在末尾部插入数据的,先插入1,此时表中数据为{1};接着在尾部插入2,此时表中数据数据 阅读全文
posted @ 2020-04-28 18:06 和运气碰碰 阅读(1746) 评论(0) 推荐(0)
摘要:要使用链表,就要先创建一个链表,这里只说单链表。先介绍一下头插法创建单链表链表。假如我们现在要在链表中插入一些数据:1、2、3、4、5,并从键盘输入这些数据, 最后数据存入到链表中是反过来的,即{5,4,3,2,1},因为头插法每次都是在头部插入数据的,先插入1,此时表中数据为{1};接着在头部插入 阅读全文
posted @ 2020-04-28 17:27 和运气碰碰 阅读(3018) 评论(0) 推荐(0)
摘要:链表和数组一样,都是一种线性表,只不过链表中逻辑上相邻的数据在物理地址上不一定相邻,因为链表占的内存并不一定是一块儿连续的内存空间, 内存单元也可能是分散的。而数组则是占一片连续的内存空间,所以逻辑上相邻的数据在物理地址上也是相邻的。链表的插入、删除效率很高,但是不支 持随机访问,要想访问某一数据, 阅读全文
posted @ 2020-04-28 16:49 和运气碰碰 阅读(158) 评论(0) 推荐(0)
摘要:map的遍历可以通过迭代器实现,也可以用指针形式来实现,在前面已经说过了,不再重复。下面介绍一下map的常用操作 1. 判断map容器中是否存在某一关键字,用map自带的成员函数count(),参数为关键字,返回值为int型数据。 返回值为0或1,若存在返回1,不存在返回0。 2. 在map容器里面 阅读全文
posted @ 2020-04-28 16:21 和运气碰碰 阅读(739) 评论(0) 推荐(0)
摘要:map是STL中常用的一个容器,下面介绍一下map。 (1) map是STL中的一个关联容器,它提供了一对一的数据处理能力,即一对一的映射,所以在实现一对一数据的时候,它提供了快速的通道。 (2) 一对一的映射中,第一个参数是关键字key,并且每个关键字在map中只能出现一次。第二个参数是关键字ke 阅读全文
posted @ 2020-04-28 14:46 和运气碰碰 阅读(1161) 评论(0) 推荐(0)
摘要:和数组一样,数组有二维的数组,vector也有二维的vector。下面就介绍一下二维vector的使用方法。 一般声明初始化二维vector有三种方法 (1) vector< vector<int> > v(n,vector<int>(m)); //在声明的时候就一次性指定vector内外层的大小; 阅读全文
posted @ 2020-04-28 11:24 和运气碰碰 阅读(9458) 评论(0) 推荐(3)
摘要:vector在做形参的时候传参的方式和普通的变量是一样的,要么传值、要么传引用、要么传指针。 现在分别定义三个以vector为形参的函数: (1) fun1(vector <int> v);传值 (2) fun2(vector <int> &v);传引用 (3) fun3(vector <int> 阅读全文
posted @ 2020-04-28 09:18 和运气碰碰 阅读(3426) 评论(0) 推荐(0)
摘要:对于之前没有接触过vector的初学者来说,经常会把vector和数组弄混,因为二者在用的时候比较像,下面就详细的来介绍一下vector和数组的区别。 (1) 首先,vector类似于数组,有一段连续的内存,有固定的起始地址,可进行随机存取操作,即可以像数组一样用[ ]操作符进行元素的随机访问 (2 阅读全文
posted @ 2020-04-28 08:50 和运气碰碰 阅读(3796) 评论(0) 推荐(1)
摘要:如果不清楚vector是什么的话就去看我的另一篇随笔吧:https://www.cnblogs.com/buanxu/p/12791785.html 进入正题,vector和string一样,也是一种顺序容器,并且它俩的成员函数及特性也都差不多类似;它俩的区别就在于string只能存放字符,而vec 阅读全文
posted @ 2020-04-26 21:32 和运气碰碰 阅读(411) 评论(0) 推荐(0)
摘要:c语言里是没有string型的,string在c++里面。有的时候在c++里要用scanf、printf输入输出string型字符串,这是可以实现的,不过要做一点处理。 具体操作看代码: #include<cstdio> #include<string> using namespace std; i 阅读全文
posted @ 2020-04-26 20:05 和运气碰碰 阅读(1760) 评论(0) 推荐(0)
摘要:之前说过 string和vector一样,也是一种顺序容器,并且它也自带成员函数,用法和vector的成员函数差不多,不过它只能用来存放字符,也就是字符串。 在c++中,<string>基本上已经包含在<iostream>里面了,但即便如此,在我们用到string类的时候还是要加上头文件<strin 阅读全文
posted @ 2020-04-26 15:24 和运气碰碰 阅读(2319) 评论(0) 推荐(0)
摘要:其实c++自身是没有四舍五入函数round()的,若果你要用到的话,可以自己写一个round(),不过要用到floor()和ceil这两个函数如下: 1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 5 double ro 阅读全文
posted @ 2020-04-25 22:01 和运气碰碰 阅读(6282) 评论(1) 推荐(0)
摘要:<cstring>是c++对c中的<string.h>进行了重写,这两个头文件中的函数用法是一样的,所以在用的时候包含哪个头文件都行。下面介绍一下 <cstring>头文件里常用的两个函数;分别是memset和memcpy。 1. memset(void* buffer,int a,size_t n 阅读全文
posted @ 2020-04-25 21:47 和运气碰碰 阅读(953) 评论(0) 推荐(0)
摘要:很多人都只知道sort()是通过快速排序实现,但它并不只是简单的快排;首先它对普通的快速排序进行了优化;此外,它还结合了插入 排序和堆排序。系统根据数据形式和数据量,来选择合适的排序方法,这并不是说每次排序只选择一种方法,它是在一次完整的排序中, 根据不同的情况来选择不同的方法。例如,对一个数据量较 阅读全文
posted @ 2020-04-25 13:20 和运气碰碰 阅读(2063) 评论(0) 推荐(1)
摘要:先说一下,本篇文章我没有讲sort()实现排序的原理,我写在另一篇文章中了,如果想了解的话,可以看一下,附上链接:https://www.cnblogs.com/buanxu/p/12772700.html sort(v.begin(),v.end(),cmp),它是用来对一组序列进行排序的;有三个 阅读全文
posted @ 2020-04-25 11:17 和运气碰碰 阅读(2830) 评论(0) 推荐(0)
摘要:先说一下STL操作的区间是 [a, b),左边是闭区间,右边是开区间,这是STL的特性,所以<algorithm>里面的函数操作的区间也都是 [a, b)。 先声明一下, sort()函数在这篇文章中没讲,因为sort()函数功能比较强大(我自己认为的,哈哈),所以我专门用了另一篇文章来写sort( 阅读全文
posted @ 2020-04-24 22:21 和运气碰碰 阅读(755) 评论(0) 推荐(0)
摘要:C++中没有自带的random函数,要生成随机数就需要用c文件"stdlib.h"里的函数rand()和srand(),不过,由于rand()的内部实现是用线性同余法做的, 所以生成的并不是真正的随机数,而是在一定范围内可看为随机的伪随机数,下面分别介绍一下各自的用法 1. int rand(voi 阅读全文
posted @ 2020-04-24 11:26 和运气碰碰 阅读(646) 评论(0) 推荐(0)
摘要:先说一下c++标准库并没有提供所谓的日期类型,而是继承了c的日期类型 <cmath>里面有些常用的函数,比如计时函数clock()、获取系统时间的函数time(),下面就具体的介绍一下 1. clock() c++中对clock()的定义为:clock_t clock(void);可以看出,cloc 阅读全文
posted @ 2020-04-23 21:24 和运气碰碰 阅读(5356) 评论(0) 推荐(0)
摘要:<cmath>里面有很多数学函数,下面说一下常用的一些函数吧;直接把函数原型给了出来,用的时候注意参数 先说一下,c++自身是没有四舍五入函数round()的,若果你要用到的话,可以自己写一个round() ,我用另外 一篇文章写了一个round()函数,附上链接:https://www.cnblo 阅读全文
posted @ 2020-04-23 14:29 和运气碰碰 阅读(1551) 评论(0) 推荐(0)
摘要:在c++中,有的时候会遇到变长的数组(不管是一维的还是二维的),这个时候就需要用到动态数组了,并且要用new和delete两个操作符,这俩操作符一般成对使用。 先说一维的动态数组吧,直接上代码 1 #include<iostream> 2 using namespace std; 3 int mai 阅读全文
posted @ 2020-04-22 22:16 和运气碰碰 阅读(42253) 评论(1) 推荐(3)
摘要:在使用vector、map等容器的迭代器的时候,常常会与指针弄混(注意,容器适配器 stack、queue 和 priority_queue 没有迭代器,可以使用这些容器自带的成员函数 来对元素进行访问),因为他们的一些使用方法有些类似,还是举个例子: vector<int> v; //先声明一个v 阅读全文
posted @ 2020-04-22 21:30 和运气碰碰 阅读(1856) 评论(0) 推荐(1)
摘要:引用和指针做形参是很常见的问题,但是它们在做参数的时候是有区别的。先说一下指针吧,指针他是一个变量,有具体的值,他的值是一个地址(非const)。 而引用是对一个变量的引用,是变量的别名,并且在引用的时候必须要初始化。举个例子吧: int a=2; int &b=a; // b是对a的引用,a、b是 阅读全文
posted @ 2020-04-22 18:19 和运气碰碰 阅读(2818) 评论(0) 推荐(1)
摘要:在c++中,我们使用cin和cout进行输入输出会比用scanf和printf更加简洁和方便,但是当程序有大量IO的时候,使用cin和cout进行输入输出会比用scanf和printf更加耗时, 在数据量较小时则无明显差别。如果没要求效率的话,用cin和cout或scanf和printf都行;但是如 阅读全文
posted @ 2020-04-22 12:59 和运气碰碰 阅读(1121) 评论(1) 推荐(0)
摘要:在c++中,有的时候要对输出的double型或float型保留几位小数,这时可以使用setflags(ios::fixed),不过要先包含有文件<iomainp>,具体如下 例: #include<iomainp> double d=3.12345; //输出d并保留两位小数 cout<<setfl 阅读全文
posted @ 2020-04-22 11:01 和运气碰碰 阅读(1719) 评论(0) 推荐(0)
摘要:在c++中有的时候想要引用c头文件里的函数有两种方法;就拿c语言里面的<stdlib.h>举例 在c中我们想要用<stdlib.h>里的函数,形式为:#include<stdlib.h>,而在c++中我们想要用 <stdlib.h>里的函数,第一种形式为:#include<cstdlib>,去掉了后 阅读全文
posted @ 2020-04-21 21:37 和运气碰碰 阅读(4607) 评论(0) 推荐(0)