数据结构和算法
单单一个越
这个作者很懒,什么都没留下…
展开
-
Python 实现冒泡、选择、快速、归并排序
Python实现排序算法原创 2023-02-23 10:52:12 · 79 阅读 · 0 评论 -
python旋转矩阵
顺时针旋转,先将矩阵倒序,再转置class Solution: def rotate(self, matrix: List[List[int]]) -> None: matrix[::] = [[row[i] for row in matrix[::-1]] for i in range(len(matrix[0]))]class Solution: def rotate(self, matrix): matrix[:] = map(l原创 2020-09-02 15:23:59 · 944 阅读 · 0 评论 -
阿里测试开发笔试题2020/09/11 (查找敏感词, 图像去噪)
**阿里测试开发笔试题2020/09/11**两道编程题,1个小时, 牛客平台需要自己编写程序处理输入的字符,并输出结果**1. 查找敏感词,输出敏感词在主串中出现的总次数**第一行输入两个字符n,m,n代表主字符串长度,m代表将要给出的敏感词数量第二行给出主字符串第三行给出敏感词字符串第四行给出敏感词字符串…输入样例1:10 3helloworldhelloworldowo输出:3解释:“hello”、‘world’、"owo"在"helloworld"中各出现1原创 2020-09-11 18:55:31 · 843 阅读 · 0 评论 -
python 迭代+递归+层序 遍历二叉树
迭代遍历二叉树中序遍历class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: res = [] stack = [] cur = root # 中序,模板:先用指针找到每颗子树的最左下角,然后进行进出栈操作 while stack or cur: while cur: .原创 2020-09-03 14:32:36 · 249 阅读 · 0 评论 -
排序算法分类和复杂度
分类:复杂度:原创 2020-04-04 11:51:41 · 152 阅读 · 0 评论 -
快速排序及其优化
https://blog.csdn.net/qq_38289815/article/details/82718428基本的快速排序代码:#include <stdio.h>void swap(int k[], int low, int high){ int temp; temp = k[low]; k[low] = k[high]; k[high] = temp;...原创 2020-04-04 11:38:57 · 122 阅读 · 0 评论 -
归并排序(递归和迭代实现)
递归实现:B站小甲鱼视频https://www.bilibili.com/video/BV1jW411K7yg?p=95#include <stdio.h>#define MAXSIZE 10// 实现归并,并把最后的结果存放到list1里void merging(int *list1, int list1_size, int *list2, int list2_size)...原创 2020-04-04 10:11:44 · 458 阅读 · 0 评论 -
堆排序(原理加代码)
博客园他人教程:https://www.cnblogs.com/chengxiao/p/6129630.htmlC语言代码:#include <stdio.h>int count = 0;void swap(int k[], int i, int j){ int temp; temp = k[i]; k[i] = k[j]; k[j] = temp;}v...原创 2020-04-03 12:47:20 · 146 阅读 · 0 评论 -
希尔排序
简书教程https://www.jianshu.com/p/d730ae586cf3这里面的gap是每次折半,所以最后能够达到gap = 1,但是如果只把gap = gap/2换成gap = gap/3是不行的,比如gap = 2,再取gap = gap/3,此时gap = 0,就会停止排序。下面的代码给出了一种方法代码:#include <stdio.h>void Ins...原创 2020-04-03 10:49:05 · 122 阅读 · 0 评论 -
冒泡排序、选择排序、直接插入排序
1.冒泡排序现有数组a[10],每次循环时都从元素a[9]开始,将a[j]与a[j-1]作比较,如果a[j]小,则将a[j]前移,继续与前面的值两两比较,会将最小值移到数组最前面。外循环n-1次(n为数组长度),每次内循环都是从尾部开始,用a[j]与a[j-1]两两做比较,小值不断前移。时间复杂度O(n**2)代码:#include <stdio.h>void Bubbl...原创 2020-04-03 09:47:35 · 216 阅读 · 0 评论 -
散列表(哈希表)
哈希表的构造和冲突解决方法:http://data.biancheng.net/view/63.html其中二次探测法:d= 12,-12,……哈希查找算法:给定要查找的关键字key之后,先用过哈希函数找到key对应的地址,然后取该地址的值进行比较,如果不相等,说明在构造哈希表的过程中出现过冲突并采用过解决冲突的方法,这里假设采用的是开放定址法中的线性探测法。此时,也要通过线性探测法重新结...原创 2020-04-02 09:11:26 · 128 阅读 · 0 评论 -
B树代码(C语言)
btree.h//实现对order序(阶)的B-TREE结构基本操作的封装。 //查找:search,插入:insert,删除:remove。 //创建:create,销毁:destory,打印:print。 #ifndef BTREE_H #define BTREE_H #ifdef __cplusplus extern "C" { #endif /...原创 2020-04-01 11:18:44 · 985 阅读 · 0 评论 -
C语言实现平衡二叉树
B站小甲鱼视频https://www.bilibili.com/video/BV1jW411K7yg?p=79博客园教程(按步骤讲解)https://www.cnblogs.com/zhujunxxxxx/p/3348798.html小甲鱼代码:#define LH 1#define EH 0#define RH -1typedef struct BiTNode{ int d...原创 2020-03-31 10:16:12 · 336 阅读 · 0 评论 -
二叉排序树的查找、插入和删除
• 二叉排序树(Binary Sort Tree)又称为二叉查找树,它或者是一棵空树,或者是具有下列性质的二叉树:– 若它的左子树不为空,则左子树上所有结点的值均小于它的根节点的值;– 若它的右子树不为空,则右子树上所有结点的值均大于它的根节点的值;– 它的左、右子树也分别为二叉排序树(递归)。二叉排序树用中序遍历之后即为顺序数组;查找:// 二叉树的二叉链表结点结构定义typed...原创 2020-03-30 12:12:09 · 383 阅读 · 0 评论 -
斐波那契查找(黄金分割)
在插值查找的基础上,可以把比例值固定为0.618(黄金分割值),每次查找的时候都按照(mid前元素个数)/(mid后元素个数)=0.618来判断下一次查找的位置。为了满足初始状态下,数组元素个数符合斐波那契数列中的某个值,需要在查找之前填充数组。C代码:#include <stdio.h>#define MAXSIZE 20void fibonacci(int *f){...原创 2020-03-30 08:55:58 · 121 阅读 · 0 评论 -
插值查找和折半(二分)查找
插值查找#include <stdio.h>int bin_search( int str[], int n, int key ){ int low, high, mid; low = 0; high = n-1; while( low <= high ) { mid = low + (key-a[low...原创 2020-03-29 10:34:53 · 147 阅读 · 0 评论 -
关键路径
B站小甲鱼视频https://www.bilibili.com/video/BV1jW411K7yg?p=69– etv(Earliest Time Of Vertex):事件最早发生时间,就是顶点的最早发生时间;– ltv(Latest Time Of Vertex):事件最晚发生时间,就是每个顶点对应的事件最晚需要开始的时间,如果超出此时间将会延误整个工期。– ete(Earliest...原创 2020-03-29 08:58:22 · 209 阅读 · 0 评论 -
拓扑排序
B站小甲鱼视频https://www.bilibili.com/video/BV1jW411K7yg?p=67有向无环图(DAG)才有拓扑排序拓扑序列:设G=(V,E)是一个具有n个顶点的有向图,V中的顶点序列V1,V2,……,Vn满足若从顶点Vi到Vj有一条路径,则在顶点序列中顶点Vi必在顶点Vj之前。则我们称这样的顶点序列为一个拓扑序列。拓扑排序:所谓的拓扑排序,其实就是对一个有向图构...原创 2020-03-28 09:48:19 · 200 阅读 · 0 评论 -
图的存储结构(邻接矩阵)
图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。无向图我们可以设置两个数组,顶点数组为vertex[4]={V0,V1,V2,V3},边数组arc[4][4]为对称矩阵(0表示不存在顶点间的边,1表示顶点间存在边)。对称矩阵:所谓对称矩阵就是n阶矩阵的元满足a[i][j]=a[j...原创 2020-03-25 10:22:44 · 717 阅读 · 0 评论 -
图的定义及术语
图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。对于图的定义,我们需要明确几个注意的地方:线性表中我们把数据元素叫元素,树中叫结点,在图中数据元素我们则称之为顶点(Vertex)。线性表可以没有数据元素,称为空表,树中可以没有结点,叫做空树,而图结构在咱国内大部分的教材中强调顶点集合V要有...原创 2020-02-27 16:47:00 · 519 阅读 · 0 评论 -
哈夫曼树(C语言)
B站小甲鱼讲解他的代码的视频:https://www.bilibili.com/video/av21828275?p=53其他网站讲解:http://data.biancheng.net/view/33.html小甲鱼的代码中因为包含如何统计一段字符串中的权重,所以显得比较长,建议先看后者的代码,理解一下大概意思。...原创 2020-02-23 12:11:33 · 312 阅读 · 0 评论 -
树和森林的遍历
1.树的遍历先根遍历:先访问树的根结点,然后再依次先根遍历根的每棵子树。后根遍历:先依次遍历每棵子树,然后再访问根结点。先根遍历结果:ABEFCGDHIJ后根遍历结果:EFBGCHIJDA2.森林的遍历森林的遍历也分为前序遍历和后序遍历,其实就是按照树的先根遍历和后根遍历依次访问森林的每一棵树。3.普通树、森林和二叉树遍历的关系将普通树转换成二叉树之后,如下图:二叉树的前序遍...原创 2020-02-20 09:56:24 · 4147 阅读 · 0 评论 -
树、森林及二叉树的相互转换
1.普通树转换为二叉树加线,在所有兄弟结点之间加一条连线。去线,对树中每个结点,只保留它与第一孩子结点的连线,删除它与其他孩子结点之间的连线。层次调整,以树的根结点为轴心,将整棵树顺时针旋转一定的角度,使之结构层次分明2.森林转换成二叉树把每棵树转换为二叉树。第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用...原创 2020-02-20 09:44:18 · 251 阅读 · 0 评论 -
线索二叉树
1.产生背景现有一棵结点数目为n的二叉树,采用二叉链表的形式存储。对于每个结点均有指向左右孩子的两个指针域,而结点为n的二叉树一共有n-1条有效分支路径。那么,则二叉链表中存在2n-(n-1)=n+1个空指针域。那么,这些空指针造成了空间浪费。例如:图1所示一棵二叉树一共有10个结点,空指针^有11个。此外,当对二叉树进行中序遍历时可以得到二叉树的中序序列。例如:图2.1所示二叉树的中序遍...原创 2020-02-19 18:01:32 · 195 阅读 · 0 评论 -
递归实现二叉树前序遍历
用二叉链表定义二叉树typedef struct BiTNode{ ElemType data; struct BiTNode *lchild, *rchild;} BiTNode, *BiTree;题目要求:建议二叉树并输出每个字符所在的层数。如下图要求输出• A在第一层• B、C在第二层• D、E在第三层#include <stdio.h>#i...原创 2020-02-14 17:09:04 · 662 阅读 · 0 评论 -
二叉树定义及其性质
1. 二叉树的定义二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。2. 二叉树的五种基本形态:• 空二叉树• 只有一个根结点• 根结点只有左子树• 根结点只有右子树• 根结点既有左子树又有右子树3. 斜树4. 满二叉树在一棵二叉树中,如果所有分...原创 2020-02-14 16:10:08 · 1170 阅读 · 0 评论 -
树的定义及存储结构
树(Tree)是n(n>=0)个结点的有限集。当n=0时成为空树,在任意一棵非空树中:有且仅有一个特定的称为根(Root)的结点;当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、…、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)结点拥有的子树数称为结点的度-(Degree),树的度取树内各结点的度的最大值。...原创 2020-02-13 16:47:34 · 195 阅读 · 0 评论 -
C语言实现字符串比较-BF算法
B站视频-https://www.bilibili.com/video/av21828275?p=36// 返回子串T在主串S中第pos个字符之后的位置// 若不存在,则返回0// T非空,1 <= pos <= strlen(S)// 注意:我们这里为了表述方便,字符串使用了第一个元素表示长度的方式。int index( String S, String T, int p...原创 2020-02-08 16:29:22 · 931 阅读 · 0 评论 -
C语言递归解决八皇后问题
B站视频-https://www.bilibili.com/video/av21828275?p=35#include <stdio.h>int count = 0;int notDanger( int row, int j, int (*chess)[8] ){ int i, k, flag1=0, flag2=0, flag3=0, flag4=0, flag5=0;...原创 2020-02-06 14:45:07 · 268 阅读 · 0 评论 -
C语言利用递归解决汉诺塔问题
B站视频-https://www.bilibili.com/video/av21828275?p=34x为起始轴(所有的盘子最初都在x轴上),y为辅助轴,z为终止轴(所有的盘子最后都移到z轴上),在调用move()函数的时候,x,y,z所起到的作用会发生改变。#include <stdio.h>// 将 n 个盘子从 x 借助 y 移动到 zvoid move(int n, ...原创 2020-02-05 15:20:08 · 847 阅读 · 0 评论 -
利用递归进行二分查找
#include <stdio.h>int bin_search( int key[], int low, int high, int k ){ int mid; if( low > high ) { return -1; } else { mid = (low + high) / 2;// if( key[mid] == k ) {...原创 2020-02-05 14:43:24 · 240 阅读 · 0 评论 -
利用递归将输入的字符串倒序输出
B站视频-https://www.bilibili.com/video/av21828275?p=33我们用 printa(),printb(),printc() 来分别代表上图中从左到右出现的三个 print() 函数。在运行printc()的时候,会遇到"#",所以printc()中第一个if条件不满足,进而判断第二个if语句,第二个if语句也不成立,所以“#”符号不会打印到屏幕上。至此,...原创 2020-02-05 12:16:09 · 3621 阅读 · 0 评论 -
斐波那契数列
B站视频-实现斐波那契数列迭代方式#include <stdio.h>int main(){ int i; int a[40];//设置数列大小 a[0] = 0; a[1] = 1; printf("%d %d ", a[0], a[1]); for( i=2; i < 40; i++ ) { ...原创 2020-02-05 11:57:50 · 136 阅读 · 0 评论 -
循环队列
关于循环队列,个人认为博客数据结构:循环队列中的介绍比小甲鱼视频要更准确一些。原创 2020-02-04 17:22:45 · 131 阅读 · 0 评论 -
队列基本操作
小甲鱼《数据结构与算法》-栈和队列7队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。与栈相反,队列是一种先进先出(First In First Out, FIFO)的线性表。链队列结构typedef struct QNode { ElemType data; struct QNode *next;} QNode, *QueuePrt;typedef...原创 2020-02-04 16:24:19 · 224 阅读 · 0 评论 -
中缀表达式转换为后缀表达式(逆波兰表达式)
小甲鱼《数据结构与算法》-栈和队列6转化规则:从左到右遍历中缀表达式的每个数字和符号,若是数字则直接输出,若是符号,则判断其与栈顶符号的优先级,是右括号或者优先级低于栈顶符号,则栈顶元素依次出栈并输出,直到遇到左括号或栈空才将等待的那个符号入栈。/*将整数的四则运算的中缀表达式转换为后缀表达式*/#include <stdio.h>#include <stdlib.h&...原创 2020-02-04 12:36:17 · 256 阅读 · 0 评论 -
《小甲鱼数据结构与算法》(栈和队列5)
利用链栈实现逆波兰计算器中的部分代码while( isdigit(c) || c=='.' ) // 用于过滤数字 { str[i++] = c; str[i] = '\0'; if( i >= 10 ) { printf("出错:输入的单个数...原创 2020-02-02 16:32:46 · 450 阅读 · 0 评论