![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
whale14
心里有火,眼里有光。
展开
-
二叉树增删与遍历
概述 二叉树是一种非线性数据结构。它具有链表的优点,插入与删除的效率高,同时他的特殊结构再结合一定的节点排序规律,使他的查找效率到达有序数组。但是也并不意味着二叉树可以替代单链表和数组,结合不同的应用场景使用合适的数据结构。 二叉排序树满足的条件是二叉树结构和节点排序。二叉树是有二叉树节点组成,一个节点包含自身的数据和左右子节点的指针,一个二叉树至少有一个根节点, 实现 TreeNode结构包...原创 2020-03-31 21:55:06 · 181 阅读 · 0 评论 -
数据结构与算法10:排序算法——选择排序
目录选择排序基本思想代码实现需要注意的地方 选择排序 基本思想 遍历开始,先标记第一个数的下标,这个数是最小数。后边每个数与这个数进行比较,一轮比较完成后得到最小数下标,将最小数与第一个数交换未知。即每次选择到了一个最小数放在已排好序列的尾部。 代码实现 public static void selectionSort(int[] arr){ int minIndex,temp; ...原创 2020-02-13 13:52:21 · 152 阅读 · 0 评论 -
数据结构与算法9:排序算法——插入排序
目录插入排序基本思想代码实现容易出错的地方希尔排序基本思想代码实现需要注意的地方 插入排序 基本思想 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 算法描述: 1. 从第一个元素开始,默认该元素已排序。 2. 取出下一元素,在已排序的元素序列中从后向前扫描。 3. 如果该元素大于新元素,就将该元素移到下一位置。 4. 重复步骤3,直到找到一排序的匀速小雨或等于...原创 2020-02-12 22:20:22 · 112 阅读 · 0 评论 -
数据结构与算法8:排序算法——交换排序
冒泡排序 通过多次遍历待排序数组找到最值,第一次遍历的过程就是将第一个元素与第二个比较,较大值放在第二个位置,在第二个位置元素与第三个比…找到最大值放在最后位置,第一轮结束。后续多轮重复比较得到数组排序完成。 public static void bubbleSort(int[] arr){ int temp=0; for(int i=0;i<arr.length-1;i++){ ...原创 2020-02-08 00:32:58 · 159 阅读 · 0 评论 -
数据结构与算法7: 八皇后问题
问题 在8*8大小的国际象棋棋盘上摆放8个皇后棋子,8个皇后不能互相攻击,即不能在同行同列同斜线上,问共有多少种摆法? 分析 处理此类问题不可暴力枚举,巧用递归算法结构和回溯算法思想,能够快速解决问题。 第一个皇后放第一列位置1。 第二个皇后放第二列位置1,有冲突,往后放。 当三个… 放到第n个(n<8),后续还有未放置的皇后(摆放未完成)。这时候就需要回溯了,改变已放置的皇后位置。 当找...原创 2020-02-04 13:41:08 · 702 阅读 · 0 评论 -
数据结构与算法6:约瑟夫问题
约瑟夫问题 约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数1,第二个 2,第三个3,第M个M并切出列。然后下一个接着从1开始顺序报数,例如N=6,M=5,出列的顺序是:5,4,6,2,3,1。 当M,N为任意自然数时,求出列顺序。 代码实现 这里使用单向循转链表解决该问题。 class Node{ public int num; public Node next; public ...原创 2020-02-01 15:26:09 · 230 阅读 · 0 评论 -
数据结构与算法5:用数组实现栈
栈 栈是一个先进后出的数据结构。出栈与入栈只能在栈顶操作,每一次的出栈入栈操作都会更新栈顶元素。 代码实现 class ArrayStack{ private int top = -1; private int[] stack; private int maxSize; public ArrayStack(int maxSize){ this.maxSize = maxSiz...原创 2020-01-27 22:28:59 · 241 阅读 · 0 评论 -
数据结构与算法4:单链表反转
单链表的反转 链表反转就是由原本的顺序指向变为逆序指向,例链表:a->b->c ,经过反转后改链表为c->b->a。实现的方法比较多,我这里给出一个时间复杂度为O(n),空间复杂度为O(1)的算法。 代码实现 public Node reverseLinkedList(Node head){ if(head==null&&head.next==null){...原创 2020-01-19 00:33:20 · 204 阅读 · 0 评论 -
数据结构与算法3:单链表的增删改查
链表定义 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表以节点的方式存储,每个节点包含data域和next域。 实现 链表节点 class Node{ int num; String data; Node next; public Node(int num,String data){ this.num = num; t...原创 2020-01-12 17:07:47 · 453 阅读 · 0 评论 -
数据结构与算法2:用数组实现队列
队列 队列就是一个先入先出的数据结构,用数组可以实现定长队列; 实现 class ArrayQueue{ private int maxSize; //队列最大size private int head; //队列头指针 private int end; //队列尾指针 private int[] array; //队列数组 public ArrayQueue(...原创 2020-01-05 01:32:27 · 220 阅读 · 0 评论 -
数据结构与算法1:稀疏数组与二维数组的相互转化
稀疏数组定义 稀疏数组就是包含从0开始的不连续索引的数组。大量含0数值的二维数组在存储时,可以转化为稀疏数组节省内存空间。 稀疏数组的第一行表示二维数组的行数与列数以及有效数个数,第二行及以后表示有效数的行、列、值。 相互转化方法 二维数组转稀疏数组 public static int[][] array2sparseArray(int[][] array){ //1.统计有效...原创 2020-01-04 01:29:51 · 134 阅读 · 0 评论