算法及数据结构
文章平均质量分 79
有关算法及数据结构的知识整理
Ahua!
不断学习 不断进步
展开
-
二叉查找树
二叉查找树(二叉搜索树)二叉查找树要么是一棵空树,要么满足:对于任意结点,若它的左子树不为空,则左子树上所有结点的权值均小于该结点的权值,若它的右子树不为空,则右子树上的所有结点的权值均大于该结点的权值,在二叉查找树中,任意结点的左子树和右子树都是二叉查找树,一般而言,二叉查找树上的结点的权值都是唯一的若中序遍历二叉查找树会得到一个从小到大的有序序列二叉查找树的插入和查找的效率相对较高,最坏情况(二叉查找树退化成链表,从根结点依次往左递减或往右递增)下时间复杂度为O(n),期望的时间复杂度为O(log原创 2021-07-22 12:44:16 · 243 阅读 · 0 评论 -
二叉树及遍历方法、哈夫曼编码
代码总结二叉树结点的子树个数为结点的度,度为0即没有孩子结点的结点称为叶子节点,规定根结点为树的第一层,节点的最大层数就是树的深度,在树上,从一个结点出发可以访问到其余的结点,并且一个结点到另一个结点的路径有且仅有一条二叉树的第 i 层最多有 2^(i-1) 个结点深度为 k 的二叉树最多有 2^k - 1 个结点记一颗二叉树结点数为 n ,度为 0,1,2的结点分别为 n0,n1,n2,则 n=n0+n1+n2,可知一颗二叉树有 n-1条边,度为0,1,2的结点分别可以衍生出0,1,2条边,.原创 2021-07-21 20:02:12 · 707 阅读 · 1 评论 -
线性结构(顺序表、链表、栈和队列)
代码总结顺序表可以随机访问,但删除和插入操作需要移动大量数据顺序表初始化、扩容、插入、查找、删除、遍历的操作#include <stdio.h>#include <stdlib.h>#define ERROR 0#define OK 1typedef struct Vector { int size; int length; int *data;} Vector;void init(Vector *vector,int size.原创 2021-07-21 19:53:04 · 102 阅读 · 0 评论 -
排序算法思路整理
排序算法思路整理个人理解,主要是给自己看的,文字较为通俗,见谅是否稳定:是否会改变相同元素的相对顺序冒泡排序(稳定)思路 :以升序为例,从第一个元素开始,与下一个元素做比较,如果前一个元素大于后一个元素,则进行交换,否则直接++,每次大的元素做交换往后移,则第一趟遍历下来,最大的元素,已经到了最后,重复操作,n个元素需要 n-1 趟的遍历就会完全有序。void Bubblesort(int *arr,int len){ int tmp=0; for(int i=0;i<le原创 2020-10-02 22:32:52 · 331 阅读 · 0 评论 -
BF,KMP
BF,KMPBF和KMP算法都是针对于字符串的操作,是用于字符串匹配的,从主串中查找有无子串的存在,若匹配成功,返回主串中子串首元素的下标,匹配失败返回-1BF算法时间复杂度 :O(mn)BF算法属于一种暴力破解的算法,穷举所有可能来进行匹配,在其算法过程中存在回溯,这很影响算法效率,因此实际运用情况很少,更多选择其他算法,如KMPBF算法是通过循环,从主串的第一个元素开始,与子串的第一个元素进行匹配,若匹配成功,则让主串的第二个元素与子串的第二个元素进行匹配,依次类推匹配,若匹配失败,则让主串的原创 2020-10-01 23:14:55 · 101 阅读 · 0 评论