数据结构
swpu_ocean
个人博客网站:www.zhyocean.cn
展开
-
Java集合中的ArrayList和LinkedList
前言在平时的开发过程中我们会使用到许多的数据结构,其中表也许是使用最多的一种。明白Collections容器的朋友一定都是使用过其中的List容器。这里我将通过创建自己的List来说明表的源码实现。这里主要实现两个库类重要子集ArrayList和LinkedList的代码。区别ArrayList和LinkedList分别是表的两种实现方式。各自有着各自的优点和缺点。我们都知道ArrayLi...原创 2018-10-02 14:23:46 · 243 阅读 · 0 评论 -
排序算法之交换排序(冒泡排序、快速排序)
前言在前面几篇博客中总结了插入排序(直接插入和希尔排序)、选择排序(直接选择和堆排序)以及归并排序,这里将讲下两种选择排序算法——冒泡排序和快速排序。冒泡排序基本概念冒泡排序相对快速排序而言相对简单。冒泡就如同水里的鱼吐泡泡一样,刚开始时泡泡很小,但随着上浮离水面越来越近,泡泡也逐渐变大。冒泡排序也是因此而来,在每一趟排序中,依次比较相邻的两个数,选出最大的数将它移到一端,最终将得到一个有...原创 2018-11-12 13:52:24 · 1158 阅读 · 1 评论 -
排序算法之归并排序
基本思想归并排序是利用归并的思想,合并两个已排序的表,将结果输出到第三个表中。基本的合并算法是去两个输入数组A和B,一个输出数组C,以及3个计数器Actr、Bctr、Cctr,它们初始置于对应数组的开始端,当数组A[Actr]或数组B[Bctr]中的较小者被拷贝到C中的下一个位置时,相关的计数器向前推进一步。归并排序采用经典的分治策略,它将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶...原创 2018-11-07 14:03:38 · 302 阅读 · 0 评论 -
排序算法之选择排序(直接选择、堆排序)
排序算法稳定性假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。 ————百度百科排序原理每一趟从待排序序列中找出最小的元素,顺序放在已排好序的序列最后,直到全部序列排序完毕。直接排序原理假设...原创 2018-11-01 18:10:43 · 1711 阅读 · 0 评论 -
排序算法之插入排序(直接插入、希尔排序)
前言一个好的排序算法对于程序的优化会有很大的提升,虽然在许多语言的类库中就存在了N种排序方法,但是只有在了解了每一种排序算法后才能更好的在实际中运用这些算法。这里我主要说明插入排序中的直接插入以及希尔排序的实现。直接插入直接插入排序是最简单的排序算法之一。对于直接插入排序,它始终维护着一个有序序列,在每一次插入操作时都将元素插入到这个有序序列对应的位置上。对于一个待排序序列:3 1 4 8...原创 2018-10-31 16:19:45 · 445 阅读 · 0 评论 -
完全二叉树——二叉堆(BinaryHeap)
前言优先队列是允许至少下列两种操作的数据结构:insert(插入)以及deleteMin(删除最小者),其中deleteMin的工作是找出、返回、并删除优先队列中最小的元素。insert操作等价于enqueue(入队),而deleteMin则相当于dequeue(出队)。二叉堆的性质二叉堆的使用对于优先队列的实现相当普遍。二叉堆具有结构性和堆序性:结构性质堆是一棵被完全填满的二叉树,有可...原创 2018-10-20 15:48:20 · 2981 阅读 · 0 评论 -
查找树之二叉查找树
写在前面最近一直在专心学习数据结构,刚好看到树这一章。之前大一学习的数据结构是以C语言为基础的,然而当时也没有好好听讲,现在也是比较后悔,通过接下来的这段时间准备好好学习一下树的知识,也通过博客来记录一下对于其中的理解。概述先简单介绍一下树以及二叉树的概念。树的概念树(Tree)是一些节点的集合,这个集合可以是空集,则该树就是一棵空树。而对于一棵非空树而言,这棵树是由一个称为根root...原创 2018-10-07 19:48:32 · 276 阅读 · 0 评论 -
数据结构之栈篇
前言栈是一种只能在一端进行插入和删除操作的特殊线性表。其中,允许插入和删除的一端称为栈顶,另一端称为栈底。对于栈的操作有两种:进栈(push)和出栈(pop)。前者相当于插入栈元素,后者则是删除栈元素。由于对于栈元素的操作只能位于栈顶,因此,栈中最先插入的元素一定位于栈底,而最后插入的元素位于栈顶。栈又叫做“后进先出(LIFO)”表对于栈的实现有两种:通过数组实现通过单链表实现...原创 2018-10-07 19:46:17 · 508 阅读 · 0 评论 -
AVL平衡树的旋转与实现
前言上一篇博客中讲解了二叉查找树的实现,但是我们在对其进行删除操作时,采用的是用被删除节点的右子树中的最小元素代替该节点,并将最小元素节点删除,这样导致的后果可想而知,再经过不断的remove操作后,整棵树会处于极度不平衡状态,会导致该树的左子树过深,而右子树过浅的问题。要想解决这种问题,就需要实现一种平衡查找树。平衡查找树我们这里将介绍一种古老的平衡查找树————AVL树。平衡的条件:任...原创 2018-10-13 13:11:58 · 298 阅读 · 0 评论 -
排序算法之基数排序
基本思想基数排序是将整数按位数分割成不同的数字,然后按每个位数分别比较,得到一个有序的序列。具体做法则是将一个数组中的每一个数统一成相同位数,位数不足高位补零。从个位开始按大小排序,当遇到位数大小相同时,要保证顺序与原数组相同。这样从个位一直到高位,就得到一个有序的序列。实现思路文字性的语言总是那么不便于理解,那么我们来通过图文说明下基数排序的思路。假设有这样一个大小为10的数组:{6,6...原创 2018-11-23 22:06:23 · 279 阅读 · 0 评论