数据结构
文章平均质量分 65
数据结构的学习
StudyWinter
持续学习
展开
-
【数据结构】B树
B树(英语:B-tree),是一种在计算机科学自平衡的树,能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。B树,概括来说是一个一般化的二叉搜索树(binary search tree)一个节点可以拥有2个以上的子节点。与自平衡二叉查找树不同,B树适用于读写相对大的数据块的存储系统,例如磁盘。B树减少定位记录时所经历的中间过程,从而加快访问速度。B树这种数据结构可以用来描述外部存储。这种数据结构常被应用在数据库和文件系统的实现上。原创 2024-03-03 21:10:27 · 1204 阅读 · 0 评论 -
【二叉树】平衡二叉树
AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是O(logn)。增加和删除元素的操作则可能需要借由一次或多次树旋转,以实现树的重新平衡。AVL树得名于它的发明者G. M. Adelson-Velsky和Evgenii Landis,他们在1962年的论文An algorithm for the organization of information 中公开了这一数据结构。原创 2024-01-28 17:35:49 · 997 阅读 · 0 评论 -
约瑟夫环问题
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。链表最适合解决删除节点问题,这里将链表成环,然后计数删除对应的节点。...原创 2022-08-18 15:38:29 · 177 阅读 · 3 评论 -
二叉搜索树的遍历
在处理二叉搜索树时,我们第一时间想到的是中序遍历得到有序数组,然后再根据需求处理,其实也可以在中序遍历时就处理。直接中序遍历生成数组,再判断数组是否有序即可。也可以直接在中序遍历时处理。......原创 2022-08-15 15:34:50 · 510 阅读 · 0 评论 -
二叉树的层序遍历
102. 二叉树的层序遍历 - 力扣(LeetCode) (leetcode-cn.com)层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而是用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。代码class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { queue&原创 2022-02-25 08:56:39 · 1586 阅读 · 0 评论 -
【二叉树】二叉树的非递归前序、中序、后序遍历
1、前序遍历前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放入栈中,然后将右孩子加入栈,再加入左孩子。为什么要先加入 右孩子,再加入左孩子呢? 因为这样出栈的时候才是中左右的顺序。144. 二叉树的前序遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNo原创 2021-10-01 11:03:35 · 292 阅读 · 0 评论 -
【图】普利姆算法(prim算法)基本思想
一、prim算法基本思想:假设G=(V,E)是连通的,TE是G上最小生成树中边的集合。算法从U={u0}(u0∈V)、TE={}开始。重复执行下列操作:在所有u∈U,v∈V-U的边(u,v)∈E中找一条权值最小的边(u0,v0)并入集合TE中,同时v0并入U,直到V=U为止。此时,TE中必有n-1条边,T=(V,TE)为G的最小生成树。Prim算法的核心:始终保持TE中的边集构成一棵生成树。二、普利姆求最小生成树算法过程图解第一步:随意选取起点图中有9个顶点v1-v9,集合表示为转载 2021-01-24 18:20:08 · 13598 阅读 · 2 评论 -
【HashTab初学】哈希表
看一个实际需求,有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址..),当输入该员工的id时,要求查找到该员工的 所有信息。要求: 不使用数据库,尽量节省内存,速度越快越好=>哈希表(散列)1、散列表散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。左侧是一条长为16的数原创 2020-10-14 20:53:19 · 535 阅读 · 0 评论 -
C语言动态数组实现
环境:VS2015头文件DynamicArray.h#ifndef DYNAMICARRAY_H //如果没有定义#define DYNAMICARRAY_H //则定义#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct DYNAMICARRAY{ int* pAdder; //动态数组地址 int capacity; //动态...原创 2020-06-14 08:47:16 · 874 阅读 · 0 评论 -
八皇后问题-递归回溯
1、八皇后问题介绍八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。2、八皇后问题算法思路分析(1)第一个皇后先放第一行第一列;(2)第二个皇后放在第二行第一列、然后判断是否OK, 如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适;(3)继续第三个皇后,还是第一列、第二列……直到第原创 2020-10-03 11:45:36 · 369 阅读 · 0 评论 -
递归-迷宫问题
1、需求:小球在迷宫中移动,从A点到B点,请为小球规划路线分析:(1)小球得到的路径,和程序员设置的找路策略有关即:找路的上下左右的顺序相关 ;(2)再得到小球路径时,可以先使用(下右上左),再改成(上右下左),看看路径是不是有变化 ;(3)测试回溯现象 ;(4)思考: 如何求出最短路径?2、实现(1)约定为了方便起见,做一下简单的约定和简化:地图大小为8*7,用二维数组表示,其值为0时表示小球还没有走过该点;为1时表示为墙(不可走);为2时表示此路可以走(走过一次就不.原创 2020-10-02 16:43:20 · 293 阅读 · 0 评论 -
前缀、中缀、后缀表达式转换详解
学习一下大神的文章:https://blog.csdn.net/qq_36631580/article/details/88685588?biz_id=102&utm_term=%E5%89%8D%E7%BC%80%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%80%8E%E4%B9%88%E8%BD%AC%E6%8D%A2&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~defaul转载 2020-10-01 17:27:37 · 5562 阅读 · 0 评论 -
栈实现综合计算器(中缀表达式)
这是一个不能操作括弧的算法,只包含加减乘除。1、使用栈来实现中缀表达式请输入一个表达式计算式:7*2*2-5+1-5+3-32、思路分析(1)通过一个 index 值(索引),来遍历表达式,创建两个栈变量,一个是数栈,存放数据;一个数符号栈,存放符号;(2)如果我们发现是一个数字, 就直接入数栈;(3)如果发现扫描到是一个符号, 就分如下情况: (3.1)如果发现当前的符号栈为 空,就直接入栈; (3.2)如果符号栈有操作符,就...原创 2020-09-30 16:36:10 · 222 阅读 · 0 评论 -
数组模拟栈
1、栈的介绍(1)栈的英文为(stack)(2)栈是一个先入后出(FILO-First In Last Out)的有序列表。(3)栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。(4)根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。(5)图解说明入栈(push)和出原创 2020-09-28 10:44:21 · 225 阅读 · 0 评论 -
Josephu问题
问题:Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。思路:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。原创 2020-09-27 19:14:56 · 206 阅读 · 0 评论 -
带表头双向链表之增删改查
1、管理单向链表的缺点分析:(1)单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。(2)单向链表不能自我删除,需要靠辅助节点 ,而双向链表,则可以自我删除,所以前面我们单链表删除时节点,总是找到temp,temp是待删除节点的前一个节点。(3)分析双向链表是如何完成遍历、添加、修改、删除。分析 双向链表的遍历,添加,修改,删除的操作思路===》代码实现1) 遍历 和单链表一样,只是可以向前,也可以向后查找2) 添加 (默认添加到双向链表的最后) (...原创 2020-09-25 21:56:53 · 172 阅读 · 0 评论 -
单链表之反转
链表的基础内容详见:https://blog.csdn.net/Zhouzi_heng/article/details/108759239这次学习的是单链表的反转1、开辟新的内容空间进行反转思路:(1)先定义一个新的头结点newHead(不存数据)(2)遍历原来的节点,每遍历一个结点,就将其取出,并放在newHead的后面,其实就是创建链表时的尾插法。 图一定义一个新...原创 2020-09-24 22:00:17 · 152 阅读 · 0 评论 -
数据结构之单链表
1、链表的介绍链表是有序的列表,但是它在内存中是存储如下: 【物理地址】小结:(1)链表是以节点的方式来存储,是链式存储;(2)每个节点包含 data 域, next 域:指向下一个节点;(3)如图:发现链表的各个节点不一定是连续存储;(4)链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定。单链表(带头结点) 逻辑结构示意图如下【逻辑地址】2、单链表的应用实例使用带head头的单向链表实现 –水浒英雄排行榜管理。完成对英雄人物的增删改查操作 。(1原创 2020-09-23 19:14:58 · 624 阅读 · 0 评论 -
数据结构之数组实现环形队列
关于数据结构之数组实现队列:https://blog.csdn.net/Zhouzi_heng/article/details/108735975这次学习了使用数组模拟环形队列对之前的数组模拟队列的优化,为了充分利用数组. 因此将数组看做是一个环形的。(通过取模的方式来实现即可)1、分析说明:(1)尾索引的下一个为头索引时表示队列满,即将队列容量空出一个作为约定,这个在做判断队列满的时候需要注意 (rear + 1) % maxSize == front 满](2)rear == fro原创 2020-09-22 21:51:08 · 248 阅读 · 0 评论 -
数据结构之数组实现队列
今天学习了队列,在这里记录一下。但是总觉得在代码实现上怪怪的......1、队列的案例比如生活中的排队取火车票。排在最前面的人先取票,再离开,后面来的人依次排队,随后取票。2、队列的介绍(1)队列是一个有序列表,可以用数组(顺序表)或是链表(链式表)来实现。(2)遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出 示意图:(使用数组模拟队列示意图)rear表示尾指针,front表示头指针,在初始化的时候,rear=front=-1(第一张图);当有.原创 2020-09-22 17:19:41 · 686 阅读 · 0 评论 -
数据结构之稀疏数组
稀疏sparsearray数组1、实际需求编写的五子棋程序中,有存盘退出和续上盘的功能 。分析问题: 因为该二维数组的很多值是默认值0, 因此记录了很多没有意义的数据->稀疏数组 。2、基本介绍当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:(1)记录数组一共有几行几列,有多少个不同的值 ;(2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 。说明:左边是一个二维数组,.原创 2020-09-21 20:27:44 · 185 阅读 · 0 评论