
数据结构
冰生于水
一生热爱不遗憾。
展开
-
数据结构01-自定义ArrayList
闲话少叙,直接步入正题,接下来会手动实现一个低配版ArrayList,提供基本的增删改查等方法;1.定义一个MyList接口,提供所需要实现的基本功能package A01.LSQ;public interface MyList<E>{ // 新增数据 E add(E data); // 插入数据 E add(int index, E d...原创 2018-08-22 19:58:49 · 328 阅读 · 0 评论 -
排序算法01-简单排序
简单排序算法共三种,分别是冒泡排序、选择排序、插入排序,这三种排序算法的算法复杂度均为,这三种排序算法虽然简单,但却是使用频率比较高的;1.冒泡排序的实现原理: 冒泡排序的原理就是按照顺序相邻的比较两个元素,如果前者大于后者,则交换位置,如下图: 观察可知,最大元素9已经被移动到最后的位置,同理可以完成排序。 2.选择排序的实现原理:选择排序的原理就是每次选择一...原创 2018-09-05 00:30:18 · 189 阅读 · 0 评论 -
数据结构08-散列(自定义HashMap)
实现自定义的HashSet之后HashMap也自然水到渠成了,作者的实现方法是以HashSet的方式来类比实现HashMap,而JavaAPI中标准的HashSet是基于HashMap的,因为Map中的keySet方法就是返回一个HashSet,所以只需要隐藏掉Value的相关操作,稍加改造就可以实现HashSet,减少代码冗余。作者的这种方法虽然相对于标准的JavaAPI来说有些冗余,但十分...原创 2018-09-04 21:06:32 · 226 阅读 · 0 评论 -
数据结构07-散列(自定义HashSet)
散列是什么?散列是使用一个散列函数,将一个键映射到一个索引;可以这么理解,ArrayList使用0-N为索引来保存N-1个数据,而散列实现的集合使用经过散列函数处理过的索引来保存数据,如此一来,ArrayList中的数据在内存中是连续的,而散列实现的集合就不一定了。散列的缺点与缺点:优点:插入、更新、删除、查找单个数据速度快,均是O(1)的算法复杂度;缺点:不能有重复数据...原创 2018-09-04 20:38:26 · 280 阅读 · 0 评论 -
数据结构05-二叉查找树(BST)
二叉查找树是树中最基础的,具有如下定义:1.每个根节点最多拥有2个子节点;2.子节点分为左子节点和右子节点,假设根节点为x,左子节点为y,右子节点为z,则必须满足z>x>y; 根据如上的定义可以有如下推论:1.高度为n的二叉树最多由个结点构成,故而,二叉树的平均深度是;2.一个结点左边的所有子节点都小于它,右边则大于它; 对于二叉查找树而言,查找元素是十...原创 2018-08-23 13:14:16 · 247 阅读 · 0 评论 -
数据结构04-栈和队列
至此,数据结构中最基础的三个(表、栈、队列)已经结束了,由于栈和队列也是基于表结构,所以他们均可以使用数组或者链表实现,如果你可以自行实现动态数组和单链表那么基本的栈和队列你一定可以自行实现;栈的特点:LIFO(last in first out,即先进后出),也就是说最先插入的数据只能最后被删除或访问,对于之前实现的动态数组和链表而言,只需要隐藏掉一些方法即可,例如MyArrayList...原创 2018-08-23 12:41:14 · 215 阅读 · 0 评论 -
数据结构03-双向链表
之前有说过链表的首尾操作是十分快速,其实这句话不准确,对于单链表而言,只有一侧的操作快速,另一侧的操作依旧需要大量的移动指针(如果数据多的话);双向链表与单向链表的区别:1.增加了一个指针域保存上一个结点,内存占用大于单链表;2.首尾两侧操作都很快速,而单链表只能保证一侧; 接下来实现一个双向链表:1.定义MyList接口,提供线性表操作规范:见作者的第一篇博客,《数据...原创 2018-08-23 11:07:12 · 135 阅读 · 0 评论 -
数据结构02-单链表
上一篇文章讲述了动态数组ArrayList的简单实现,这次讲述一下单链表这种链式的存储结构,在此之前先弄懂以下几个基本问题:1.什么是单链表?是一种链式存储的数据结构,具有指针域和节点域两块内存空间,相对于其他链表来说,单链表只有一个指针域,且总是指向下一个结点(循环链表可以指向前面的结点);2.与动态数组相比,有什么优势,什么劣势?优势:在于首尾元素的插入与删除和不损性能的长度扩...原创 2018-08-23 08:21:37 · 140 阅读 · 0 评论 -
排序算法04-快速排序
上一篇文章讲述了归并排序,其实快速排序是基于归并排序的,二者都是基于分而治之的算法设计思想,下面讲述快速排序与归并排序的不同之处:1.归并排序分割数组属于“货真价实”的分割,创建了两个新数组接收分割后的两个新数组,而快速排序则通过下标标记来分割,不会创建新数组;2.归并排序分割位置是固定的,每次都是arr.length/2^n(n代表第几次分割),而快速排序通过枢纽元来分割(枢纽元也是一个...原创 2018-09-05 12:00:37 · 162 阅读 · 0 评论