![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 92
锦恢
这个作者很懒,什么都没留下…
展开
-
排序算法大汇总(C++实现)
文章目录直接插入排序(insert sort)折半插入排序(binary insert sort)希尔排序(shell sort)冒泡排序(bubble sort)快速排序(quick sort)简单选择排序(selection sort)堆排序(heap sort)归并排序(merge sort)基数排序(radix sort)当作考试前复习一下了。都是非递归写法实现的,都只实现升序。此处需要排序的都是int型的数组,而且都是从0开始存的数字。所有的排序函数都只需要两个参数:数组的头指针和数组的长度。原创 2021-01-07 15:59:48 · 158 阅读 · 0 评论 -
C++快速实现STL中的优先队列
数据结构课设被我们做成了造轮子课设。为了堆优化的Dijkstra算法,我把优先队列顺便实现了一下。废话不多说,直接上代码。我写的是小顶堆,如果你需要使用大顶堆,有两种方法。1. 将程序中的几个<改成> 2. 存入的数据全部取负数,需要拿出来时再取负数由于STL中的priority_queue是通过vector实现的,所以本处代码中优先队列数据的载体也是vector。先上头文件和类声明:#include "iostream"#include "vector"using namesp原创 2020-12-29 17:33:28 · 369 阅读 · 0 评论 -
二叉树的基本操作(C++实现)
文章目录前言创建二叉树展示二叉树销毁二叉树判断是否为完全二叉树计算树的高度计算树的叶子数量计算树的宽度层次遍历前序遍历递归写法非递归写法中序遍历递归写法非递归写法后序遍历递归写法非递归写法输出根节点到所有叶子节点的路径(递归)输出根节点到所有叶子节点的路径(非递归)计算二叉树的公共祖先(lca)递归写法非递归写法验证前言二叉树可以说是树形数据结构中最基础的,且在多种领域都有应用(比如语法树,二值决策树),熟悉其各种操作是必须的。本文通过实现几个基本的函数来实现一个基本的二叉树:#include <原创 2020-11-21 20:33:00 · 2993 阅读 · 1 评论 -
多叉树的基本操作(C++实现)
文章目录前言创建多叉树展示多叉树销毁一颗多叉树前序遍历(递归&非递归)递归写法非递归写法后序遍历(递归&非递归)递归写法非递归写法层次遍历计算多叉树的高度计算多叉树叶子节点的个数打印输出根节点到所有叶子节点的路径(深度优先-递归)打印输出根节点到所有叶子节点的路径(基于后序遍历-非递归)打印输出根节点到所有叶子节点的路径(基于层次遍历-非递归)输出根节点到叶子节点所有路径中最长的那些路径递归实现节点的插入删除子树递归实现最近公共祖先查询前言我们都知道如何表达一颗二叉树:使用结构体记录每个原创 2020-11-12 00:40:17 · 11826 阅读 · 4 评论 -
走迷宫的递归与非递归写法
递归解法走迷宫的递归走法很好理解:假设我们已经写好了搜路径的函数dfs。那么我们只需要建立相邻两个状态的递推关系就行。递推关系很简单:已搜长度为n时,在当前走到的点上搜另外四个方向,每搜到一个可行方向,则使用n+1时的dfs。需要注意的有两点:开头需要将起点放入记录路径的数组中。起点需要设为不可通行(否则会出现很多经过两边起点的路径)。dfs时,需要先将当前点设为不可通行,退出递归时,再需要将当前点设为可通行。#include <iostream>#include <cs原创 2020-10-30 12:50:52 · 938 阅读 · 0 评论 -
汉诺塔的递归与非递归实现(C++实现)
汉诺塔绝对是递归最经典的例子,具体的解释不多说了,直接上代码:#include <iostream>#include <cstdio>#include <cmath>using namespace std;void move(int id, char x, char y){ printf("%d : %c -> %c\n", id, x, y);}void hanoi(int n, char A, char B, char C){ if (原创 2020-10-30 00:01:04 · 1874 阅读 · 0 评论 -
C++后缀表达式实现eval
后缀表达式又称为逆波兰表达式,在计算机解析算式字符串上有很大的应用。比如大家熟知的Python和JavaScript中的eval()函数,可以很方便地计算算式字符串的值:>>> infix = "1+(2+4)*8">>> eval(infix)49这个强大的功能便是通过后缀表达式实现的,下面,我们可以在C++中实现这个函数:首先导入需要的库:#include <iostream>#include <stdio.h>#includ原创 2020-10-17 17:56:16 · 2989 阅读 · 1 评论