![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
猪饲夫妇、
这个作者很懒,什么都没留下…
展开
-
[数据结构]Java基于数组的线性表动态扩容增删查改的实现
[数据结构]Java基于数组的线性表动态扩容增删查改的实现问题思路:1.利用接口制定线性表标准;2.用类实现接口,进行各个方法的实现(对接口中的方法进行覆写)3.(1)先在类中生成存放元素的数组,规定其默认长度、最大数组长度不可超过int的最大范围及存放元素个数;利用类的无参构造设定数组默认长度,利用类的有参构造可由程序员自行设定初始数组长度。(2)因类与数组相比,数组更方便增删查改(因...原创 2019-03-01 20:29:03 · 391 阅读 · 0 评论 -
基于数组实现最大堆
基于数组实现最大堆实现功能:1.添加元素(元素上浮)2.取出元素(元素下沉)3.当已知当前节点下标时,返回当前节点的左右孩子及父节点下标4.替换堆顶元素5.将任意数组转换为堆结构实现代码:HeapTest.javapackage heap;import java.util.Arrays;import java.util.Comparator;//基于数组的堆pub...原创 2019-06-24 19:18:18 · 1043 阅读 · 0 评论 -
[高频面试题]获取N个元素中的前K个高频元素四种解决方法--双层循环、最大堆、最小堆、桶排序
获取N个元素中的前K个高频元素题目描述:给定一个非空的整数数组,返回其中出现频率前K高的元素示例1:输入:nums=[1,1,1,2,2,3],k=2输出:[1,2]示例2:输入:nums=[1],k=1输出:[1]说明:1.你可以假设给定的K总是合理的,且1<=k<=数组中不相同的元素个数2.你的算法时间复杂度必须优于O(nlogn),n是数组的大小。题目思路...原创 2019-06-26 16:41:11 · 742 阅读 · 0 评论 -
归并排序
归并排序:采用分治思想分治思想:将大事情化小,类似于递归。故采用分治思想可以解决的问题一定可以使用递归方法。思路:找到数组第一个元素下标、最后一个元素下标、中间元素下标,利用递归方法将数组满满划分为更小的数组,直到当前第一个元素下标和最后一个元素下标重合时(即此时数组只有一个元素),比较相邻两个小数组元素大小,将其合并(利用建立临时数组),最后将临时数组中的元素拷贝回原数组即可。归并排序图解...原创 2019-03-12 22:00:37 · 78 阅读 · 0 评论 -
Java快速排序--原始快排、二路快排、三路快排及三路快排优化
快速排序–原始快排、二路快排、三路快排、三路快排优化思路:在原始数组中找到一个区分点,然后遍历数组将大于区分点的元素放置区分点右边,小于等于区分点的元素放置区分点左边,每当发现比基准值小的元素就放在基准值左边,大于等于时放在基准值右边。当结束一次遍历时,基准值元素一定在最终位置。按照基准值左边与右边待排序数组重复上述过程。快排整体思路图解:快排具体执行过程图解:快速排序源代码:imp...原创 2019-03-16 00:30:52 · 690 阅读 · 0 评论 -
Java数据结构排序详解--冒泡排序、直接插入排序、折半查找、希尔排序、选择排序、归并排序、快排
冒泡、直接插入、折半查找、希尔、选择、归并、快排我们先思考一个问题:如何衡量一个排序算法的优劣呢?一般来讲我们可从三个方面来看:1.算法的时间效率:a.时间复杂度:最好、最坏、平均时间复杂度相结合判断。b.时间复杂度系数、低阶、常数的影响(因只有元素数量足够多时才可忽略系数、低阶、常数的影响,否则不可忽略)。c.比较交换次数。2.算法的内存消耗:通过空间复杂度衡量。3.算法的稳定...原创 2019-03-19 17:49:42 · 372 阅读 · 0 评论 -
[java数据结构]插入排序--直接插入排序、折半查找、希尔排序
插入排序–直接插入排序、折半查找、希尔排序1.直接插入排序:基于有序数组元素内容的插入得来。做题思路:首先需要找到元素插入位置,再将元素插入即可。核心步骤:将数组分为已排序区间和待排序区间(默认第一个元素为有序的,后面其他元素为无序)。若按照升序排序,则需将待排序区间第一个元素与已排序区间最后一个元素进行大小比较,若大于,则不需移动成为已排序区间最后一个元素即可;若小于,则需要将待排序区间第...原创 2019-03-10 21:02:12 · 309 阅读 · 0 评论 -
[数据结构]java双链表实现增删查改基础操作
双链表实现增删查改基础操作//Sequence.javapublic interface Sequence {//接口 /** * 向线性表中添加元素 * @param data 要存储的元素 */ void add(Object data); /** * 线性表中删除元素 * @param index 要删除的元素下...原创 2019-03-07 14:54:28 · 174 阅读 · 0 评论 -
java单链表增删查改
单链表增删查改//Sequence.javapublic interface Sequence { /** * 向线性表中添加元素 * @param data 要存储的元素 */ void add(Object data); /** * 线性表中删除元素 * @param index 要删除的元素下标 * @...原创 2019-03-09 23:27:56 · 200 阅读 · 0 评论 -
冒泡排序VS直接插入排序
冒泡排序VS直接插入排序我们先思考一个问题:如何衡量一个排序算法的优劣呢?一般来讲我们可从三个方面来看:1.算法的时间效率:a.时间复杂度:最好、最坏、平均时间复杂度相结合判断。b.时间复杂度系数、低阶、常数的影响(因只有元素数量足够多时才可忽略系数、低阶、常数的影响,否则不可忽略)。c.比较交换次数。2.算法的内存消耗:通过空间复杂度衡量。3.算法的稳定性(重要)算法的稳定性...原创 2019-03-09 11:12:20 · 692 阅读 · 0 评论 -
堆排--原地排序和非原地排序
堆排实现内容:1.普通堆排–借助一个新数组实现2.原地排序实现堆排–在原数组基础上实现普通堆排://HeapTest.javapackage heap;import java.util.Arrays;import java.util.Comparator;//基于数组的堆public class HeapTest<E>{ //堆结构为完全二叉树,值要...原创 2019-06-24 23:59:57 · 1103 阅读 · 0 评论