【数据结构】哈夫曼树和哈夫曼编码
一、哈夫曼树 1.1 哈夫曼树的概念 给定一个序列,将序列中的所有元素作为叶子节点构建一棵二叉树,并使这棵树的带权路径长度最小,那么我们就得到了一棵哈夫曼树(又称最优二叉树) 接下来是名词解释: 权:节点的数值路径长度:两节点间路径的边数带权路径长度:节点的权值乘以该节点到根节点的路径长度即为该节点的带权路径长度。哈夫曼树的带权路径长度是树中所有叶子节点的带权路径长度之和。 例如下面这棵哈夫曼树: 通过观...
C++的数据结构(十三):图的深度优先遍历(DFS)
在计算机科学中,图是一种非线性数据结构,由顶点和边组成。图的遍历是图论中的一个基本问题,而深度优先遍历(DFS)是其中的一种重要方法。 深度优先遍历的核心思想是尽可能深地搜索图的分支。它通常使用递归或栈来实现。遍历过程如下: 1. 选择一个起始节点,并将其标记为已访问。 2. 遍历该节点的所有邻居节点,对于每个未访问过的邻居节点,递归地执行深...
C++的数据结构(十七):哈希表
哈希表,又称散列表,是一种根据关键码值(Key value)直接访问的数据结构。通过把关键码值映射到表中的位置,可以快速找到对应的数据,从而大大提高查找效率。这种映射关系是通过散列函数来实现的,散列函数将关键码值转化为一个索引值,该索引值对应着表中的存储位置。 哈希表通过哈希函数将键映射到数组的索引位置。理想情况下,哈希函数应该能够将不同的键均匀地映射到数组的各个位置,以减...
Redis是一个高性能的键值对数据库,它支持多种数据结构,如字符串、列表、集合、有序集合和哈希表。以下是一些Redis命令的实践示例,帮助你了解如何使用Redis
Redis是一个高性能的键值对数据库,它支持多种数据结构,如字符串、列表、集合、有序集合和哈希表。以下是一些Redis命令的实践示例,帮助你了解如何使用Redis。 连接Redis服务器 首先,使用redis-cli命令连接到Redis服务器: redis-cli -h <hostname> -p <port> 基本命令 PING:检查Redis服务是否运行。 PING INFO:获取Redis服务器的信...
数据结构与算法学习笔记三---循环队列的表示和实现(C语言)
言 本篇博客介绍栈和队列的表示和实现。 1.为啥要使用循环队列 上篇文章中我们知道了顺序队列的用法,但是顺序队列有个缺点就是会“假溢出”,浪费大量的存储空间,关于假溢出的问题,个人感觉数据结构里里面的这段解释比较好,就直接截图放下面了,大家自行阅读吧。 图1.顺序队列假溢出的问题 2.队列的顺序表示和实现 1.定义 #define MAX_QUEUE_SIZE 100 // 循环队列的最大...
C++的数据结构(四):队列
在数据结构中,队列(Queue)是一种特殊的线性表,只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以又称为先进先出(FIFO—First In First Out)的线性表。 ...
C++的数据结构(二)
一、链表的基本概念 链表(Linked List)是一种物理存储单元上非连续的、非顺序的线性数据结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点(链表中每一个元素称为节点)组成,节点可以在运行时动态生成。每个节点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。相比于线性数组,链表的好处在于不需要事先分配固定大小的存储空间,并且在插入和...
数据结构与算法学习笔记三---队列的链式存储表示和实现(C++)
目录 前言 1.队列的概念 2.队列的表示和实现 1.定义 2.初始化 编辑 3.销毁队列 4.清空队列 5.队列判空 6.队列长度 7.获取队头元素 8.入队 9.出队 10.遍历 11.完整代码 前言 这篇博客主要讲的是对队列的链式存储。 1.队列的概念 队列是一种访问受限的线性表。仅允许在表的一端进行插入操作,在表的另一端进行删除操作。和日常生活中的排队是一致的,最先进入...
[数据结构]——非比较排序—计数排序
该篇文章 所涉及代码收录仓库:登录 - Gitee.com 目录 1.非比较排序——计数排序 2.最终实现 1.解析 2.以int a[] = { 1,3,9,1,5,1,2,3,-5,-5,-2 };为例,手撕分析 3.代码实现 4.计数排序具有以下主要特性: 1.非比较排序——计数排序 思想:计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。 2.最终实现 1.解析 2.以int a[] = {...
【数据结构和算法】--链表
链表 这里只记录.cpp的测试代码 #include "MyList.hpp"#include <iostream>using namespace std; void printList(pNode headNode){ cout << "*** printList ****" << endl; pNode tempNode, curNode; if (nullptr == headNode) {...