数据结构与算法
文章平均质量分 89
简单介绍一些常见的数据结构和算法!
〖雪月清〗
热爱可抵岁月漫长!每天坚持学习,不忘怀揣梦想,加油!!!
展开
-
哈希表——算法专项刷题(五)
哈希表刷题专项原创 2022-11-21 12:53:29 · 402 阅读 · 0 评论 -
【数据结构与算法】——并查集
并查集:一种树型数据结构,用于解决一些不相交集合的合并及查询问题。例如:有n个村庄,查询2个村庄之间是否有连接的路,连接2个村庄两大核心:查找 (Find) : 查找元素所在的集合合并 (Union) : 将两个元素所在集合合并为一个集合并查集有两种常见的实现思路:快查、快并原创 2022-04-14 19:20:35 · 3059 阅读 · 76 评论 -
图的遍历——DFS、BFS
1.图的遍历从图中某一顶点出发访问图中其余顶点,且每个顶点仅被访问一次图的遍历有两种深度优先遍历DFS、广度优先遍历BFS2.深度优先遍历深度优先遍历以深度为优先进行遍历,简单来说就是每次走到底。类似于二叉树的前序遍历思路:1.以某一个顶点为起点进行深度优先遍历,并标记该顶点已访问2.以该顶点为起点选取任意一条路径一直遍历到底,并标记访问过的顶点3.第2步遍历到底后回退到上一个顶点,重复第2步4.遍历所有顶点结束根据遍历思路可知,这是一个递归的过程,其实DFS与回溯基本相同。遍历:原创 2022-02-24 16:04:30 · 1404 阅读 · 0 评论 -
最大公约数、最小公倍数
最大公约数最小公倍数解法证明原创 2021-12-03 22:15:36 · 900 阅读 · 0 评论 -
循环链表与双向链表
一、前言线性表的顺序存储结构(例如:数组),存储空间是连续的因此我们不用担心元素之间的逻辑关系,线性表最大优点在于可以快速的存取表中任一位置的元素。线性表顺序存储的缺点在于插入和删除操作时需要移动大量元素时间复杂度为O(n),线性表的长度也难以适应变化较大的情况,且线性表的扩容需要重新开辟出一块满足大小需求且连续的空间,这容易造成空间碎片。我们学习链式存储结构的单链表,单链表可以很好的解决数组的这些问题,但是访问单链表的某一位置的元素,需要遍历整个单链表,且每次都要头开始进行单方向的遍历。为了解决这些原创 2021-11-28 20:46:46 · 1616 阅读 · 0 评论 -
算法——双指针
双指针的简单介绍及四种常用解题模型原创 2021-11-18 17:37:07 · 11705 阅读 · 2 评论 -
数据结构与算法——二叉树
文章目录前言一、二叉树的四种遍历1.先序遍历2.中序遍历3.后序遍历4. 层序遍历二、二叉树的高度及特殊二叉树判断1. 二叉树的高度2.判断一棵二叉树是否为平衡二叉树3.判断一棵二叉树是否为完全二叉树总结前言二叉树是一种重要的数据存储结构,与二叉树相关的算法也有很多,本文简单介绍二叉树的先序遍历、中序遍历、后序遍历、层序遍历,四种遍历方式的递归及非递归解法;求解二叉树的高度;判断一棵二叉树是否为平衡二叉树 、完全二叉树 。本文涉及的二叉树定义为: public class TreeNode { /原创 2021-10-24 15:54:35 · 3389 阅读 · 1 评论 -
数据结构——树
一、前言树是数据结构中一种非常重要的非线性存储结构.二、树的基本概念1.树(tree) 是包含 n(n≥0) 个结点,当 n=0 时,称为空树,非空树中(n-1)条边的有穷集。2.在非空树中:每个元素称为结点(node)有一个特定的节点被称为根结点或树根(root)除根结点之外的其余数据元素被分为个互不相交的集合,其中每一个集合本身也是一棵树,被称作原树的子树(subtree)3.树的一些术语:孩子结点或子结点 : 一个结点含有的子树的根结点称为该结点的子结点;节点的度: 一个节原创 2021-10-23 22:28:44 · 1439 阅读 · 0 评论 -
动态规划(Dynamic Programming)
一、前言在平时的编程中,你是否遇到过辛辛苦苦写的代码却运行超时的情况?时间复杂度是算法效率的一个重要的指标,该如何优化算法呢?动态规划(简称:DP) 即是一个不错的选择。DP是解决多阶段决策过程中最优化问题的一种常用方法,它在算法中的重要性不言而喻,本文将帮助大家简单了解DP。二、基本概念在了解动态规划的基本概念前,我们先说几个动态规划的术语。2.1 阶段: 将所给问题的过程,恰当的分为若干相互联系的阶段,以便能按一定的次序求解问题。阶段的划分一般是根据时间和空间的特征进行的,但是要能够把问题的过程原创 2021-07-24 10:45:43 · 920 阅读 · 0 评论 -
快速排序(Quick sort)
一、简介快速排序是(Quick sort)是对冒泡排序的一种改进,是非常重要且应用比较广泛的一种高效率排序算法。二、算法思路快速排序是通过多次比较和交换来实现排序,在一趟排序中把将要排序的数据分成两个独立的部分,对这两部分进行排序使得其中一部分所有数据比另一部分都要小,然后继续递归排序这两部分,最终实现所有数据有序。大致步骤如下:首先设置一个分界值也就是基准值又是也称为监视哨,通过该分界值将数据分割成两部分。将大于或等于分界值的数据集中到右边,小于分界值的数据集中到左边。一趟排序过后,左边部原创 2021-07-20 22:16:03 · 96784 阅读 · 23 评论 -
单链表的头插法尾插法及删除节点操作
带头节点的单链表的头插法尾插法及删除节点操作链表的操作对于初学者来说理解非常有难度,初学的同学们应该在学习链表的过程中多再练习本上画图,写一行代码就画出代码执行后链表各节点图的变化,方便理解。我也是刚学c语言不久,也是第一次写博客,如果有什么不对的地方,还望 大家多~多指教。首先先看一下单个节点的结构:typedef struct node{ int data; //数据域 struct node*next; //指针域 }Node;(注意我用 typedef 将struct nod原创 2020-12-05 21:55:36 · 2988 阅读 · 2 评论