数据结构实践
文章平均质量分 76
一些常见数据结构的实现和分析
秋风遗梦
欢迎批评指正!
展开
-
二叉树高频成员函数实现(优化版,C++)
部分成员函数节点结构struct Node { char val; Node* left; Node* right; Node(char ch) { val = ch; left = right = nullptr; }};先序+中序创建二叉树 //根据先序遍历和中序遍历进行创建二叉树 void PreOrderCreate() { string preorder; string midorder; // cout << "please input pr原创 2021-01-07 16:32:53 · 130 阅读 · 0 评论 -
有向图的表示、存储及DFS/BFS实现(C++)--丰富注释+功能完整版
1 基本概念1.1 图的定义图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G=(V,E)其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。注:在线性表中,元素个数可以为零,称为空表;在树中,结点个数可以为零,称为空树;在图中,顶点个数不能为零,但可以没有边。1.2 图的存储结构考虑图的定义,图是由顶点和边组成的,分别考虑如何存储顶点、如何存储边。1.2.1 邻接矩阵存储(数组表示法)基本思想:用一个一维数组存储图中顶点的信息,用一个二维数组(称为邻接原创 2021-01-07 16:26:38 · 3376 阅读 · 0 评论 -
哈夫曼树(Huffman树)原理分析及实现(C++)
1 构造原理假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为: (1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点); (2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和; (3)从森林中删除选取的两棵树,并将新树加入森林; (4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。显然对n个权值,构造哈夫曼原创 2021-01-07 16:24:19 · 3404 阅读 · 4 评论 -
二叉树成员函数代码实现及原理解析PLUS(C++)
为求方便节点存储数据类型默认为char,未以模板形式实现完整代码请在此查看1 节点结构struct BNode { char data; BNode *lChild, *rChild; BNode(char a) { data = a; }};2 二叉树的创建2.1.使用带终止符的前序遍历创建必须对应二又树结点前序遍历的顺序,并约定以输入序列中不可能出现的值作 为空结点...原创 2019-11-29 15:04:34 · 526 阅读 · 0 评论 -
二叉树完整实现代码(C++)
为求方便节点存储数据类型默认为char,未以模板形式实现#pragma once#include<iostream>#include<Stack>#include<Queue>using namespace std;//static int No=0;struct BNode { char data; BNode *lChild, *rChil...原创 2019-11-29 15:02:36 · 3315 阅读 · 0 评论 -
二叉排序树 成员函数实现详解(C++)
1 相关概念1.1 定义一棵空树,或者是具有下列性质的二叉树:若左子树不空,则左子树上所有结点的值均小于它的根结点的值;若右子树不空,则右子树上所有结点的值均大于它的根结点的值;左、右子树也分别为二叉排序树;没有键值相等的结点。1.2 性质对二叉树进行中序遍历,可以得到一个递增的有序序列。插入的新结点一定是某个叶子结点。2 二叉排序树的实现2.1 结点结构stru...原创 2019-11-29 14:59:42 · 869 阅读 · 0 评论 -
平衡二叉树(AVL)原理解析与实现(C++)
1. 简介1.1 定义平衡二叉查找树:简称平衡二叉树。在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是O(logn)。增加和删除元素的操作则可能需要借由一次或多次树旋转,以实现树的重新平衡。AVL 树得名于它的发明者 G. M. Adelson-Velsky...原创 2019-11-29 14:56:48 · 722 阅读 · 0 评论