![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
衣服架子
小时候我一直以为自由就是可以做想做的事情
后来 我才觉得 所谓自由便是你不想做什么 那么你就可以不做什么
展开
-
邻接表的深度搜索(DFS)和广度搜索(BFS)
图是一种比树更复制的数据结构,常见的遍历方式无非两种:深度搜索广度搜索深度搜索:优先深度扫描,如果当前路径走到了死胡同,那么,又依次访问上次访问过的节点的可走路径。就这样如此往复,最终完成图的遍历。深度搜索类似于树的前序遍历广度搜索:优先广度扫描,假设你前面现在有N条路可走,AB…N,那么先把AB…N的所有节点访问一遍。每次访问之后都把当前所走路径的下一条路径(若存在)则存入队列,这样,当前路径走完之后,又重复上述步骤,直至遍历完所有节点。广度搜索类似于树的层次遍历以下为邻接表的两种遍.原创 2020-09-16 13:04:57 · 1176 阅读 · 1 评论 -
哈夫曼C语言编码实现
哈夫曼树,又称最优二叉树,使用其作为编码方式,可以有效对数据进行压缩。其算法的思想是:将权值越重的字符,其编码越短。而构建哈弗曼树的过程是:先后从一组数据中选出最小的数据和次小的数据,组成一个哈夫曼树,再从这组数据中选出最小的数据,与刚才的哈弗曼树再一次结合,又合成新的节点,如此往复,直到数据遍历完毕,而哈弗曼树也就建立好了。关于哈夫曼树的一些性质,看看看看其他大佬写的文章,我这里就不描述了。关于这个哈夫曼树的构建,写了一下午才写好,其实该算法思想挺简单的,就是动手做的话可能会有一些小障碍。以下代码可.原创 2020-09-07 23:50:39 · 355 阅读 · 0 评论 -
创建线索二叉树以及遍历操作(前序中序)
在前面的博文中,我们学习了二叉树的创建以及各种遍历操作,那么大家有没有想过一个问题?在一个二叉树中,若大量的节点都没有左右孩子,那么这就造成了内存浪费,因为我们申请了空间却没有很好的利用到他们。所以,这就带来了新的方式— 二叉树的线索化。什么是线索二叉树呢?线索二叉树即就是将没有孩子节点的指针指向它的前驱或者后继元素。例如:当前节点没有左孩子,那么它的左节点不能浪费哦,这时候我们可以把它指向它的前驱节点,而如果当前节点没有右孩子,我们就可以把当前右孩子指针域指向该节点的后继节点。那么,我们怎么辨认.原创 2020-09-03 23:15:54 · 955 阅读 · 0 评论 -
二叉树非递归前中后序的遍历
在前面的文章里,都是用递归实现输出二叉树的操作,那么非递归又是如何实现呢?下面附上代码,由于里面的注释已经很详细了,也作为自己记录复习的记录,有兴趣的小伙伴可以看看哦。注:由于注释已经很详细了,所以这里就没有过多的文字说明了。#include <iostream>#include <stdlib.h>#define ElemType char#define maxSize 100/* run this program using the console pauser.原创 2020-08-28 23:19:57 · 165 阅读 · 1 评论 -
二叉树层次遍历算法
在二叉树中,我们常见的遍历方式 主要有四种。分别是:前序遍历(根节点->左节点->右节点)中序遍历(左节点->根节点->右节点)后序遍历(左节点->右节点->根节点)层次遍历其实记住以上的输出顺序还是非常简单的。首先要明白,左节点一定先比右节点输出!那么就很好理解了,那么那些所谓的前序、中序、后序而言是针对根节点的相对位置命名的。例如前序遍历,则就是根节点是最前面输出的,所以我们不难得到,前序遍历的顺序为:根节点->左节点->右节点。其他同理原创 2020-08-27 01:23:39 · 11396 阅读 · 2 评论 -
二叉树的创建以及递归输出
最近在复习数据结构,以此记录学习博客。二叉树是一种最多只能拥有两个指针域的一种数据结构,其结构可分为:左指针域右指针域数据元素下面代码构建了一颗二叉树,创建方式为前序创建,中序、后序是无法创建二叉树的,因为创建二叉树必须要先有根节点,才可以对后序元素进行创建,而中序、后序是要先创建左孩子节点。而没有根节点,左孩子节点就无从说起了。#include <iostream>using namespace std;typedef struct Tree{ char data.原创 2020-08-25 23:17:13 · 465 阅读 · 0 评论 -
单链表逆序(C语言)
最近在复习数据结构,刷题正好遇上,所以整理一下。#include<stdio.h>#include<stdlib.h>typedef struct Node{ char num; struct Node *next;}Node;void Linkreversa(Node * &head);//创建不带头节点的单链表Node * Create_Li...原创 2019-04-15 23:25:20 · 7074 阅读 · 3 评论