![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 85
csdanteng
这个作者很懒,什么都没留下…
展开
-
搜索二叉树(BST)的实现
搜索二叉树之一种特殊的二叉树,其右子树值大于根节点,根节点值大于左子树。因此,BST的插入、删除都要维持二叉树的这一特性。利用这一特性也使BST的元素查找效率提高,同时,本代码也实现了BST的递归遍历和非递归遍历。代码如下:import java.util.ArrayDeque;原创 2016-10-10 19:13:41 · 444 阅读 · 0 评论 -
由反序列化二叉树实现函数引起的二叉树节点递归调用问题
在刷剑指offer中遇到一个反序列化二叉树问题,将给定的二叉树前序遍历字符串(节点之间用“,”分割,空节点我用的“#”)。代码用递归很容易实现,由于递归中不保存int型数据,为了给字符串遍历计数,用了一个只有一个元素的数组(目前没有想到更好的方法,返回值其他值已被预订) 实现方法如下:public class Demo { TreeNode Deserialize(String原创 2017-08-31 17:02:57 · 348 阅读 · 0 评论 -
快速排序Java实现
public class Quicksort { private void quicksort(int[] array, int left, int right) { if(left>=right) return; int base=quickswap(array,left,right);//以基点为准,左侧大于基点,右侧小于基点 quicksort(array,l原创 2017-08-23 13:24:50 · 287 阅读 · 0 评论 -
动态规划问题探究及其Java实现
问题引入: 某公司出售的长为i的钢条的价格为p(i)(单位为元),如下表所示。如果有一段长为n的钢条,求如何切割才能使收益最大? 测试的最优方案:原创 2017-08-25 10:02:45 · 2861 阅读 · 0 评论 -
有序数组找到出现次数最高的元素和次数
算法不难,就是用个变量分别存储已经遍历到的元素中,出现次数最多的元素和次数。在遍历过程中统计目前遍历的元素的次数,在遍历到的元素变化时,把上个元素次数和之前存储的最大次数比较,保留最大的次数和对应的元素。注意最后一个元素需要单独比较。本算法只针对已经排序好的数组。Java实现如下:public class TestAndDel { static void findmost(int[]原创 2017-08-10 19:38:38 · 2315 阅读 · 1 评论 -
归并排序算法Java实现
一、基本思想 归并算法采用分治思想,将数组的依次从中间拆分为两组,直到每个组只有一个元素位置。然后对拆分好的两组数进行归并,具体方法是:在左右两组都已经有序的前提下(只有一个数是一种特殊的有序),重建一个大小是左右两组数大小和的临时数组,然后对左右两个数组同时从前往后选最小的数放入新数组中。注意,如果如果一组元素放完了,另外一组剩余,这时无须比较,将剩余的元素直接放入临时数组。还有,原创 2017-05-15 15:24:20 · 449 阅读 · 0 评论 -
排序算法之插入排序
插入排序的基本思想是:对一个数组,从第二个元素起,每次将一个元素插入到前面已经排序的序列中。常见的插入排序法有:直接插入排序,二分法插入排序和希尔排序。这里简要介绍下希尔排序。希尔排序基本思想是分组的直接插入排序。分组的元素个数(叫增量)这里采用减半增量,即第一趟排序每组个数为数组长度一半,第二次减半,直到最后为1.注意每组元素间隔增量的是一组。为便于理解,可以认为将全部元素排成行列式(类似于原创 2017-04-08 15:25:23 · 666 阅读 · 0 评论 -
Java数组实现可以动态增长的队列
队列是一种先进先出的数据结构,由队尾进入,由队头删除,类似于现实中的排队。用Java数组实现队列,用first和last分别指向队头和队尾,用storage数组存储元素,但是需要注意的是不同于堆栈,数组中的元素不一定全是队列中的元素,因为如果是一般的数组,first在最前面,last在最后,可能会出现first和last都在数组最后指向一个元素(整个队列只有一个元素),不能增加元素,但是前面的空间原创 2016-09-28 20:05:37 · 4192 阅读 · 1 评论 -
java 数组实现栈
栈是一种先进后出的线性数据结构,只能对它的一端操类似于枪械的弹夹。据此可以用一个数组来实现堆栈。具体方法是:用指向第一个元素(栈底)的base下标,和指向最后一个元素(栈顶)的top下标实现。两个下标之间的元素才是栈中元素,所以入栈包含对数组元素赋值,和对下标top和base的操作(base只有空栈时才操作)。出栈只是操作两个下标,并不是真正删除数组中元素。另外,入栈时数组容量不够,入栈操作中要有原创 2016-09-26 19:08:38 · 811 阅读 · 0 评论 -
从二叉搜索树的第k个节点问题看递归如何返回普通变量和对象
在剑指offer有个求“二叉搜索树的第k个节点(从小到大)”问题。利用BST的性质,直接递归中序遍历即可。但是得到的结果总是null。例图如下: 原来的代码如下:public class Test { TreeNode KthNode(TreeNode pRoot, int k) { if(pRoot==null || k<=0)原创 2017-08-31 22:48:36 · 385 阅读 · 0 评论