HEXO搭建博客
博客搭建传送门已建立,我们的行动会更加便捷:传送门
数据结构小引
数据结构数据结构是算法的基础,学好数据结构可以编写出更加漂亮,更加有效率的代码。
程序=数据结构+算法
算法是程序的灵魂
经典算法问题:
修路问题
汉诺塔
最短路径问题
八皇后
迷宫回溯
马踏棋盘
线性结构&非线性结构数据结构包括:线性结构和非线性结构。
线性结构
线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系
线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的
链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
线性结构常见的有:数组、队列、链表和栈
迷宫回溯问题
迷宫回溯法简介回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标,但当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种不通就回退再走的技术称为回溯法,而满足回溯条件的某个状态的点称为“回溯”点,许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。
回溯算法实际上是一个类似枚举的搜索尝试过程,主要是在搜素尝试过程中寻找问题的解,当发现已满足求解条件时,就“回溯”返回,尝试别的路径。
经典迷宫问题介绍迷宫问题:当从一个入口进入时,会遇到很多墙,在走的过程中如果遇到墙就要返回上一个位置,看上一个位置是否有其他方向的路可以走,依次循环进行,直到找到出口位置。迷宫有很多墙,阻挡住迷宫的路无法进行下去,所以需要在可行走的路中,找到最优达到出口的路。
可以先遍历所有可能出去的路,如果遇到墙,标记下来,以免下次重复遍历。 首先每次进入只能走一步; 将走过的路进行标记,表示已经走过; 若遇到墙的话,需要退到上一步,判断是否还有其他方向的路可以走。
思路 首先可以将迷宫用二维数组来表示:1代表该位置不可达(就是墙),0代表该位置可达(就是路) ...
数据结构-单链表
单链表一、理论定义:线性表的链式存储称为单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素。利用单链表可以解决顺序表需要大量连续存储单元的确定,但单链表附加指针域,也存在浪费存储空间的缺点
data
next
链表是以结点的方式来存储,是链式存储
每个节点包含 data 域, next 域:指向下一个结点
链表的各个结点不一定是连续存储
链表分带头结点的链表和没有头结点的链表
头结点和头指针的区分: 不管带不带头结点 ,头指针都始终指向链表的第一个结点,而头结点是带头结点的链表中的第一个结点,结点内通常不存储信息
二、单链表的创建创建HeroNode链表,data域包含编号,姓名,代号;next域。
1234567891011121314151617181920212223class HeroNode{ public int no; public String name; public String nickname; public HeroNode next; //构造器 public Her ...
递归
递归一、描述定义:递归就是在运行的过程中自己调用自己。递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。简单来说递归是先往下层,当碰到终止条件时就会反弹,再一层层向上返回到调用处。具体思路如阶乘部分示例。
递归可以解决许多数学问题,算法中的快排,归并排序,二分查找等。
条件
执行一个方法时,就创建一个新的受保护的独立空间
递归必须有终止条件且必须向终止条件逼近
当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。
二、递归模板123456public void recursion(参数){ if(终止条件){ return; } recursion(参数);}
三、列题斐波那契数列[1,1,2,3,5,8,13]
除前两个数外后一个数等于前两个数之和,像这样的一组数叫做斐波那契数列fibonacci。
代码实现如下:
12345public int fibonacci(int n){ if(n == 1 || n = ...