数据结构与算法学习笔记
文章平均质量分 67
笔记
不会code的菜鸟
这个作者很懒,什么都没留下…
展开
-
LeetCode 【算法专栏】 【图】
图相关算法有关BFS和DFS求有权图的单源最短路径算法(Dijkstra算法)求有权图的多源最短路径算法(Floyd算法)Prim算法leetcode 1584 连接所有点的最小费用(prim+priority_queue)Kruskal算法实现思想(并查集)leetcode 1584 连接所有点的最小费用(Kruskal UnionFind)拓扑排序Topologicalsortleetcode 133 克隆图(DFS + DeepCopy + ShadowCopy)leetcode 547 省份数量(原创 2022-11-16 23:18:39 · 301 阅读 · 1 评论 -
【数据结构】B树(B-树)和B+树
分裂的方法:取一个新结点,在插入key后的原结点,从中间位置(⌈m/2⌉)将其中的关键字分为两部分,左部分包含的关键字放在原结点中,右部分包含的关键字放在新结点中,中间位置(⌈m/2⌉)的结点插入原结点的父结点。若被删除关键字所在结点删除前的关键字个数 = ⌈m/2⌉-1,且与此结点相邻的右(或左)兄弟结点的关键字个数 >= ⌈m/2⌉,则需要调整该结点、右(或左)兄弟结点、及其双亲结点(父子换位法),以达到新的平衡。B树,又称为多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。原创 2022-08-23 16:19:41 · 3975 阅读 · 1 评论 -
【二叉树】先序序列为a,b,c,d 的不同二叉树的个数
转载记录,原文链接:【二叉树】先序序列为a,b,c,d 的不同二叉树的个数转载 2021-02-16 16:36:27 · 2547 阅读 · 0 评论 -
《算法第四版》:第一章 Union-Find 算法
union-find算法动态连通型性:问题的输入是一列整数对,其中每个整数都表示一个某种类型的对象,一对整数pq可以被理解为“p和q是相连的”。我们假设相连是一种对等关系,则它具有:自反性对称性传递性对等关系能够将对象分为多个等价类。在这里,当且仅当两个对象相连时它们才属于同一个等价类。我们的目标是编写一个程序来过滤序列中所有无意义的整数对(两个整数均来自同一个等价类中)。换句话说,当程序从输入中读取了整数对p q时,如果已知的所有整数对都不能说明p和q是相连的,那么将这一对整数写入到输出中原创 2021-01-08 00:39:11 · 224 阅读 · 0 评论 -
The abstract data type about graph
timestamp : 2020.12.31 status: unfinished#include <iostream>#include <fstream>#include <sstream>#include <vector>#include <map>using namespace std;typedef int vertextype;typedef int weight;typedef int index;struct原创 2020-12-31 00:04:37 · 121 阅读 · 0 评论 -
二叉查找(搜索)树结点的插入,删除,旋转,广度和深度优先遍历
对下面代码的说明:该代码的二叉树节点中含有三个指针,分别指向左儿子、右儿子、和父亲。函数接口包括,节点的插入函数,查找函数,树的前序遍历函数和广度优先遍历函数,二叉树节点的左旋和右旋函数。广度优先遍历利用了辅助队列,开辟在堆空间,因此还存在一个队列节点的删除函数。#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include ...原创 2020-02-19 17:33:58 · 229 阅读 · 0 评论 -
数据结构与算法习题:快排,堆排,计数排序,qsort对链表进行排序,哈希函数的使用,第K大数的单机查找和双机查找
1、完成快排,堆排,计数排序算法,对比不同算法排序1亿数的时间#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#define NUM 100000000#define M 100...原创 2020-02-18 20:06:30 · 289 阅读 · 0 评论 -
冒泡排序,选择排序,插入排序,希尔排序,快速排序,堆排,堆排接口sqort()的实现
#pragma once#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 100000000#define M 100#define SWAP(a,b) {int tmp; tmp = a; a = b; b = tmp;}void arrPrint(int* arr);...原创 2020-02-16 19:44:20 · 215 阅读 · 0 评论 -
二叉搜索(排序)树的插入、删除、查找、遍历等有关函数实现
二叉排序树相对于线性表的存储结构可以提高搜索的效率,是基于折半查找的思想而设计的一种数据结构,最好的情况下,二叉排序树操作的时间复杂度仅为O(logN)。二叉排序树的特点:树中任意节点X应满足如下条件,X的左子树中每个节点的关键码均应该小于节点X的关键码,而X右子树中每个节点的关键码均应该大于节点X的关键码。因为如此的设计原则,二叉搜索树中所存储的关键码是不允许重复的。如果需要考虑数据重复的情...原创 2020-02-16 11:42:58 · 430 阅读 · 0 评论 -
红黑树的自旋转和结点插入操作的解析
红黑树可以实现自平衡,主要依靠于它的旋转和变色的特性//红黑树节点typedef struct RBTreeNode{ unsigned char color; Type key; struct RBTreeNode* left; struct RBTreeNode* right; struct RBTreeNode* parent;}Node, *RBTree;//红黑树的...原创 2020-02-16 00:51:14 · 277 阅读 · 0 评论 -
二叉树的层次建树(辅助队列)以及结点的遍历函数实现
BinaryTree.h头文件#pragma once#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>typedef char ElemType; typedef struct node { char c; st...原创 2020-02-15 00:05:29 · 332 阅读 · 0 评论 -
八大排序算法详解:直接插入排序,二分插入排序,希尔排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,计数排序
以下正文部分摘录于《算法之美》按排序的策略不同将内部排序方法进行分类,大致分为五类:1、插入排序法基本思想:每次将一个待排序数据对象按关键码大小插入一个有序的数据序列中,得到一个新的容量加1的数据序列,如此往复直到全部对象插入完毕为止。(1)直接插入排序基本思想:数据对象在顺序表中存储,当插入第 i 个对象时,前面的 i-1 个元素已经排好序列,用第 i 个对象的关键码同已经存在的 i-...原创 2020-02-14 23:19:55 · 740 阅读 · 0 评论 -
数据结构与算法习题:C语言实现链表数据结构的ADT常用函数接口(源代码)
链表头文件List.h#pragma once#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>typedef struct node { int number; struct node* pnext;}listnode, * plistnode;void listH...原创 2020-02-13 23:52:59 · 282 阅读 · 0 评论 -
算法之美:C++实现单向链表ADT
头文件list.h#pragma once#include <iostream>using namespace std;//ListNode类template <class T>class ListNode {public: ListNode() :link(NULL) {} //默认构造函数 ListNode(T value) :link(...原创 2020-02-13 00:01:52 · 411 阅读 · 0 评论 -
面试题——二叉树的层次遍历(宽度优先搜索)
二叉树数据结构struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x):val(x), left(NULL), right(NULL){}};void traversal(TreeNode *node){ if(!node){ return; } //此时访问node称为前序遍历 ...原创 2020-01-14 13:40:51 · 524 阅读 · 0 评论 -
哈希表基础以及用拉链法解决冲突问题
哈希表,是根据关键字值(Key)直接进行访问的数据结构,它通过把关键字映射到表中一个位置(数组下标)来直接访问,以加快查找关键值的速度。这个映射函数叫做哈希函数,存放记录的数组叫做哈希表给定表M,存在函数f(key),存在函数f(key),对任意的关键字值key,待入函数后若能得到包含该关键字的表中地址,称表M为哈希表,函数f(key)为哈希函数。//哈希表用来访问#include <...原创 2020-01-13 21:17:43 · 1582 阅读 · 0 评论 -
二分查找的递归和非递归实现
已知一个排序数组A,如A = [-1,2,5,20,90,100,207,800]另外一个乱序数组B,如B = [50,90,3,-1,207,80]求B中的任意某个元素,是否在A中出现,结果储存在数组C中,出现用1表示,未出现用0表示,如,C = [0,1,0,1,1,0]二分查找又称折半查找,首先,假设表中元素是按升序排列,将中间位置的关键字与查找关键字比较:1、如果两者相等,则查找成...原创 2019-12-28 16:07:46 · 253 阅读 · 0 评论 -
哈希表构建和冲突处理
查找本质:已经对象找位置1、有序安排对象:全序、半序2、直接“算出”对象位置:散列(哈希)散列查找发的两项基本工作:1、计算位置:构造散列函数确定关键词存储的位置2、解决冲突:应用某种策略解决多个关键词位置相同的问题时间复杂度几乎是常量:O(1),查找时间和问题的规模无关散列表(哈希表)类型名称:符号表(SymbolTable)数据对象集:符号表是“名字(name)-属性(Att...原创 2019-12-09 12:11:19 · 479 阅读 · 1 评论