
数据结构与算法
吕飞雨
这个世界总有一个人让你心动不已
展开
-
基数排序代码实现
详情请看排序总结,传送门:https://blog.youkuaiyun.com/m0_52711790/article/details/121914543基数排序的知识点我就不贴出来,相信都能搜到对应概念解释,下面就直接上代码,代码解释其实也很清晰了。#include<iostream>using namespace std; ///补充:(arr[i] / exp) % 10 这个表达式很重要哦,作用是截取到某个数的某一位 /// 获取数组arr中最大值,arr——待排序的数组,l原创 2021-12-21 01:03:07 · 378 阅读 · 0 评论 -
数据结构——排序总结
一、排序的概念排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。(递增或递减)二、排序的分类一图以蔽之:三、交换排序(省略冒泡)1、概念快速排序:又称划分交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序n个项目要 O(n log2 n)(大O符号)次比较。在最坏状况下则需要 O(n^2)次比较,但这种状况并不常见。事实上,快速排序 (n lo...原创 2021-12-14 13:10:22 · 3512 阅读 · 0 评论 -
查找(二)——动态查找树表
目录一、二叉排序树1、二叉排序树的概述2、二叉排序树的插入3、二叉排序树的构造4、二叉排序树的删除5、二叉排序树的查找6、二叉排序树的代码实现二、平衡二叉排序树(AVL树)1、相关概念2、平衡二叉排序树3、平衡二叉排序树代码实现三、B-树1、背景知识2、B树的定义3、B树的插入、删除、查找操作四、哈希表1、打个比方认识哈希法2、什么是哈希表一、二叉排序树1、二叉排序树的概述二叉排序树(也称二叉查找树):是一棵空的二叉树,或原创 2021-12-13 20:44:48 · 471 阅读 · 0 评论 -
平衡二叉排序树之构建、插入、查找、删除、遍历、平衡旋转
代码如下:#include <iostream>using namespace std;class AVL{private: int data; ///结点的键值 int height; ///结点的高度 AVL* lchild; ///左孩子 AVL* rchild; ///右孩子public: ///查找最小值 AVL* FindMin(AVL* avl){ AVL* cur = avl; /原创 2021-12-13 19:24:32 · 431 阅读 · 0 评论 -
二叉排序树之构建、插入、查找、删除、遍历
代码注释详细,简单易懂,直接看就行。#include <iostream>#include <stack>using namespace std;int MAX = -32767;//二叉搜索树(二叉查找树)class BinarySearchTree{private: int data; //数据域 BinarySearchTree* lchild; //左孩子 BinarySearchTree* rchild; //右孩子原创 2021-12-13 15:36:59 · 438 阅读 · 0 评论 -
查找(一)——静态查找表
目录一、查找的基本概念二、顺序查找 (线性查找)1、基本思想2、核心代码3、顺序查找设置哨兵4、顺序查找的优点:5、顺序查找的缺点:6、折半查找7、折半查找判定树8、线性表查找的特点三、索引顺序表(分块查找)1、分块查找表存储结构2、分块查找的基本思想3、分块查找的代码举例静态查找表主要有三种结构:(1)顺序表;(2)有序顺序表;(3)索引顺序表。针对静态查找表的查找算法主要有:(1)顺序查找(线性查找);(2)折半查找原创 2021-12-13 14:36:56 · 5202 阅读 · 0 评论 -
数据结构——图的代码总结(DFS、BFS、邻接、度、拓扑、Dijikstra、Floyd、Kruskal、Prim)
一、创建图且完成深度优先遍历和广度优先遍历#include<iostream>#include<queue>#include<stack>using namespace std;const int MaxLen = 100;class Map {private: int adj[MaxLen][MaxLen]; //邻接矩阵 int visited[MaxLen]; //访问数组原创 2021-12-04 10:39:15 · 2512 阅读 · 0 评论 -
数据结构——图总结
一、图的起源众所周知,图论起源于一个非常经典的问题——柯尼斯堡(Konigsberg)问题。十八世纪,有一座古老而美丽的城市叫做哥尼斯堡(今俄罗斯加里宁格勒)。布勒格尔河的两条支流在这里汇合,然后横贯全城,流入大海。河心有一个小岛。河水把城市分成了4块,于是,人们建造了7座各具特色的桥,把哥尼斯堡连成一体。当时那里的居民都热衷于一种游戏:看谁能从某点出发一次走遍这七座桥,每座桥只走一次,最后回到原出发点。在众多尝试者中竟无一人成功。1738年,瑞士数学家欧拉( Leornhard Eu.原创 2021-11-19 00:20:18 · 5212 阅读 · 0 评论 -
深度与广度优先搜索学习(基于LeetCode第130题被围绕的区域)
代码简单易懂,直接上:广度优先搜索:#include<iostream>#include<string>#include<vector>#include<set>#include<unordered_set>#include<unordered_map>#include<queue>using namespace std;class Solution {public: //x坐标与y坐原创 2021-11-06 15:40:26 · 260 阅读 · 0 评论 -
广度优先遍历的使用(LeetCode_126、127题单词接龙)
广度优先遍历的使用(注释详尽版),代码一:#include<iostream>#include<vector>#include<queue>#include<unordered_map>using namespace std;//LeetCode第127题class Solution {public: /** 字典wordId 给每个单词分配一个id,相当于一个微型数据库,在图中数字更好操作,所以这里的目的是建立从字符串到数字的映原创 2021-11-05 16:21:30 · 306 阅读 · 0 评论 -
二叉排序树的创建与结点插入(代码实现)
直接看代码,简单易懂不解释:#include<iostream>using namespace std;class Node{public: int value; Node* left; Node* right; Node(){ left=nullptr; right=nullptr; } Node(int value){ this->value=value; le原创 2021-10-29 19:43:17 · 773 阅读 · 0 评论 -
唠嗑一下数据结构中树的一些概念(持续更新....)
1、树的定义首先给出树的相关定义:树(tree)是包含n(n>0)个结点的有穷集,其中:1)每个元素称为结点(node);2)有一个特定的结点被称为根结点或树根(root);3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树。树也可以这样定义:树是由根结点和若干颗子树构成的。树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的结点,所定义的原创 2021-10-29 10:08:37 · 358 阅读 · 0 评论 -
哈夫曼树及哈夫曼编码构建的代码实现
哈夫曼树构建的核心思路是在创建每一个结点时给结点赋权值,同时推该结点进入“优先队列”。根据优先队列的特性,取优先队列的俩顶部结点生成新结点(俩顶部结点权值相加,并作为新结点的左右子结点),俩顶部结点出队,新结点入队。若干次循环后,队列只剩下一个结点,该节点便是哈夫曼树的根节点。哈夫曼编码的生成见代码,递归简单易懂。树与编码构建代码如下:#include<iostream>#include<queue>#include<stack>#include<原创 2021-10-26 13:13:06 · 782 阅读 · 0 评论 -
♥将树转化为二叉树代码实现♥
核心思路是在插入的时候,如果儿子结点为空,就将新结点插入儿子节点的的位置,如果儿子结点不为空,就将新结点作为兄弟结点插入兄弟节点的位置。插入的数据哪来,其实就是普通树的数据。下面代码是直接输入结点数据了。(估计这节的内容不太会考)#include<iostream>using namespace std;//定义了一个名为pSTreeNode的指针类型, 它指向结构体STreeNodetypedef struct STreeNode *pSTreeNode;// 定义了一个名为T原创 2021-10-25 22:24:59 · 1430 阅读 · 0 评论 -
♥二叉树层序遍历♥
直接看代码:#include<iostream>#include<string>#include<queue>using namespace std;//代码简单易懂class Node{public: char data; Node* left; Node* right; Node(char ch){ data=ch; left=nullptr; right=nullpt原创 2021-10-23 01:07:56 · 124 阅读 · 0 评论 -
♥删除二叉排序树结点的代码实现♥
对于一个二叉排序树,要删除其某个结点,重点要找到两个关键结点(自身与父结点),代码实现如下:#include<iostream>#include<string>using namespace std;class Node{public: int value; Node *left,*right; int countt=1; Node(int value){ this->value=value; le原创 2021-10-22 14:02:41 · 356 阅读 · 0 评论 -
♥找二叉树的叶子结点及其父结点代码实现♥
直接看代码:#include<iostream>#include<string>#include<queue>using namespace std;//通常地建立结点class Node{public: char data; Node *left,*right,*parent; Node(char ch){ data=ch; left= nullptr; right= nullp原创 2021-10-20 15:04:12 · 588 阅读 · 0 评论 -
♥求二叉树高度(递归代码实现)♥
直接看代码:#include<iostream>#include<string>using namespace std;//代码简单易懂,没什么好说的class Node{ char data; Node *left,*right;public: Node(char ch){ data=ch; left= nullptr; right= nullptr; } void setLe原创 2021-10-20 14:36:51 · 251 阅读 · 0 评论 -
♥对二叉树层序遍历数组的先序遍历输出♥
给定一个二叉树层序遍历(只要该层有结点,那么该层的空结点也要访问)的整型数据数组,数组中的0代表该结点为NULL,要求你根据该数组输出该二叉树先序遍历的结点值,C++代码实现如下:#include<iostream>using namespace std;//关键在于对数组下标的处理//从0开始存储,那么第i个结点的左孩子就是2*i+1,右孩子就是2*i+2。//如果从1开始存储,那么第i个结点的左孩子是2*i,右孩子是2*i+1。//因为数组是从0开始存储的,所以i从0开始往原创 2021-10-20 14:27:58 · 453 阅读 · 0 评论 -
♥二叉树前、中、后序遍历代码实现♥
直接上代码:#include<iostream>#include<vector>#include<stack>using namespace std;//用结构体创建结点,包括创建一个数据域以及两个指向左右结点的指针template<class DataType>struct TreeNode { DataType val; TreeNode<DataType> *lchild, *rchild;};//创原创 2021-10-17 12:31:56 · 260 阅读 · 0 评论 -
♥KMP算法代码♥
代码cover:小白也能看懂的KMP算法KMP算法代码:#include <iostream>#include <string>#include <string.h>using namespace std;//暴力匹配算法int ViolentMatch(char *s, char *p){ int sLen = strlen(s); int pLen = strlen(p); int i = 0; int j =原创 2021-10-09 14:27:15 · 152 阅读 · 0 评论