
数据结构
文章平均质量分 82
数据结构
前面是不断后退的路
这个作者很懒,什么都没留下…
展开
-
C++实现二叉树结构及其二叉树常用算法
文章目录头文件成员函数构造函数创建二叉树CreateBTNode输出二叉树DispBTree查找指定节点FindNode查找左、右孩子节点求树高BTreeHeight递归遍历非递归遍历前序遍历头文件使用node 定义节点,并重命名为BTNode。二叉树类 BTree中含有一个成员BTNode* head;存放二叉树的头节点。typedef int ElemType;const int MaxSize = 20;//二叉树链式存储结构typedef struct node { ElemT原创 2021-05-09 20:06:32 · 3859 阅读 · 0 评论 -
二叉堆主要方法的java实现
二叉堆接口public interface Heap<E> { int size(); boolean isEmpty(); void clear(); void add(E element);//添加元素到堆 E get();//取堆顶元素 E remove();//删除堆顶元素 E replace(E element);//删除堆顶元素的同时插入一个新元素}大顶二叉堆的实现存储结构对于采用二叉树结构的堆,使用数组存储结构,可以不需要有额外的保存左右孩子节点和父亲原创 2020-07-17 15:22:39 · 276 阅读 · 0 评论 -
使用哈希表和红黑树实现映射
如图所示,使用哈希表和红黑树实现映射的存储结构如图,哈希表构造员工节点数组,存储<K,V>节点类型, 当添加节点时,通过key计算的hash值对应的数组index位置如果没有元素,就将当前节点的数据添加到该index指向的位置;若通过key计算的hash值对应的数组index位置有元素(即发生了hash碰撞),就将节点添加到以该位置元素为root节点的红黑树中。节点添加方法添加节点时如果没有发生hash碰撞,直接将元素放到对应位置,作为该位置的红黑树的根节点。如果发生碰撞,从该位置的根节原创 2020-07-11 22:22:26 · 425 阅读 · 0 评论 -
哈希表基本概念、哈希函数一般实现思路
哈希表:哈希表维持一个数组,对每个添加的元素,利用哈希函数生成key对应的index,将key相关数据存放在数组中。以使得每次存取或查找元素时间复杂度为O(1)。哈希表是“空间换时间”的典型应用。哈希冲突是指对不同key计算出相同的index值,此时一般解决办法是在该索引位置构造单链表,将相同index值的不同key构造的单链表存放到同一个index的数据域(该数据域存放单链表表头地址)中。哈希函数:哈希函数满足以下条件:1.对于同一个key每次计算必须得出同一个index值。2.应充分利用k原创 2020-07-09 21:48:24 · 408 阅读 · 0 评论 -
集合(set)和映射(Map)接口应实现的方法(java)
集合集合是一种具有去重功能的数据结构,它与其他数据结构(如链表,数组,树)的区别也是因为它的添加元素方法(add方法)会对元素是否存在进行判断。它底层可以使用链表,数组,树等实现。一个集合中不能存放两个相同的元素。集合中的元素用红黑树实现时元素必须具有可比较性。其接口中方法如下:public interface set<E> { int size(); boolean isEmpty(); void clear(); boolean contains(E element); v原创 2020-07-08 22:32:59 · 237 阅读 · 0 评论 -
红黑树添加元素和删除元素后的处理逻辑分析
以下代码和实现思路来源于B站视频“恋上数据结构与算法”,地址: https://www.bilibili.com/video/BV13v41167ix?红黑树的性质1.节点是RED或BLACK2.根节点是BLACK3.叶子节点(外部节点,空节点)都是BLACK4.RED节点的子节点都是BLACK4.1 RED节点的parent节点都是BLACK4.2 从根节点到叶子节点的所有路径上不能有2个连续的RED节点5.从任意节点到叶子节点的所有路径都包含相同数目的BKACK节点红黑树通过将BLA原创 2020-07-06 21:34:16 · 455 阅读 · 0 评论 -
AVLTree节点失衡处理java代码
以下代码和实现思路来源于B站视频“恋上数据结构与算法”,地址: https://www.bilibili.com/video/BV13v41167ix?前期准备BinaryTree的Node节点类中添加两个方法,用于判断当前节点为其父节点的左孩子节点或右孩子节点 //判断某个节点为父节点的左子节点 public boolean isLeftChild() { return parent!=null&&parent.left==this; } public原创 2020-07-06 11:01:21 · 223 阅读 · 0 评论 -
BinarySearchTree(二叉搜索树)的java泛型实现
对于BinarySearchTree类,一般的设计思想是使用 BinaryTree类作为BinarySearchTree类的父类,在BinaryTree类中实现二叉树的通用功能,再在BinarySearchTree类中实现它的特有功能。BinaryTree类类定义中的成员:对BinaryTree类的定义使用一个内部的节点类对每个节点进行定义,包含E类的element,和三个Node类的指针left,right,parent.其中isLeaf方法和hasTwoChildren用于判断节点类型在这里原创 2020-07-05 13:10:52 · 490 阅读 · 0 评论 -
数据结构教程—哈夫曼树的构造算法
哈夫曼树算法如下(1)根据给定的n个权值,使对应节点构成n棵二叉树的森林,其中每棵二叉树都只有一个根节点,其左右子树均为空。(2)在森林中选取两棵节点权值最小的子树分别作为左右子树构造一棵新的二叉树,且置新的二叉树的根节点的权值为其左右子树上根节点的权值之和。(3)在森林中,用新得到的二叉树替代选取的两棵树。(4)重复(2)和(3),直到只含有一棵树为止,这棵树便是哈夫曼树。构造过程图如下:测试分析为了便于操作,使用数组存放二叉树,并用一个HTNode存放节点,数组下标为【0~n-1】的位置原创 2020-06-10 13:07:40 · 10531 阅读 · 0 评论 -
数据结构教程—二叉树相关操作C++实现
介绍:代码使用如下二叉树作为样例,其括号表示法表示为:A(B(D(,G)),C(E,F)).前序遍历结果:A B D G C E F中序遍历结果:D G B A E C F后序遍历结果:G D B E F C A头文件及类定义://创建一个辅助的node类以及BinaryTree类中多数函数使用BTNode *p的参数是为了实现递归,而同时简化结构#include<iostream>#include<stack>constexpr auto MaxSize =原创 2020-06-09 16:19:27 · 853 阅读 · 0 评论 -
数据结构教程—稀疏数组的三元表示及常用相关函数C++类实现
头文件即类定义:#include <iostream>#define MaxSize 20using namespace std;class Triple {private: int row;//保存原矩阵行数 int col;//保存原矩阵列数 int nums; int data[MaxSize][3];//public: void CreatMat(int a[6][7], int M, int N);//以a矩阵创建三元组原创 2020-06-06 15:54:03 · 381 阅读 · 0 评论 -
数据结构教程—串的顺序存储结构C++类实现
类定义:#include<iostream>constexpr auto MaxSize = 50;using namespace std;class SqString {private: char data[MaxSize];//存放串字符,这里假设分配的空间足够使用,即实现中不考虑空间不足的情况 int length;//存放串长 public: SqString(); void StrAssign(char str[]);//将字符串常量赋值给串 void原创 2020-06-05 11:36:20 · 1004 阅读 · 0 评论 -
数据结构教程—队列的链式存储结构C++模板类实现
类定义:#include<iostream>using namespace std;//节点类template<class T>class Node {public: T data; Node* next;};template<class T>class Queue {private: Node<T>* front; Node<T>* rear;public: Queue(); ~Queue(); boo原创 2020-06-04 16:43:00 · 309 阅读 · 0 评论 -
数据结构教程—循环队列顺序存储结构C++模板类实现
类定义:#include<iostream>#define MaxSize 4using namespace std;template<class ElemType>class Queue{private: ElemType *data; int front, rear;//front队头指针 rear队尾指针public: Queue();//无参构造 ~Queue(); bool QueueEmpty();//对空 bool QueueFull();原创 2020-06-04 10:04:47 · 300 阅读 · 0 评论 -
数据结构教程—栈的链式存储结构C++类实现
类定义(标头.h):#pragma once#include<iostream>using namespace std;//结点类template<class ElemType>class Node {public: ElemType data; Node* next;};//栈template<class ElemType>class Stack { Node<ElemType>* Head;public: Stack();原创 2020-06-02 12:56:26 · 241 阅读 · 0 评论 -
数据结构教程线性表 ——单链表C++类实现
类定义(标头.h):#pragma once#include<iostream>using namespace std;template<class ElemType>class Node {public: ElemType data; Node* next;};template<class ElemType>class LinkList {private: Node<ElemType>* L;public: LinkList(原创 2020-06-01 10:31:21 · 267 阅读 · 0 评论 -
数据结构教程线性表 ——顺序表C++类实现
类定义:#include<iostream>using namespace std;constexpr auto MaxSize = 50;template<class ElemType >class SqList{private: ElemType data[MaxSize] = { 0 }; int length=0;public: SqList();//1.无参构造 SqList(ElemType a[],int n);//2.有参构造 bool原创 2020-05-31 18:37:59 · 269 阅读 · 0 评论