数据结构与算法
zl_StepByStep
人是不能太闲的,闲久了,努力一下就以为在拼命!
展开
-
(四)排序算法(Java实现)
本篇博客中总结了以下经典排序算法:冒泡排序、快速排序、简单插入排序、希尔排序、简单选择排序、堆排序、二路归并排序、计数排序、桶排序、基数排序。经典的排序算法分为下面两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序。时间复杂度不能突破O(nlogn)而得此名称。 线性时间非比较类排序:不能通过比较来决定元素间的相对次序。它可以突破比较排序的时间下限,以线性时间运行而得此称。...原创 2018-05-01 14:10:14 · 683 阅读 · 0 评论 -
(一)ArrayList和LinkedList的原理、Java代码实现、性能比较
一、ArrayList1.1、数组和集合的区别 动态大小,即数组的大小不可变,集合的大小可变。 ArrayList从名字上来讲是数组列表,表面上是动态大小,其底层实现原理其实还是一个数组。1.2、简单模拟ArrayList 模拟过程中要注意Array和ArrayList的区别,数组在乎的是能装多少,而ArrayList在乎的是已经装了多少,因为ArrayList要让使用者觉得长度...原创 2018-04-25 10:26:17 · 2559 阅读 · 0 评论 -
(二)栈和队列(Java实现)
本文主要是数组和链表实现栈、链表实现队列。栈和队列的结构都比较简单,用链表实现时都是单链表实现的!一、栈 先进后出。先进来的元素保存在栈的最底部,新来的元素则在栈顶堆积,直到栈满为止;而取元素的时候,只能从栈顶取,直到栈空为止。栈有两种方法:压栈(push)和弹栈(pop)。 数组和链表都可以实现。数组最好只实现固定栈(栈的容量数量固定),链表可以实现动态栈(因为进出栈时,永远只需要对...原创 2018-04-26 15:44:33 · 245 阅读 · 0 评论 -
(五)二叉树(Java实现堆排序、中序排序)
树:一个结点下面有多个子结点。 二叉树:一个节点下面最多有两个子结点关于二叉树的一些概念,可以参考:https://www.cnblogs.com/idorax/p/6441043.html下面主要是总结以下两点:1.使用数组表示二叉树,例:堆排序(这里演示小根堆);2.使用链表表示二叉树,例:中序排序。一、用数组表示二叉树在此不再深究二叉树的种种定义,用数组表示二叉树里讲的...原创 2018-05-03 20:01:44 · 1410 阅读 · 0 评论 -
(三)递归算法(Java实现斐波拉契数列、文件夹遍历、八皇后)
我对递归解释就是:一个有名字有参数的方法自己调用自己!若想对递归有深层次的了解,就需要知道——递归调用过程中什么时候到上一层!!! 看下面三个例子:1.用递归算法实现斐波拉契数列:public class Recursion { //########求Fibonacci数列:1,1,2,3,5,8,...第40个数的值。数列满足递推公式:F1=1,F2=1,Fn=Fn-1+Fn-2。 ...原创 2018-04-26 19:37:56 · 446 阅读 · 0 评论 -
(六)数据结构面试必问
什么是链表、队列、栈?链表: 当需要存储多个相同数据类型的时候,可以使用数组存储,数组可以通过下标直接访问,但数组有个缺点就是无法动态的插入或删除其中的元素(特别是操作第一个位置上的元素),而链表弥补了这个缺陷,对于元素的插入和删除操作是很方便的,不过访问元素的“性能”就差很多了。 所谓单链表,即只有一个指针,指向下一个元素(结点)的地址,只要知道单链表的首地址,就可以遍历...原创 2018-09-19 23:35:06 · 18009 阅读 · 2 评论 -
(七)算法面试必问
列举出常见排序算法非线性时间比较类排序:通过比较来决定元素间的相对次序。时间复杂度不能突破O(nlogn)而得此名称。线性时间非比较类排序:不能通过比较来决定元素间的相对次序。它可以突破比较排序的时间下限,以线性时间运行而得此称。会写常见的排序算法(如快排、归并)吗?https://blog.csdn.net/zl_StepByStep/article/details/8009...原创 2018-09-20 22:51:35 · 944 阅读 · 0 评论