数据结构
yyyloki
这个作者很懒,什么都没留下…
展开
-
查找算法:顺序查找&二分查找
查找:在相同类型的记录构成的集合中找出满足给定条件的记录静态查找 :不涉及插入和删除操作的查找静态查找只注重查找效率,适用于:(1)查找集合一经生成,便只对其进行查找,而不进行插入和删除操作(2)经过一段时间的查找之后,集中地进行插入和删除等修改操作关键字:数据元素(或记录)中某个数据项的值,用它可以唯一的标识(识别)一个数据元素(或记录)。查找基于的数据模型是集合集合{线性表:适用于静态查找,顺序查找、折半查找等技术树表:适用于动态查找,二叉排序树的查找技术散列表:静态查找和动态查找均适用,原创 2020-06-01 23:44:03 · 1514 阅读 · 0 评论 -
最短路径:Dijkstra算法和Floyd算法
Dijkstra算法——单源最短路径算法算法本质:是不断刷新起点与其他各个顶点之间的 “距离表”。原创 2020-05-25 19:22:13 · 832 阅读 · 0 评论 -
数据结构:拓扑排序与关键路径
拓扑排序一个无环的有向图称作有向无环图。简称DAG图。有向无环图是描述含有公共子式的表达式的有效工具。可以利用有向无环图,则可以实现对相同子式的共享,从而节省存储空间。AOV网(顶点表示活动的网):在一个(用DAG图)表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系。拓扑序列:由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。拓扑排序是一个有向无环图(DAG)的所有顶点的线性序列。且该序列必须满足下面两个条件:每个顶点出现且只出现一次。若存在一条从顶原创 2020-05-21 21:13:25 · 1403 阅读 · 0 评论 -
数据结构:Prim算法&Kruskal算法
Prim算法算法思想:从图中任意取出一个顶点,把他当成一棵树,然后从与这棵树相接的边中选取一条最短(权值最小)的边,并将这条边及其所连接的顶点也并入这棵树中,此时得到一棵有两个顶点的树。然后从与这棵树相接的边中,再选取最短(权值最小)的边,并将这条边及其所连顶点并入当前树,得到一棵3个顶点的树。重复操作,直到图中所有顶点并入树中,此时得到的生成树就是最小生成树。算法步骤:输入:一个加权连通图,其中顶点集合为V,边集合为E初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew原创 2020-05-20 16:39:25 · 619 阅读 · 0 评论 -
数构之图的遍历
图的遍历从图中某一个顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程叫做图的遍历。深度优先搜索广度优先搜索深度优先搜索(DFS):图的深度优先搜索类似于二叉树的先序遍历。在深度优先搜索中,对于最新发现的顶点,如果它还有以此为起点而未探测到的边,就沿此边继续探测下去。当顶点 v的所有边都已被探寻过后,搜索将回溯到发现顶点 v有起始点的那些边。这一过程一直进行到已发现从源顶点可达的所有顶点为止。实际上深度优先搜索最初的探究也是为了解决迷宫问题。深度优先搜索的思想:原创 2020-05-14 23:45:51 · 1003 阅读 · 0 评论 -
图(一)图的概念及图的存储结构
图是由(V, E)来表示的,对于无向图来说,其中 V = (v0, v1, … , vn),E = { (vi,vj) (0 <= i, j <= n且i 不等于j)},对于有向图,E = { < vi,vj > (0 <= i, j <= n且i 不等于j)}。V是顶点的集合,E是边的集合。1、定义:图G由以下两种集合构成。有限个顶点构成的非空集合V(G)有限条边构成的集合E(G)2、无向图与有向图无向图边没有方向的图称为无向图(每一条边均可原创 2020-05-11 23:48:26 · 551 阅读 · 0 评论 -
赫夫曼树(Haffman)及其运用
赫夫曼树,别名“哈夫曼树”、“最优树”以及“最优二叉树”。概念:路径:在一棵树中,一个结点到另一个结点之间的通路,称为路径。(从根结点到结点 a 之间的通路就是一条路径。)路径长度:在一条路径中,每经过一个结点,路径长度都要加 1 。(在一棵树中,规定根结点所在层数为1层,那么从根结点到第 i 层结点的路径长度为 i - 1 。图 中从根结点到结点 c 的路径长度为 3)...原创 2020-05-05 12:59:11 · 2647 阅读 · 0 评论 -
树、森林与二叉树
树的存储结构1、 双亲表示法(顺序存储结构)优点:求双亲容易缺点:求孩子困难2、链式存储结构孩子表示法:将树中的每个结点的孩子结点排列成一个线性表,用链表存储起来。对于含有 n 个结点的树来说,就会有 n 个单链表,将 n 个单链表的头指针存储在一个线性表中,这样的表示方法就是孩子表示法。孩子双亲表示法:2. 孩子兄弟表示法1、又称二叉链表表示法,即以二叉链表作为树的存储结...原创 2020-05-04 19:39:03 · 929 阅读 · 0 评论 -
二叉树基本性质与二叉树的遍历
树的基本概念:树的定义:树是一种非线性结构树的基本术语:结点:结点不仅包含数据元素,而且包含指向子树的分支。结点的度:结点拥有的子树个数或者分支的个数。树的度:树中各结点度的最大值。叶子结点:又叫做终端结点,指度为0的结点。非终端结点:又叫做分支结点,指度不为0的结点。孩子:结点的子树的根。双亲:树的存储结构:...原创 2020-05-04 19:38:17 · 562 阅读 · 0 评论 -
串的cpp基本操作代码实现
串是由0个或者多个字符组成的有限序列,串中字符的个数称为串的长度,含有0个元素的串叫做空串。子串:串中任意连续的字符组成的子序列称为该串的子串。主串:包含子串的串称为主串。空格串:由一个或多个空格组成的串称为空格串。某个字符在串中的序号称为这个字符的位置。...原创 2020-04-28 00:20:21 · 398 阅读 · 0 评论 -
有序排队不插队的队列之c++实现链队列
有序排队不插队的队列之c++实现循环队列链队链队就是采用链式存储结构存储队列,链队的特点就是不存在队满上溢的情况。链队的要素队空状态lqu->rear==NULL或者lqu->front==NULL队满状态:不存在队满的情况(假设内存无限大的情况不存在)。元素进队操作(假设p指向进队元素)lqu->rear->next=p;lqu->rea...原创 2020-04-16 17:22:25 · 378 阅读 · 0 评论 -
有序排队不插队的队列之c++实现循环队列
队列队列与我们前面说的栈类似,是一种只允许在一端进行插入,另一端进行删除的线性表。从下面的小故事,先了解一些队列——先进先出的特性吧。一天,yyyloki特别想喝奶茶,于是她来到了奶茶店,发现前面有5个人在排队等着点单,加上yyyloki就有6个人。==她们都在等待“入队”==当她们都点好了最热门的饮品后各自拿着自己的订单,此时服务员叫号了,“1号的奶茶好了”,1号拿着她的奶茶,美滋滋的走了(==1号出队==),此时排队的就还剩2、3、4、5和yyyloki了。原创 2020-04-16 17:20:54 · 946 阅读 · 0 评论 -
CPP(c++)单链表基本操作代码
“愿你拥有大风和烈酒,也享受孤独与自由”之前我们分享了,单链表的应用传送门:单链表的操作下面我们分享一下严蔚敏《数据结构》中线性表中链表算法的实现。原创 2020-04-09 19:51:04 · 903 阅读 · 0 评论 -
C++(CPP)栈的第二弹之链栈的基本操作(内含小白操作图解)
上篇我们学到了顺序栈,本篇我们一起来学习链栈。点击查看:顺序栈传送门点击查看:顺序表与链表的差别链栈——采用链式存储的栈称为链栈。顺序栈和链栈区别如下(同顺序表和链表):1、存储结构不同,顺序栈是静态分配的,而链栈则是动度态分配的,链栈可以将很多零碎的空问间利用起来,容量可答变,节省空间,顺序栈则固定内存空间,容量不变。2、顺序栈查询速度快,链栈添加删除容数据更快。实现以链表的形...原创 2020-04-08 21:18:17 · 1199 阅读 · 0 评论 -
C++(CPP)实现顺序栈的基本操作及进制转换
栈栈的定义:栈是一种只能在一端进行插入或删除操作的线性表栈顶(Top):表尾允许插入和删除的一端。约定Top始终指向下一个数据元素将存放的位置。栈底(Base):表头不允许插入和删除的一端约定base始终指向a1如果base=0,则栈不存在空栈:不含任何元素的空表栈的插入和删除操作一般称为入栈和出栈。栈的特点——先进后出栈S=(a1,a2,a3,a4,a5),a1...原创 2020-04-07 23:16:51 · 2645 阅读 · 2 评论 -
数据结构——线性表408习题解析
线性表线性表定义:线性表是具有相同特性数据元素的有限序列。线性表的长度=数据元素的个数(n≥0)线性结构(线性表)的特点:1.集合中必存在唯一的一个“第一元素”。2.集合中必存在唯一的一个 “最后元素” 。3.除最后一个元素之外,均有唯一的后继(后件)。4.除第一个元素之外,均有唯一的前驱(前件)。线性表的ADT:访问、插入和删除顺序表和链表的比较:顺序表链表...原创 2020-04-03 23:33:59 · 5212 阅读 · 1 评论 -
数据结构学习三:链表(基本操作)
前提:链表线性链式存储的特点:动态存储分配结点总不顺序存放(与可变长数组的差别)基本概念结点(Node)一个链表由若干个结点组成每个结点包含两个域:数据域和指针域数据域:存放数据指针域:用于存放指向该链表的下一个结点的指针单链表:它指通过一组任意的存储单元来存储线性表中的数据元素。头结点:在链表的第一个结点之前附加一个结点(不算在数组索引中,数据域为空,指...原创 2020-04-01 14:23:39 · 529 阅读 · 1 评论 -
数据结构学习一:时间复杂度O(f(n))
时间复杂度:定义:一个语句的频度是指该语句在算法中被重复执行的次数。误区:切勿使用绝对时间来衡量算法的效率;如:时间复杂度是指本地计算机执行该段代码的绝对时间。(×)解决措施:仅关心可执行语句(基本操作),不必考虑陈述语句。那么如何快速又准确的判断基本操作:在多数情况下,基本操作是最深层循环内的可执行语句。分析时间复杂度的规则:乘法规则:T(n)=T1(n)+T2(n)=...原创 2020-03-11 21:18:07 · 4493 阅读 · 2 评论 -
数据结构学习二:顺序表算法2.7改写
课本:数据结构(c语言)严蔚敏顺序表实现算法结合及代码分析:头文件://init.h 预定义常量和类型#ifndef _INIT_H#define _INIT_H#include <iostream>#define TRUE 1#define FALLSE 0#define OK 1#define ERROR -1#define OVERFLOW -2typ...原创 2020-03-18 16:59:39 · 395 阅读 · 0 评论