数据结构算法总结
文章平均质量分 62
算法 和数据结构
数据知道
IT技术博主,博主会持续更新专栏文章,欢迎关注和订阅文章博客,欢迎私信和博主交流技术。如有需要请站内私信或者联系VX名片(ID:data_know)
展开
-
C语言-数据结构-排序汇总(代码可直接运行)
一. 冒泡排序冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。#include <stdio.h>void bubble_sort(int arr[], int len) { int i, j, temp; for (i = 0; i < len - 1; i++) for (j = 0; j < len - 1 - i;原创 2020-08-18 19:25:36 · 31464 阅读 · 1 评论 -
用java实现4种加密解密算法(包括:换位加密解密、替换加密解密、位加密解密、一次一密)
案例1: 换位加密解密算法import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class demo { static char[] jiami(char[] str, int n) //加密算法 { int i, j, k, d; i原创 2020-07-02 09:47:35 · 36481 阅读 · 0 评论 -
思维拓展:用java实现巧妙过桥问题
问题:小明一家过一座桥,过桥的时候是黑夜,所以必须有灯。现在小明过桥要 2 分钟,小明 的弟弟要 5 分钟,小明的爸爸要 6 分钟,小明的妈妈要 9 分钟,小明的爷爷要 13 分钟。每次 此桥最多可以过两人,而过桥的速度根据过桥最慢者而定,而且灯在点燃后 40 分钟就会熄灭。 问小明一家如何过桥时间最短?代码如下:public class demo { static int index; //过桥临时方案的数组下标 static in原创 2020-07-01 13:31:38 · 33264 阅读 · 0 评论 -
算法思维拓展:用java实现蛇形打印
class demo { static int length = 8; static int value = 1; static int[][] snake = new int[length][length]; static Direction lastDirection = Direction.Right; static enum Direction { Right, Down, Left, Up; } public stati.原创 2020-06-30 20:49:27 · 32710 阅读 · 0 评论 -
用java实现哥德巴赫猜想
问题:哥德巴赫猜想即任何一个大于 2 的偶数都能表示为两个素数之和。编写一个 Java 程序, 验证 1~200 内哥德巴赫猜想的正确性,近似证明哥德巴赫猜想。代码如下:public class demo { public static boolean isPrime(int i) { // 判断参数i是否是素数,是则返回true反之则返回false int n; boolean flag = true; if (1 == i)原创 2020-06-30 09:14:25 · 38228 阅读 · 0 评论 -
用java实现字符串匹配问题
考题:判断字符串 a 是否包含字符串 b,这里称 a 为文本串,b 为模式串。代码如下:import java.util.Scanner;public class demo { /** * 判断是否匹配 * * @param target 目标文本串 * @param mode 模式串 * @return 匹配结果 */ public static boolean matchString(String target,原创 2020-06-29 12:30:47 · 35177 阅读 · 0 评论 -
11 数据结构和算法——红黑树
红黑树也是一种自平衡的二叉查找树。每个结点要么是红的要么是黑的。(红或黑)根结点是黑的。 (根黑)每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。 (叶黑)如果一个结点是红的,那么它的两个儿子都是黑的。 (红子黑)对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。(路径下黑相同)如图就是一棵典型的红黑树。保证红黑树满足它的基本性质...原创 2019-07-15 13:43:32 · 32122 阅读 · 0 评论 -
12 数据结构和算法——哈夫曼树(Huffman Tree)
哈夫曼树:是一种带权路径长度最短的二叉树,也称为最优二叉树。一般可以按下面步骤构建:将所有左,右子树都为空的作为根节点。在森林中选出两棵根节点的权值最小的树作为一棵新树的左,右子树,且置新树的附加根节点的权值为其左,右子树上根节点的权值之和。注意,左子树的权值应小于右子树的权值。从森林中删除这两棵树,同时把新树加入到森林中。重复2,3步骤,直到森林中只有一棵树为止,此树便是哈夫曼树。...原创 2019-07-15 13:58:00 · 32285 阅读 · 0 评论 -
13 数据结构和算法——B树,B+树,B*树,R树的总结
B树(英语:B-tree)是一种自平衡的树,能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。B树,概括来说是一个一般化的二叉查找树(binary search tree),可以拥有最多2个子节点。与自平衡二叉查找树不同,B树适用于读写相对大的数据块的存储系统,例如磁盘。根结点至少有两个子女。每个中间节点都包含k-1个元素和k个孩子,其中...原创 2019-07-15 14:03:46 · 42661 阅读 · 1 评论 -
14 数据结构和算法——图
定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。线性表中我们把数据元素叫元素,树中将数据元素叫结点,在图中数据元素,我们则称之为顶点(Vertex)。线性表可以没有元素,称为空表;树中可以没有节点,称为空树;但是,在图中不允许没有顶点(有穷非空性)。线性表中的各元素是线性关...原创 2019-07-15 14:09:43 · 32112 阅读 · 0 评论 -
15 数据结构和算法——基本算法思想及代码实现(穷举,递推,递归,分治,概率)
1. 穷举暴力破解,n层for循环。列举每一种可能。穷举问题,看下面一篇文章足够:算法思想——穷举 (用java语言实现 鸡兔同笼问题,韩信点兵问题等)2. 递推简单的动态规划,根据递推公式,累加。经典案例:斐波那契函数:F(n) = F(n-1)+ F(n-2),随便给一个n,问F(n)为多少。java语言实现:3种思路求兔子小兔子问题(附源码)(斐波那契数列的典型应用) (J...原创 2019-07-15 14:23:41 · 32317 阅读 · 0 评论 -
16 数据结构和算法——排序算法总结及代码实现(冒泡,选择,插入,Shell,快速,堆,合并)
1. 冒泡排序:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。案例如下:java面试:冒泡排序详解 (Java经典编程案例)Go面试: 实现冒泡排序 (Golang经典编程案例)2. 选择排序:java面试:选择排序代码实现 (Java经典编程案例)Go面试:实现选择排序 (Golang经典编程案例)3...原创 2019-07-15 14:39:45 · 32382 阅读 · 0 评论 -
17 数据结构和算法——查找算法总结及代码实现(顺序,折半,二分查找等)
查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。平均查找长度(Average Search Length,ASL):需和指定key进行比较的关键字的个数的期望值,称为查找算法在查找成功时的平均查找长度。1. 顺序查找说明:顺序查找适合于存储结构为顺序存储或链接存储的线性表。基本思想:顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,...原创 2019-07-15 14:50:23 · 33059 阅读 · 0 评论 -
10 数据结构和算法——字典树(这是一种高效的树形结构,但值得单独说明)
字典树(TrieTree):,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。TrieTree充分利用字符串与字符串间拥有公共前缀的特性,而这种特性在字符串的检索与词频统计中会发挥重要的作用。Trie的核心思想是空间换时间。...原创 2019-07-15 13:35:15 · 32130 阅读 · 0 评论 -
09 数据结构和算法——树和二叉树
树(tree):是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:①每个节点有零个或多个子节点;②没有父节点的节点称为根节点;③每一个非根节点有且只有一个父节点;④除了根节点外,每个子节点可以分为...原创 2019-07-15 13:31:19 · 32070 阅读 · 0 评论 -
08 数据结构和算法——堆
堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。(ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4…n/2),满足前者的表达式的成为小顶堆,满足后者表达式的为大顶堆,这两者的结构图可以用完全二叉树排列出来,示例图如下:因为堆有序的特点,一般用来做数组中的...原创 2019-07-15 10:57:28 · 32004 阅读 · 0 评论 -
用java语言 3种方式实现九九乘法表
第一种:/** * 测试打印九九乘法表 * @author cui_yonghua */public class Test99 { public static void main(String[] args) { for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ ...原创 2019-05-26 22:43:17 · 23336 阅读 · 1 评论 -
算法思想——穷举 (用java语言实现 鸡兔同笼问题,韩信点兵问题等)
穷举算法(Exhaustive Attack method):是一种最简单的算法,依赖于计算机强大的计算能力,来穷尽每一种可能的情况,从而解决问题。简单的说 :穷举法就是用循环把各种可能的情况都给走一遍,然后用if条件把满足要求的结果给筛选出来。适用场景:穷举算法效率不高,适合于一些没有明显规律可循的场合。穷举算法的基本思想:对于一种可能的情况,计算其结果。判断结果是否满足要求,如果不...原创 2019-06-16 14:52:32 · 23294 阅读 · 0 评论 -
算法思想——迭代 (用java语言实现 迭代相关的6个案例等)
1. 首先看一下:递归,递推,迭代有什么区别?递归:程序调用自身的编程技巧称为递归,是函数自己调用自己。使用递归要注意的有3点:递归就是在过程或函数里面调用自身;在使用递归时,必须有一个明确的递归结束条件,称为递归出口.递归包含回溯和递推两个阶段。迭代:利用变量的原值推算出变量的一个新值,如果递归是自己调用自己的话,迭代就是A不停的调用B。递推:它是按照一定的规律来计算序列中的每...原创 2019-06-16 16:01:26 · 26452 阅读 · 1 评论 -
数据结构和算法——必备网站收藏 以及学习进阶之路和速记导图【必看必学,值得收藏】
1. 必备网站收藏https://visualgo.net/en 可视化学习网站https://algs4.cs.princeton.edu/home/ 算法官网https://www.zhihu.com/question/21628833 知乎贴2.学习进阶之路00 数据结构和算法——深度好文:学习数据结构的经验01 数据结构和算法——概述和总结02 数......原创 2019-07-13 19:13:58 · 44382 阅读 · 0 评论 -
00 数据结构和算法——深度好文:学习数据结构的经验
有时候我们埋头苦学,天真的以为照着书多敲代码就可以掌握知识点;其实并不然,在学习中往往出现照着书上敲代码,但敲完了并不知道那是干嘛的情况。这就是一些初学者很大的误区。所以当我们拿到代码时,可以先跟着作者思路走一遍,上手敲代码之前最好先在草稿纸上把代码一行行分析一遍,看看是不是作者的思路。往往书上的代码不会很长,而且里面会有一些编程技巧值得学习。最后再按照思路来编程,这时候你会发现一些前面两个步骤中...原创 2019-07-13 21:59:13 · 32134 阅读 · 0 评论 -
01 数据结构和算法——概述和总结
1.什么是数据结构和算法数据结构,就是一组数据的存储结构。算法,就是操作数据的一组方法。数据结构是为算法服务的,算法要作用在特定的数据结构之上。2.为什么要学习数据结构和算法?(1)对个人:数据结构和算法是程序员的必修课程之一,能帮助我们写出性能更优更好的代码。算法,是一种解决问题的思路和方法,也可以运用到生活的各个方面。长期来看,大脑思考能力是个人最重要的核心竞争力,而算法能帮助我们有效的...原创 2019-07-13 22:09:25 · 32029 阅读 · 0 评论 -
02 数据结构和算法——数组
数组的特点 适合查询,但是删除和修改有点慢数据结构不仅是数据的容器,还要提供对数据的操作方法,比如检索、插入、删除、排序等1. 无序数组无序数组的优点:插入快,如果知道下标,可以很快的存取无序数组的缺点:查找慢,删除慢,大小固定。2. 有序数组有序数组的优点:查找效率高有序数组的缺点:删除和插入慢,大小固定...原创 2019-07-14 16:50:02 · 32002 阅读 · 0 评论 -
03 数据结构和算法——线性表
线性表:是n个数据特性相同的元素的组成有限序列,是最基本且常用的一种线性结构(线性表,栈,队列,串和数组都是线性结构),同时也是其他数据结构的基础。对于非空的线性表或者线性结构的特点:(1)存在唯一的一个被称作“第一个”的数据元素;(2)存在唯一的一个被称作“最后一个”的数据元素;(3)除第一个外,结构中的每个数据元素均只有一个前驱;(4)除最后一个外,结构中的每个数据元素均只有一个后继...原创 2019-07-14 17:00:13 · 32001 阅读 · 0 评论 -
04 数据结构和算法——栈
栈中的元素都是后进先出(Last In First Out, LIFO).用列表可以实现一个栈类。栈可以在函数调用时存储断点,做递归时也需要用栈。原创 2019-07-15 09:14:17 · 31913 阅读 · 0 评论 -
05 数据结构和算法——队列
队列:是“先进先出”(FIFO,First InFirst Out)的数据结构,在队尾添加元素,在队头删除元素。队列的作用:就像售票口前的人们站成的一排一样:第一个进入队列的人将最先买到票,最后排队的人最后才能买到票。队列通常提供的操作:入队: 通常命名为push()出队: 通常命名为pop()求队列中元素个数判断队列是否为空获取队首元素队列的存储结构:队列与栈一样是一种线性结...原创 2019-07-15 09:27:49 · 31973 阅读 · 0 评论 -
06 数据结构和算法——链表
链表:是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。链表的优点和缺点:优点:链表是很常用的一种数据结构,不需要初始化容量,可以任意加减元素; 添加或者删除元素时只需要改变前后两个元...原创 2019-07-15 09:45:12 · 31992 阅读 · 0 评论 -
07 数据结构和算法——散列表(哈希表)
散列表:(Hash Table,又称为哈希表),是一种线性表的存储结构,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。哈希表由一个直接寻址表和一个哈希函数组成。哈希函数h(k)将k作为自变量,返回元素的存储下标。哈希表在应用中也是比较常见的,就如Java中有些集合类就是借鉴了哈希原理构造的,例...原创 2019-07-15 10:07:50 · 32349 阅读 · 0 评论 -
用java实现打印各种图形总结 (包括长方形 三角形 菱形 平行四边形等)
嵌套循环:循环中还可以声明循环。相当于内层循环的整体充当外层循环的循环体1.首先来实现一个比较简单的,在控制台打印一个长方形:/** * 测试打印长方形 * @author cui_yonghua */public class PintPic { public static void main(String[] args) { for(int j = 0;...原创 2019-05-26 21:39:32 · 20504 阅读 · 2 评论