
数据结构与算法
KnifeBlade
不要只是看起来很努力。
展开
-
数据结构与算法 — 递归解决八皇后问题
问题描述:在一个8行8列的棋盘上,每一行放置一个皇后,使任意两个皇后不在同一列或同一条直线上。package 递归;import java.util.Arrays;/** * @author lyq on 2019-12-25 2:21 下午 * @desc 八皇后问题:使用一维数组表示位置信息,数组下标代表第几个皇后及第几行,对应下标的值代表位于该行的第几列。 */publ...原创 2019-12-25 15:42:09 · 634 阅读 · 0 评论 -
数据结构与算法 — 前缀、中缀、后缀表达式
问题描述:给定字符串表达式,如:"74 * 2+2-33",要求计算结果,假定表达式中仅包含"+、-、、/"四种运算符。package 栈;import java.util.Stack;/** * @author lyq on 2019-12-24 9:53 上午 * @desc 栈实现表达式(只含+、-、*、"\")计算器 * 实现思路: * 创建两个栈分别用于存放 操作...原创 2019-12-24 11:49:57 · 650 阅读 · 0 评论 -
数据结构与算法 — 约瑟夫问题
问题描述:编号为1、2、… n 的小朋友围成一圈,从编号为k( 1< k < n) 的小朋友开始报数,报到m的小朋友出列,该小朋友的下一位重新开始从0开始报数,数到m的小朋友再次出列,依次类推,直到所有小朋友出列。由此产生一个出列编号的队列。package 链表;/** * @author lyq on 2019-12-23 10:42 下午 * @desc 利用单向环形...原创 2019-12-23 23:48:07 · 544 阅读 · 0 评论 -
双栈实现队列、双队列实现栈
双栈实现队列import java.util.Stack;/** * 双栈实现队列 * * @author lyq * @create 5/7/19 */public class StackQueue { private Stack<Integer> stack1 = new Stack<>(); private Stack<...原创 2019-05-07 17:17:13 · 1061 阅读 · 0 评论 -
赫夫曼树
qq原创 2019-05-07 13:50:04 · 542 阅读 · 1 评论 -
平衡二叉树
搜索二叉树是一种特殊的二叉树数据结构,它的特征是任意一个节点的值大于其左节点的值而小于等于其右节点的值。二叉树综合了数组和链表的特点,在数据的增删以及查询方面都有不俗的表现。但是一种特殊情况是如果我们向二叉树中插入的数据本身就是有序的,这是二叉树就会转换为"一边深"的线性结构,这时数据的查询就会演变为普通的线性查找,无疑是不能接受的,因此就引入的平衡二叉树的概念:当数据插入时,通过旋转保证树的平...原创 2019-05-06 23:25:03 · 284 阅读 · 0 评论 -
栈及双栈实现的队列
package dataStructure.sortTest;/** * @author lyq * @create 5/1/19 */public class MyStack { /** * 栈的大小 */ private int size; /** * 栈顶指针 */ private int top; ...原创 2019-05-01 09:31:42 · 213 阅读 · 0 评论 -
插入排序
排序思想:遍历每一个元素,依次比较当前元素与其之前的所有元素,将其插入至最小位置。时间复杂度:O(n^2)。package dataStructure.sortTest;import java.util.Arrays;/** * 插入排序 * * @author lyq * @create 5/1/19 */public class InsertSort { p...原创 2019-05-01 09:11:15 · 145 阅读 · 0 评论 -
快速排序
排序思想:首先选定一个排序区间,设置一个标准数(通常为区间的第一个数),通过设置高低位指针依次与标准数进行大小比较,将比标准数大的交换至前边,比标准数小的交换至后边,当高低位指针重合时即标准数应处的位置;然后对标准数左右两边的区间进行递归操作,最终实现排序。时间复杂度:O(nlogn)。package dataStructure.sortTest;import java.util.Arr...原创 2019-05-01 08:48:51 · 151 阅读 · 0 评论 -
选择排序
排序思想:与冒泡排序思想相反,在每轮排序中设置变量(minIndex)记录最小值的下标,初始值为第一个数的下标,然后依次与后面的每一个数字比较:如果小于当前最小值,则将其下标赋给变量(minIndex);一轮比较结束以后判断当前minIndex的值是否与其初始值相同,若不相同则将初始位置上的值与以当前minIndex为下标的值进行值交换;时间复杂度:O(n^2)。package dataSt...原创 2019-05-01 08:22:06 · 149 阅读 · 0 评论 -
冒泡排序
排序思想:在每一轮循环中两两依次比较,冒出一个最大的数到末尾;每轮冒出的最大数不再参与下一轮的比较。package dataStructure.sortTest;import java.util.Arrays;/** * @author lyq * @create 5/1/19 */public class PopSort { public static void ...原创 2019-05-01 08:08:30 · 123 阅读 · 0 评论 -
循环队列
队列是一种先进先出的数据结构,插入操作发生在队列尾部,删除操作发生在队列头部。package dataStructure.sortTest;/** * 队列 * * @author lyq * @create 5/6/19 */public class MyQueue { /** * 存放数据的数组 */ private int[] da...原创 2019-05-06 13:31:50 · 189 阅读 · 0 评论 -
归并排序
排序思想:通过递归将一个无序数组转换为两个有序数组两两合并的形式实现最终有序排列。import java.util.Arrays;/** * 归并排序 * * @author lyq * @create 19-5-5 */public class MergeSort { public static void main(String[] args) { ...原创 2019-05-05 23:28:52 · 133 阅读 · 0 评论 -
希尔排序
排序思想:为解决普通插入排序中,一旦在靠后位置出现较小数时,需要进行多次比较的问题,引入步长的概念,利用步长对数组元素进行分组,对每个分组中的元素分别进行插入排序,这样可以时较小的数很快交换到靠前的位置,减少比较次数。时间复杂度:O(n^(1.3—2))package dataStructure.sortTest;import java.util.Arrays;/** * 希尔排序...原创 2019-05-05 14:05:58 · 142 阅读 · 0 评论 -
堆排序
package tree;import java.util.Arrays;/** * 堆排序 * * @author lyq * @create 19-3-26 */public class HeapSort { public static void main(String[] args) { int[] arr = {6,1,4,0,5,3,10,9...原创 2019-03-26 22:53:17 · 150 阅读 · 0 评论