
数据结构和算法
文章平均质量分 81
一些数据结构的介绍和模拟实现,
一些常见算法的介绍
cxpxatu521
混口饭吃够不够?
展开
-
C++进行迷宫问题求解
利用栈和队列两种数据结构实现迷宫求解一. 迷宫问题的描述二. 迷宫问题求解1.使用队列进行深度优先搜索C++代码实现2. 使用栈进行深度优先搜索C++代码实现3.代码运行结果三.迷宫问题小实验总结一. 迷宫问题的描述有一张地图,0表示没有障碍物,1表示有障碍物,给你一幅地图、一个起始位置和一个目标位置,请判断是否能够从起始位置出发到达目标位置,可以的话将走过的路径用8进行标记二. 迷宫问题求解1.使用队列进行深度优先搜索查找路径思路:将起点位置存入队列中;每次访问队头元素,让队头元素出队,标原创 2021-11-19 15:48:43 · 15976 阅读 · 12 评论 -
并查集初识
数据结构之并查集1.并查集的基本认识2.并查集代码实现3.使用并查集解决的典型力扣题1) .剑指 Offer II 116. 省份数量2) .等式方程的可满足性1.并查集的基本认识一种树形的数据结构,常用来处理不相交集合的查询和合并问题。在并查集中,将元素分为若干个集合,每个集合相互独立,同一集合中的元素都有一个相同的祖先节点举个例子:有6个人分别用A、B、C、D、E、F表示,ABC是朋友,DF是朋友,那么这六个人中就有三个小团体,也就是三个集合,在偶然的情况下,B和E成为了朋友,B把E介绍给原创 2021-11-07 15:48:23 · 358 阅读 · 0 评论 -
图初识
图一.图的基本概念1.什么是图?2.顶点和边3.有向图和无向图4.有向完全图和无向完全图5.邻接顶点6.顶点的度7.路径8.权9.路径长度10.简单路径和回路11.子图12.连通图和强连通图13.生成树二.图的存储结构1.邻接矩阵法代码实现:2.邻接表法代码实现三.图的两种遍历方式1.深度优先2.广度优先一.图的基本概念1.什么是图?图是由顶点集合和顶点之间的关系构成的一种数据结构.在现实世界中应用极其广泛,比如人与人之间的朋友关系,地图中各个地点之间的关系简单的图示例:2.顶点和边图的节点原创 2021-10-31 21:49:44 · 1100 阅读 · 0 评论 -
二叉树浅析
二叉树一.什么是二叉树?二.二叉树的性质三.完全二叉树和满二叉树1.完全二叉树2.满二叉树四.二叉树的实现1.顺序存储---堆2.链式存储1)二叉树数据结构的定义2)核心操作的实现思路根据先序遍历的结果创建二叉树层序遍历获取第k层的节点个数销毁二叉树判断二叉树是否为完全二叉树3)二叉树源码一.什么是二叉树?二叉树是一颗特殊的树,每个节点最多有两个孩子,以这两个孩子作为根的树也是二叉树。吐槽一下,因为之前有同学在面试的时候被问到二叉树的标准定义,所以有必要将标准定义列出来。标准定义(引用自百度百科):原创 2021-10-02 17:57:34 · 224 阅读 · 0 评论 -
二叉树的顺序实现之堆
堆1.1.原创 2021-10-01 19:33:05 · 247 阅读 · 0 评论 -
顺序表C语言实现
顺序表1.顺序表的特性2.顺序表的类型1)静态顺序表2)动态顺序表3.顺序表模拟实现1)静态顺序表重要的接口:初始化顺序表插入删除源码2)动态顺序表数据结构的定义重要接口初始化顺序表销毁顺序表检查容量插入删除源码4.顺序表的优缺点1.顺序表的特性存储的数据类型相同;存储单元的物理地址连续;支持根据下标随机访问;2.顺序表的类型1)静态顺序表存储的数据个数有上限,一般是用一个大小固定的数组实现,实用性不高;2)动态顺序表数据的存储空间可以随着元素个数的增加而调整,当数据满了就会增容;3.顺原创 2021-09-17 21:21:01 · 147 阅读 · 0 评论 -
二叉树的前序、中序、后序遍历(递归和非递归)
二叉树的前、中、后序遍历一.二叉树的数据结构:二.递归遍历1.前序2.中序3.后序三.非递归1.前序2.中序3.后序一.二叉树的数据结构:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), le原创 2021-05-16 16:28:42 · 169 阅读 · 0 评论 -
哈希
哈希一.哈希概念二.哈希冲突解决方案1.闭散列(1)线性探测代码实现(2)二次探测代码实现开散列一.哈希概念 一种采用直接寻址方式(哈希函数)高效查找数据的数据结构哈希冲突:不同关键字通过相同哈希函数计算出相同的哈希地址的现象二.哈希冲突解决方案1.闭散列闭散列:也叫开放定址法,当发生哈希冲突时,如果哈希表未被装满,说明在哈希表中必然还有空位置,那么可以把存放到冲突位置中的下一个空位置中去,而下一个空位置的查找又有线性探测和二次探测两种方式(1)线性探测线性探测:从发生冲突的位置开始,依次原创 2021-08-18 08:01:42 · 201 阅读 · 0 评论 -
二叉搜索树
二叉搜索树原创 2021-05-12 11:33:49 · 130 阅读 · 0 评论 -
AVL树插入删除详解
AVL树1.AVL树的定义及其特点(1)定义(2)特点2.ALV树的模拟实现(1)AVL树的数据结构(2)AVL树的插入操作左旋右旋先左旋再右旋先右旋再左旋1.AVL树的定义及其特点(1)定义一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:它的左右子树都是AVL树;左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1);(2)特点2.ALV树的模拟实现(1)AVL树的数据结构(2)AVL树的插入操作左旋右旋先左旋再右旋先右旋再左旋...原创 2021-05-17 17:32:45 · 1816 阅读 · 1 评论 -
红黑树
红黑树原创 2021-05-25 11:53:51 · 204 阅读 · 0 评论 -
排序算法详解及代码实现
排序算法1.直接插入排序2.希尔排序3.直接选择排序4.堆排序5.冒泡排序6.快速排序7.归并排序8.计数排序9.桶排序10.基数排序各种排序算法时间复杂度和稳定性比较此处所有算法都是递增排序1.直接插入排序(1)思想:假设第一个数据有序,插入过程:如果要插入的数据大于等于有序序列的最后一位,将要插入的数据放在最后一位的后面,否则从有序序列的最后一个位置开始向前遍历,找到第一个小于待插入数据的位置,将它后面的数据全部往后移一位,再将要插入的数据放到已找到位置的下一个位置。(2)代码//第一种原创 2021-02-24 20:41:43 · 514 阅读 · 3 评论 -
栈和队列
栈一种后进先出的数据结构,只允许在一端进行插入和删除操作,就像一碗米饭一样。栈的实现顺序表和链表都可以实现,但通常采用数组实现(数组尾部插入代价小)栈的数据结构的定义和常见操作的实现#include<stdio.h>#include<stdlib.h>typedef int STDatatype;//栈的顺序结构实现typedef struct stack{ STDatatype *data; int _size; int _capacity;}stac原创 2020-12-31 14:33:24 · 102 阅读 · 0 评论 -
链表C语言实现
主函数内#include<stdio.h>#include"list.h"#include<malloc.h>//双向带头循环链表void test(){ List lst; ListInit(&lst); printf("尾插:\n"); ListPushBack(&lst, 1); Print(&lst); ListPushBack(&lst, 2); Print(&lst); ListPushBack(&a原创 2020-12-20 09:33:07 · 229 阅读 · 1 评论