数据结构&算法&STL
文章平均质量分 86
会敲代码的地质汪
这个作者很懒,什么都没留下…
展开
-
数据结构_栈
0. 栈基础在编译器堆表达式的语法分析中,函数参数传递、函数调用和返回中分别使用了栈(stack)这一数据结构.栈用来存放那些本身就只能从一端访问的元素。0.1 关键术语栈: 由表、指向栈顶的下标或指针和栈的操作组成** 压入(push) :** 往栈顶增加一个元素弹出(pop): 从栈顶删除一个元素栈特性-后进先出(LIFO, lasi-in/first-out): 最后一个压入...原创 2020-01-05 23:16:22 · 330 阅读 · 1 评论 -
数据结构-算法-STL_目录
数据结构-算法-STL_目录1. 数据结构1. 顺序表2. 单链表3. 双向链表4. 栈和队列5. 树初步6. 二叉树7. 二叉树遍历8. 哈夫曼树和堆9. 哈希表10. 图初步2. 算法1. 八大算法及二分查找2. 深度优先寻路3. 广度优先寻路4. A星寻路3. STL1. 初识STL2. vector常见操作3. vector源码重现4. stack...原创 2019-12-09 22:07:48 · 906 阅读 · 3 评论 -
C++_vector操作
vector说明:vector是向量类型,可以容纳许多类型的数据,因此也被称为容器(可以理解为动态数组,是封装好了的类)vector头文件-vectorvector初始化:方式1. vector<int>a(10);//定义具有10个整型元素的向量(尖括号为元素类型名,它可以是任何合法的数据类型),不具有初值,其值不确定方式2.vector<int>a...原创 2019-05-28 11:24:15 · 461844 阅读 · 105 评论 -
数据结构与算法_图及A星
1. 图定义:若干给定的点,及两点之间连接的线组成的图形(没有方向的连线称为边;有方向的连线称为弧)分类:有向图和无向图完全图:任何一个点都于其它的所有点有关联的图连通图:任何两个点都连接的图2. A星寻路–启发式搜索定义:在地图中对每一个搜索位置进行评估,得到最好的位置,从这个最好位置开始搜索估价函数:f=g+h(f:位置的估值,g:从初始位置到...原创 2019-07-07 17:30:07 · 346 阅读 · 0 评论 -
数据结构与算法_哈希
哈希(哈希法)表哈希法又名散列法,是一种特殊的查找方法(哈希法希望不通过任何比较,一次存取就能得到元素)(哈希就是可以通过分门别类的存储数据,然后快速的将某个数据从大量数据中找出来)哈希表的设计步骤确定表的空间范围,确定哈希值域构造一个合适的哈希函数(该函数需要保证表中所有元素经过这个函数计算之后,函数的返回值的范围在值域之内选择处理冲突(冲突是指,某个数据具有一样的多个存在)...原创 2019-07-07 17:26:35 · 1008 阅读 · 0 评论 -
数据结构与算法_重制vector
说明在结构体里面不需要定义接口函数时(不包括重载运算函数),(可以)用结构来模仿实现方式自己模拟的动态数组在元素删除是不会有内存重分配,但是系统vector在删除是会导致内存重分配在容器中找到一个对象不适用下标,也不使用指针,而是通过迭代器如果有动态内存的存在,要考虑拷贝构造的存在自定义at函数 是唯一个可以进行抛出异常的函数如果涉及到内存重分配,那么就要涉及到新申请一个足够大的新内...原创 2019-06-27 17:00:14 · 325 阅读 · 1 评论 -
数据结构与算法_deque、list、map
deque-----双向队列采用动态数组的方式管理元素,提供随机存储deque与vector优劣比较:deque头尾两端开放,可以进行快速的删除和插入(vector只能在尾部进行快速的插入和删除)dequed的内部结构相比vector多一个间接过程,元素的存取相比较vector而言会慢一些dequed 得到迭代器需要一个智能指针,因为裂缝的存在在对内存区块有限制的系统当中, de...原创 2019-06-28 10:03:56 · 643 阅读 · 0 评论 -
数据结构与算法_二叉树遍历
二叉树的顺序存储结构就是用一维数组存储二叉树中的节点,并且节点的存储位置,也就是数组的下标要能体现节点之间的逻辑关系(存储的方式以数组存储,读取以二叉树的特点输出)二叉树的结构体template<class T>typedef struct Node{ T data; struct Node *left, *right;};1.二叉树的遍历二叉树的遍历是指从二叉...原创 2019-07-17 14:41:21 · 841 阅读 · 2 评论 -
数据结构与算法_stack的常见用法
stack翻译为栈,是STL中实现的一个后进先出的容器1、stack的用法1.1 头文件与定义#include<stack>(定义方法与其它容器相同,typename可以是任意基本数据类型或容器)1.2 stack容器内的常用函数由于栈(stack)本身就是一种后进先出的数据结构在STL中的stack中只能通过top()来访问栈顶元素push()//入栈,在顶部压入元...原创 2019-07-12 12:32:22 · 454 阅读 · 1 评论 -
数据结构与算法_广度优先寻路算法
广度优先搜索广度优先寻路算法实际上是对一个地图上所有可通行的点的遍历从而找出一条最短路径理解为树的层数的遍历广度寻路搜索直线,不搜索斜线链表的排序过程请见附图(链表的排序过程)2. 广度优先寻路算法实现#include<stdio.h>#include<vector>using std::vector;//1. 准备地图#define MAP_RO...原创 2019-07-07 17:24:02 · 591 阅读 · 0 评论 -
数据结构与算法_哈夫曼树&堆
1. 哈夫曼树----最优二叉树定义:带权路径长度最短的树(将最常用的数据放在离根节点近的地方)如果用树来保存数据,数据本身有一个出现的权重,那么把出现权重大的值放在离根节点近的地方带权路径长度(WPL)计算方式请见附图哈夫曼树示意图请见附图2. 堆----最大(小)堆实际上就是最大(小)的完全二叉树最大堆:是一个完全二叉树堆中的任意一个节点的值都大于或者等于左右子树中值...原创 2019-07-07 17:18:07 · 617 阅读 · 0 评论 -
C初级_顺序表
1.数据结构1.1存储和组织数据的方式1.2算法对数据进行处理–>四大基本操作(增 删 查 改)1.3不同的数据结构具有不同的操作方式,需要选择合适的数据结构,提升代码的效率1.4根据数据之间的逻辑结构将数据分为以下几种关系:集合:数据与数据之间无明显关系线性关系:每个数据有唯一的前驱和后继树状结构:一对多图:多对1.5数据间的存储结构顺序存储:存放元素的位置相邻链式存...原创 2019-03-31 21:52:12 · 1315 阅读 · 11 评论 -
C初_单链表
1.链表的作用链式(元素与元素间没有地址紧邻)存储线性表(具有唯一的前驱与后继)2.链表存储的含义数据位置不连续,通过指针进行相互关联3.说明单量表的头结点不存数据数组和链表的优缺点增:数组在尾部插入方便,其他位置不方便;链表在任意一个地方都很方便插入删:数组在尾部删除方便,链表在任意地方删除方便改:数组和链表修改都很方便查:有序条件下,数组二分查找比较方便 ,链表只能一步步查...原创 2019-04-02 18:46:58 · 360 阅读 · 0 评论 -
C初级_栈和队列
1.栈栈:先进后出的数据结构(像个羽毛球筒、crtr+z功能)(栈和栈区没有关联)栈底:不做任何操作栈顶:进行插入和删除栈的实现:顺序表(数组的方式):进行尾插和尾删链表(指针的方式):头插+头删 或 尾插或尾删(头插+头删的方式要方便些)2.队列队列:先进先出的数据结构(类比排队的过程)队头:进行删除队尾:进行插入3.代码实例3.1 栈的代码typedef stru...原创 2019-04-06 15:48:47 · 249 阅读 · 2 评论 -
C初级_双向链表
1.双向链表(单链表-每个节点保留下一个节点的位置,最后一个节点为NULL)双链表-每个节点保留上一个和上一个节点的位置,因此双链表的任意位置均可访问到所有节点2.说明双链表的头head能找到下一个节点A,节点A不能访问头head对于链表中指针指向问题的说明:1.在定义结构体B时,在结构体内部定义了一个指向上一位置A的指针;也定义了指向下一位置的指针C(在代码中,一般将head-&g...原创 2019-04-07 14:24:08 · 210 阅读 · 0 评论 -
数据结构与算法_STL
STLSTL-standard template library目的:提高代码的重复使用度说明:STL基于C++编写,相当于一个封装好的库SL包括容器和算法两大部分容器:常见的容器:vector deque list map (set multiset multimap)实现容器需要满足的条件对元素所进行的操作,内部所有元素都是以拷贝实现(引用无法...原创 2019-06-04 10:42:26 · 727 阅读 · 0 评论 -
数据结构与算法_深度优先寻路
1. 深度优先搜索深度优先搜索的实现步骤为,在一个已知的地图内,逐点搜索下一个路径点的四个方向是否可以同行,如果找到一个可以通行的方向,那么向前前进,如果搜索到的最前面一个点无法向前搜索,则退后,重新搜索之前搜索过点的其它方向。2. 代码实现.h 文件#pragma oncetemplate<typename T>class CMyStack{ T *pBuff; s...原创 2019-07-07 16:56:40 · 438 阅读 · 0 评论 -
数据结构与算法_树初步
1. 树树----非线性结构(线性结构体-其直接前驱与直接后继只有一个)非线性结构:在树中的节点,只有一个直接的前驱,有n(0-n)个直接的后继2. 专业术语:树是一个数据的集合非空树:集合中存在大于等于1的元素,且有且只有一个根节点 空树:集合中没有元素除了根节点之外,在逻辑上可以认为其它的节点是m棵相互不相交的子树构成,每一棵子树又由若干子树来组成(递归性)度(节点...原创 2019-07-07 17:03:28 · 246 阅读 · 0 评论 -
数据结构与算法_二叉树
1. 二叉树:树中每个节点的子节点个数最多为2是一个有序树,每个节点有左右之分度为2的普通树,如果树中某个节点只有一个节点,那么这个子节点没有左右之分二叉树中如果某个节点只有一个子节点,这个子节点有所有之分二叉树的5种表现形式:1、空树 2、只有一个根节点的二叉树 3、只有一个左子树的二叉树 4、只有一个右子树的二叉树 5、具有两个子节点的二叉树二叉树的重要特性1.二叉树...原创 2019-07-07 17:10:21 · 344 阅读 · 0 评论 -
C初级_排序&二分查找
写在前面,本文进行语言叙述时,默认排序目的为从左至右,排成从大到小1.判断算法好坏的标准-时间复杂度和空间复杂度一般认为,算法无法同时即保证低的时间复杂库,还保证低的空间复杂度详细的说明请见时间复杂度与空间复杂度2.冒泡排序法冒泡排序法就是从左至右依次选定一个数A,同后位数B做比较,如果A>B,则A继续与后位数C作比较;如果A<B,则B与后位数C作比较,依次类推,直至进行到数...原创 2019-03-29 10:44:37 · 518 阅读 · 1 评论