
数据结构
文章平均质量分 77
使君杭千秋
这个作者很懒,什么都没留下…
展开
-
STL之vector去重三步曲(利用unique函数)
unique()函数作用是“去掉”容器中相邻元素的重复元素,然后返回指向第一个重复元素的迭代器。unique()实质上是一个伪去除,它并不是真正把重复的元素删除,而是用不重复的元素把重复的元素覆盖了,所以总长度其实是不变的。 因此在利用unique()函数前需要对容器内的数据排序,可以通过sort()函数实现。sort()函数的作用是对容器指定范围内的元素按指定格式进行排序,默认从小到大。 在利用unique()函数后需要擦除从返回的迭代器对于的元素到最后元素的...原创 2020-10-09 18:32:43 · 2093 阅读 · 0 评论 -
STL中迭代器的介绍及分类
STL中迭代器的介绍及分类 要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。一、按定义分类迭代器按照定义方式分成以下四种:正向迭代器,定义方法如下: 容器类名::iterator 迭代器名;常量正向迭代器,定义方法如下: 容器类名::const_iterator 迭代器名;反向迭代器,定义方法如下:原创 2020-09-14 11:27:52 · 680 阅读 · 0 评论 -
STL中容器的介绍及分类
STL中容器的介绍及分类 C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现,称为容器,如 queues(队列)、lists(链表)、和 stacks(栈)等。一、容器介绍 STL容器是由一些运用最广的一些数据结构实现出来的。常用的数据结构有array(数组)、vector(向量)、list(列表)、tree(树)、stack(栈)、queue(队列)、hash table(散列表)、set(集合)、m原创 2020-09-14 09:52:26 · 7514 阅读 · 1 评论 -
STL中的关联式容器——map(映射)
STL中的序列式容器——map(映射)map,即“映射”。map是关联容器的一种,具体实现采用了红黑树的平衡二叉树的数据结构。它提供一对一(其中第一个称为关键字key,每个关键字只能在map中出现一次,第二个称为该关键字的值value)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。由于是利用了红黑树实现,因此可以快速插入key-value记录和快速删除记录。并且对于迭代器来说,可以修改value,而不能修改key,而且它根据key修改value记录,因此增加原创 2020-09-13 23:19:22 · 181 阅读 · 0 评论 -
STL中的关联式容器——set(集合)
STL中的序列式容器——set(集合)set,即“集合”。set是关联容器的一种,具体实现采用了红黑树的平衡二叉树的数据结构。由于采用了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时, 它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树的所有节点的键值,而小于右子树所有节点的键值;另外,还得确保根节点左子树的高度与右子树的高度相等,这样,二叉树的高度最小,从而检索速度最快。要注意的是,它不会重复插入相同键值的元素,而采取忽略处理。平衡二原创 2020-09-13 21:49:09 · 451 阅读 · 0 评论 -
STL中的序列式容器——priority_queue(优先队列)
STL中的序列式容器——priority_queue(优先队列)priority_queue,即“优先队列”。普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。priority_queue是C++ STL的一个重要成员,使用它时需要包含头文件:#include <queue>;prio原创 2020-09-13 20:43:29 · 546 阅读 · 0 评论 -
STL中的序列式容器——queue(队列)
STL中的序列式容器——queue(队列)queue,即“队列”。队列是一种先进先出(FIFO)的元素序列,访问和删除都只能对队顶的元素(即最先一个被加入队列的元素)进行,但是元素只能被添加到队尾。队列内的元素不能访问,如果一定要访问队列内的元素,只能将其上方的元素全部从队列中删除,使之变成队列顶元素才可以。queue是C++ STL的一个重要成员,使用它时需要包含头文件:#include <queue>;queue是容器适配器的一种,容器适配器中的数据是以FIFO 的方式组织的。一原创 2020-09-13 18:34:43 · 433 阅读 · 0 评论 -
STL中的序列式容器——stack(栈)
STL中的序列式容器——stack(栈)stack,即“栈”。栈是一种后进先出(LIFO)的元素序列,访问和删除都只能对栈顶的元素(即最后一个被加入栈的元素)进行,并且元素也只能被添加到栈顶。栈内的元素不能访问,如果一定要访问栈内的元素,只能将其上方的元素全部从栈中删除,使之变成栈顶元素才可以。stack是C++ STL的一个重要成员,使用它时需要包含头文件:#include <stack>;stack 是容器适配器的一种,容器适配器中的数据是以 LIFO 的方式组织的。只能访问 st原创 2020-09-13 17:28:58 · 682 阅读 · 0 评论 -
STL中的序列式容器——deque(双端队列)
STL中的序列式容器——deque(双端队列)deque 是双端队列类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。deque是C++ STL的一个重要成员,使用它时需要包含头文件:#include <deque>;deque和vector非常相似,属于序列式容器,都是采用动态数组来管理元素,提供随机存取,并且有着和vector一样的接口,不同的是deque具有首尾两端进行快速插入、删除的能力。一、deque 的初始化有以下方式,举例说明如下:deque<in原创 2020-09-13 16:59:13 · 461 阅读 · 0 评论 -
STL中的序列式容器——list(列表)
STL中的序列式容器——list(列表)list是列表类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。list 是C++ STL的一个重要成员,使用它时需要包含头文件:#include <list>;list的优势在于在任何位置执行插入和删除动作都非常迅速,因为改变的仅仅是链接。一、vector 的初始化有以下方式,举例说明如下:list<int> listname;list<int> listname(5);list<int>原创 2020-09-13 13:48:47 · 340 阅读 · 1 评论 -
STL中的序列式容器——vector(向量)
STL中的序列式容器——vector(向量)vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector 是C++ STL的一个重要成员,使用它时需要包含头文件:#include <vector>;vector 容器的长度不固定,能够在程序运行时动态地改变。一、vector 的初始化可以有五种方式,举例说明如下:vector<int> a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但原创 2020-09-12 22:08:24 · 685 阅读 · 0 评论 -
数据结构:内排序(C++)
数据结构:内排序一、插入排序基本思想:逐个处理待排序的记录。每个新记录与前面已排序的子序列进行比较,将它插入到子序列中正确的位置。排序过程:(1)输入一个记录数组A,存放着n条记录。(2)先将数组中第1个记录看成是一个有序的子序列,然后从第2个记录开始,依次逐个进行处理(插入)将第i个记录X,依次与前面的第i-1个、第i-2个,…,第1个记录进行比较,每次比较时,如果X的值小,则交换,直至遇到一个小于或等于X的关键码,或者记录X已经被交换到数组的第一个位置,本次插入才完成。(3)继续处理,直至原创 2020-08-06 10:55:43 · 604 阅读 · 1 评论 -
数据结构/图论:最小生成树问题
数据结构/图论:最小生成树问题一、问题描述图的生成树是一个包含所有顶点的子图并且是一棵树。一个图可能有很多生成树。生成树问题是网络理论解决的典型问题之一,应用领域非常多。应用:使连接电路板上一系列接头所需焊接的线路最短;使在几个城市间建立电话网所需的线路最短。二、算法实现1、Prim算法算法思想:Prim算法是一个贪心算法。取图中任意一个顶点v作为生成树的根,之后往生成树上添加新的顶点w。在添加的顶点w和已经在生成树上的顶点v之间必定存在一条边,并且该边的权值在所有连通顶点v和w之间的边中取值原创 2020-08-04 12:36:44 · 536 阅读 · 0 评论 -
数据结构/图论:最小路径问题
数据结构/图论:最小路径问题一、分类最短路问题( short- path problem)是指若网络中的每条边都有一个数(权)值(长度、成本、时间等),则找出两节点之间总权值和最小的路径就是最短路问题。●最短路径问题的分类:已知全局信息的最短路径问题已知局部信息的最短路径问题●最短路径问题的分类:无权图中最短路径有权图中的最短路径含有负边的有权图中的最短路径●最短路径问题的分类:单源最短路径全局最短路径两点最短路径二、算法实现1、Dijkstra算法解决问题类型:单源最短路径原创 2020-08-04 11:14:00 · 1443 阅读 · 0 评论