数据结构
文章平均质量分 79
zhx 熬夜学编程
君子藏器于身,待时而动。
展开
-
【数据结构与算法】字符串匹配,BF算法和KMP算法,next数组求法
bf算法假设在主串S="helloworld"中找T="hellr"这个子串的位置实现的思路如下。原创 2023-10-16 20:06:41 · 283 阅读 · 0 评论 -
【数据结构】哈希表
散列表(也叫哈希表),是根据关键码值而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。哈希表的核心是合适的hash函数,数据范围,解决冲突的办法这里通过数字分析法设计哈希函数, 链地址法解决从冲突。原创 2023-09-09 17:53:35 · 355 阅读 · 0 评论 -
【数据结构】堆结构的应用--堆排序和Top-k问题
【数据结构】堆如果只是将待排数组建立一个大堆或者小堆是无法得到一个升序或者降序的数组,因为对与一个堆,我们没法知道同一层的大小关系。但是,如果建立了一个大堆,那么堆顶元素一定是这个数组中最大的,那么将堆顶元素删除(并不是真的删除,而是放在数组最后)用其余元素再次建立一个堆,那么这个新堆的堆顶元素就是剩余元素中的最大值,不断循环则个操作不就可以得到一个升序的数组。原创 2023-09-06 21:17:41 · 333 阅读 · 0 评论 -
【数据结构】 建立堆结构和对堆进行插入删除操作
堆是一种特殊的数据结构,它是一棵完全二叉树,每个节点都满足父节点的值总是大于等于(或小于等于)其子节点的值。满足这个条件的堆叫做最大堆(或大根堆),反之为最小堆(或小根堆)。原创 2023-08-28 22:30:19 · 147 阅读 · 1 评论 -
【数据结构与算法】广度寻路算法(树结构)
将实际地图抽象为树(四叉树,四个方向)。起点就是树的根节点,是树的第一层。走一步能到达的节点都是根节点的孩子,是树的第二层。走两步能到达的节点是树的第三层…当树的叶子到达终点或没有地方拓展了,寻路结束。找到终点后一路往上回溯,一直追溯到起点,这条路径就是最佳路径。原创 2023-08-23 11:18:33 · 139 阅读 · 0 评论 -
深度寻路算法代码(带界面)
使用easyX图形库。原创 2023-08-22 23:21:45 · 814 阅读 · 0 评论 -
【数据结构】栈的应用--深度寻路算法
如图:我们在起点(1,1)的位置,要到达终点为(8,8)的位置:红色色为墙壁法无移动,白色为路径已经走过的路会被标记为true,表示已走过,不可以重复再走一遍;没有走的为false,表示可以行走起始点为(1,1);试探点(下一步将要移动判断是否可走的一个临时点)为(1,1);试探方向 : 顺时针 上右下左(优先按照顺序通行)那这样要怎么办呢?这里我们用到了。原创 2023-08-21 22:30:48 · 102 阅读 · 0 评论 -
【数据结构】建立二叉排序树和二叉排序树的插入、查找、删除操作
二叉排序树(Binary Sort Tree),又称为二叉查找树,是一种特殊的二叉树。原创 2023-08-20 16:18:14 · 609 阅读 · 0 评论 -
【数据结构】二叉树的建立(拓展二叉树法)和遍历
对于一个普通的二叉树,知道前序,中序,后序任意一种遍历序列都无法唯一确定一颗二叉树。因为如果知道前序或后序,只是知道那个是根结点,但是无法区分左右孩子,而知道了中序遍历,不知道根结点。通常只有知道一棵树的或者才能唯一确定这棵树。而将一颗普通的二叉树转换为对应的拓展二叉树后根据得到的前序遍历或后序遍历就能唯一确定一颗二叉树。对于拓展二叉树前序遍历 就相当于普通遍历的前序+中序 后序遍历 就相当于普通遍历的 后续+中序。原创 2023-08-18 21:30:59 · 1178 阅读 · 0 评论 -
【数据结构】二叉树的存储结构和遍历
1、二叉树的定义二叉树是另一种树形结构,其特点是每个结点至多只有两棵子树( 即二叉树中不存在度大于2的结点),每一颗子树又是二叉树,二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是有序树,若将其左、右子树颠倒,则成为另一棵不同的二叉树。即使树中结点只有一棵子树,也要区分它是左子树还是右子树。二叉树的5种基本形态如图所示。原创 2023-08-17 20:00:58 · 330 阅读 · 0 评论 -
【数据结构】顺序队列、循环队列、链队列的实现和相关操作
队列(queue)是只允许在一端进行插入操作,在另一端进行删除操作的线性表,队列的特点是允许插入的一端称为队尾(rear),允许删除的一端称为队头(front)。向队列中插入新的数据元素称为入队。从队列中删除队头元素称为出队。原创 2023-08-16 21:40:32 · 444 阅读 · 1 评论 -
【数据结构】 栈的简单应用(数制转换和括号匹配)
十进制数N和其他d进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理:N = (N div d) * d + N mod d(其中:div为整除运算,mod为求余运算)将每次得到余数保存到栈中(push操作),那么栈的结构如下将所有元素弹出栈,那么弹出的顺序为2,5,0,4正好得到了我们想要的结果。原创 2023-08-16 10:42:17 · 132 阅读 · 1 评论 -
【数据结构】栈的两种实现方式和基本操作
栈是一种只允许在一段进行插入和删除操作的线性表,栈的特性是后进先出栈的存储方式有两种,一种是顺序栈一种是链表栈顺序栈利用一组地址连续的存储单元存放自栈底到栈顶的元素,同时附设一个指针(top)指示当前栈顶的位置。100链表栈常采用单链表实现,并且所有操作都是在单链表的表头进行。原创 2023-08-15 16:51:40 · 245 阅读 · 1 评论 -
【数据结构】——单链表详细介绍
上篇文章介绍了顺序表的一些操作,不知道各位有没有发现了顺序表的一些缺点,比如引入另一种线性结构引入链表可以解决顺序表的这一些缺点。链表是一种常见的数据结构,它由一系列的节点构成,每个节点的指针。链表的基本结构如下图所示:fill:#333;color:#333;color:#333;fill:none;data1|nextdata2|nextdata3|nextNULL链表主要有单链表,双链表,循环链表fill:#333;color:#333;color:#333;fill:none;原创 2023-08-14 22:50:32 · 154 阅读 · 1 评论