
数据结构与算法
文章平均质量分 76
本专栏主要介绍数据结构与算法的相关知识。
liitdar
一位热爱计算机科学技术的软件工程师
展开
-
C++编程语言STL之list介绍
引用list的C++官方描述,如下:;原创 2019-08-21 17:20:09 · 4074 阅读 · 1 评论 -
STL(Standard Template Library)简介
即标准模板库,是惠普实验室开发的一系列软件的统称。从根本上说,STL是一些“容器”的集合,这些“容器”有list、vector、set、map等。同时,STL也是算法和其他一些组件的集合。STL现在是C++编程语言的一部分,因此不用安装额外的库文件。2 WHY STL开发STL的目的是标准化组件,这样就可以使用现成的组件,而不必在使用时重新开发了。STL是一个标准,只规定了STL的接口,内部实现没有要求。原创 2019-08-21 17:18:22 · 651 阅读 · 1 评论 -
“3Sum”类问题介绍
3Sum”类问题,属于已排序的“Two Sum”类问题的升级版,都是给定一个已排序(升序或降序)的整型数组,然后在该数组中寻找若干个值,这些值的总和等于给定的target值。原创 2023-04-03 21:37:41 · 915 阅读 · 1 评论 -
计数排序(Counting Sort)算法介绍
Counting sort是一种基于给定范围数值的排序技术。该算法首先计算给定输入序列(如数组)中每个对象的数量,同时将对象数量值存储在临时数组的对应索引处,最后通过一系列算术操作计算出每个对象在输出序列中的位置。原创 2023-03-29 18:49:15 · 1034 阅读 · 0 评论 -
C++编程语言STL之begin和end函数介绍
c.begin()形式:返回指向容器首元素的iterator;begin(array)或begin(c)形式:返回数组的头指针。c.end()形式:返回指向紧挨尾元素的元素的iterator;end(array)或end(c)形式:返回紧挨数组尾指针的指针。说明:对于end函数来说,给定范围的“终止点”并不包含在给定范围内,而是紧挨着范围内最后一个可用元素的元素。c: 包括begin成员函数/end成员函数的容器;array: 任意类型的数组。原创 2023-03-29 11:36:47 · 4635 阅读 · 0 评论 -
C++编程语言STL之sort函数介绍
sort函数是C++的STL提供的用于对vector或array(中元素)进行排序的函数。sort函数通常使用两个参数,第一个参数是vector或array中待排序的起始点;第二个参数以起始点为基准、加上待排序的长度得到的终止点。sort函数也有第三个参数,当我们想要对元素进行灵活地(如“降序”等)排序时,就可以使用第三个参数了。默认情况下,sort函数以升序排序元素。原创 2023-03-29 10:49:14 · 472 阅读 · 0 评论 -
“Two Sum”类问题介绍
对于“Two Sum”类问题,基本要求为:给定一个整数数组,在该数组中找到两个元素,这两个元素之和等于给定的数字(target),返回这两个元素的索引(下标)值。原创 2023-03-28 11:12:42 · 508 阅读 · 0 评论 -
C++编程语言STL之set及相关容器介绍
关联容器(associative-container)和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。虽然关联容器的很多行为与顺序容器相同,但其不同之处反映了关键字的作用。关联容器支持高效的关键字查找和访问。两个主要的关联容器类型为map和set。map中的元素是一些关键字-值(key-value)对:“关键字”起索引的作用,“值”则表示与索引相关联的数据。set中每个元素只包含一个关键字。原创 2023-03-27 20:55:16 · 555 阅读 · 0 评论 -
算法的时间复杂度和空间复杂度介绍
算法(Algorithm)是指用来操作数据、解决程序问题的方法。对于同一个问题,使用不同的算法,也许最终得到的结果是相同的,但在执行该算法所需的时间和(存储)资源可能会有很大的区别,那么我们应该如何去衡量不同算法之间的优劣呢?目前主要是从算法所占用的“时间”和“空间”两个维度去进行评价。时间维度是指执行算法所消耗的时间,通常用“时间复杂度”来描述,空间维度是指执行算法需要占用的内存空间大小,通常用“空间复杂度”来描述。原创 2023-03-19 18:07:39 · 1378 阅读 · 0 评论 -
树的几种遍历方法介绍
与线性数据结构(如数组、链表、队列、栈)只有一种遍历逻辑方法不同,树可以通过不同的方法进行遍历。常见的树的遍历方法包括:中序遍历(InOrder Traversal)、前序遍历(PreOrder Traversal)及后序遍历(PostOrder Traversal)。原创 2023-03-14 17:04:32 · 4576 阅读 · 0 评论 -
斐波那契数列(Fibonacci sequence)及相关问题介绍
本文主要介绍斐波那契数列(Fibonacci sequence)的相关知识,同时通过示例代码介绍相关问题的解决方法。原创 2023-03-14 15:59:36 · 619 阅读 · 0 评论 -
C++编程语言STL之stack介绍
适配器(adaptor)是STL中的一个通用概念。容器、迭代器和函数都有适配器。本质上,适配器是一种机制,它能使某种事物的行为看起来像另外一种事物。容器适配器接受一种已有的容器类型,使其行为看起来像另外一种不同的(容器)类型。stack就是STL定义的一种顺序容器适配器,其中的数据是以LIFO(Last In First Out)的方式组织的。原创 2023-03-09 16:37:46 · 716 阅读 · 0 评论 -
C++编程语言STL之map介绍
关联容器(associative-container)和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。虽然关联容器的很多行为与顺序容器相同,但其不同之处反映了关键字的作用。关联容器支持高效的关键字查找和访问。两个主要的关联容器类型为map和set。map中的元素是一些“关键字-值对(key-value)”:“关键字”起索引的作用,“值”则表示与索引相关联的数据。set中每个元素只包含一个关键字。原创 2019-08-21 17:17:47 · 6697 阅读 · 1 评论 -
C++编程语言STL之vector介绍
vector是C++编程语言的STL中的内容,是同一种类型的对象的集合,每个对象都有一个对应的整数索引值,和(C++编程语言中的)string对象一样,标准库负责管理与存储元素相关的内存。有时候会把vector称为容器,是因为它可以包含其他对象,能够存放任意类型的动态数组、增加和压缩数据。一个容器中的所有对象都必须是同一种类型的。vector不是一种数据类型,而是一个类模板(class template)。使用模板可以编写一个类定义或函数定义,用于多种不同的数据类型。原创 2019-08-21 17:18:38 · 2846 阅读 · 1 评论 -
C++编程语言STL之queue介绍
适配器(adaptor)是STL中的一个通用概念。容器、迭代器和函数都有适配器。本质上,适配器是一种机制,它能使某种事物的行为看起来像另外一种事物。容器适配器接受一种已有的容器类型,使其行为看起来像另外一种不同的(容器)类型。queue就是STL定义的一种顺序容器适配器,其中的数据是以FIFO(First In First Out)的方式组织的。原创 2018-09-08 14:41:49 · 3009 阅读 · 1 评论 -
链表介绍(三)之在单向链表中删除节点
在单向链表中删除节点,首先要根据预先确定的节点标志,判断待删除节点是否存在于链表之中,如果链表中不存在该节点,则无需进行删除操作。待删除节点是链表的首节点;待删除节点不是链表的首节点(即该节点是中间节点或末尾节点)。下面通过伪代码的形式介绍在单向链表中删除节点的算法。算法:DeleteLinkedlist(list,target)目的:在单向链表中删除节点前提:链表和要删除的节点信息后续:无返回:新链表returnpre原创 2021-07-12 19:46:46 · 1375 阅读 · 1 评论 -
链表介绍(二)之在单向链表中插入节点
在单向链表中插入节点,是要将待插入节点插入到链表的“合适”位置中。所以,这里需要一个前提条件:单向链表中的各节点是按其某个成员(如学生的成绩)的值有序排列(如由小到大)的。只有具备了这个前提条件,才能进行针对单向链表的节点插入操作。找到链表中合适的位置;将节点插入到步骤1找到的位置中。下面通过伪代码的形式介绍实现上述两个步骤的算法。算法:InsertLinkedlist(list,new)目的:在单向有序链表中插入节点前提:链表和要插入的节点数据后续:无返回:新链表else。原创 2021-07-10 16:53:11 · 4930 阅读 · 0 评论 -
链表介绍(一)之创建单向动态链表及输出单向链表内容
链表是一个数据的集合,其中每个元素包含下一个元素的地址,即每个元素包含两部分内容:数据(data)和链(link)。数据部分包含可用的信息;链则将数据连在一起,它包含一个指向链表中下一个元素的指针(地址)。说明:链表中的元素习惯上被称为节点(node)。链表是动态地进行存储分配的一种数据结构,与数组相比,链表可以根据需要动态地开辟内存单元,并且链表中的节点在内存中是非连续的。原创 2021-07-09 17:41:09 · 1069 阅读 · 0 评论 -
二分查找算法简介
如果一个列表是无序的,那么顺序查找(sequential search)是唯一可选的元素查找办法;但是对于有序列表(sorted list),就可以选择效率更高的二分查找(也称折半查找)算法。二分查找从一个列表的中间元素来测试,判断目标元素在列表的前半部分还是后半部分。如果在前半部分,就不需要查找后半部分;如果在后半部分,就不需要查找前半部分,也就是说,通过此判断可以减少一半的列表的查询工作。重复此过程直到找到目标元素的位置,或者确定目标元素不在这个列表里。原创 2021-06-24 14:50:08 · 348 阅读 · 2 评论 -
插入排序算法介绍
在插入排序中,数字列表可分为两个子列表:已排序的和未排序的,它们通过假想的一堵墙分隔开。在排序过程中,将未排序子列表中第一个元素(按照数字升降顺序)插入到已排序子列表中合适的位置,再将假想的这堵墙(根据实际情况朝着对应方向)移动一个元素位置,这样每次排序后,已排序子列表中的元素将增加一个,同时未排序子列表中的元素将减少一个,每次把一个元素从未排序子列表移动到已排序子列表就完成了一轮排序。一个含有“n”个元素的数字列表需要“n-1”轮排序来完成数据的重新排列。将假想墙放置在数字列表第一个元素的右侧。原创 2021-06-23 17:39:38 · 383 阅读 · 2 评论 -
冒泡排序算法介绍
已排序的和未排序的,它们通过假想的一堵墙分隔开。在排序过程中,未排序子列表中最大(或最小)的元素通过冒泡的方法移到已排序子列表中,再将假想的这堵墙(根据实际情况朝着对应方向)移动一个元素位置,这样每次排序后,已排序子列表中的元素将增加一个,同时未排序子列表中的元素将减少一个,每次把一个元素从未排序子列表移动到已排序子列表就完成了一轮排序。一个含有n个元素的数字列表需要(n-1)轮排序来完成数据的重新排列。通过比较相邻的元素。原创 2019-08-21 17:15:54 · 729 阅读 · 1 评论 -
选择排序算法介绍
已排序的和未排序的,它们通过假想的一堵墙分隔开。在排序过程中,找出(选择)未排序子列表中的最小(或最大)元素,并把它和未排序列表中的第一个元素进行交换,再将假想的这堵墙(根据实际情况朝着对应方向)移动一个元素位置,这样每次排序后,已排序子列表中的元素将增加一个,同时未排序子列表中的元素将减少一个,每次把一个元素从未排序子列表移动到已排序子列表就完成了一轮排序。一个含有n个元素的数字列表需要(n - 1)轮排序来完成数据的重新排列。将假想墙放置在数字列表最左侧,墙的左侧为已排序子列表,右侧为未排序子列表。原创 2019-08-21 17:14:04 · 6219 阅读 · 2 评论