
数据结构
yisuoyanyv
这个作者很懒,什么都没留下…
展开
-
用数组实现一个下压栈 (能够动态调整数组大小)
用数组实现一个下压栈 (能够动态调整数组大小) 在计算机的世界中,栈这种数据结构及其重要。后进先出是栈的主要用途。 日常生活中,栈的思想随处可见: 电梯中的人,总是后进先出 交给别人的文件,后面交的人的文件总是会被先处理。 下面是用数组的方式实现一个栈的代码。 import java.util.Iterator; /** * @author zhangjinglong * @date 2...原创 2019-06-05 21:16:40 · 173 阅读 · 0 评论 -
下压堆栈(链表实现)
下压堆栈(链表实现) 前篇文章讨论了如何用数组实现一个下压栈 (能够动态调整数组大小)的方式,本文接着讨论用简单链表实现栈的方式。 由于链表这种简单的数据结构具有以下优点: 在头结点插入快,不受集合数据规模限制 在头结点删除快,同样与数据量多少无关 综上,插入和删除头结点元素所需时间与集合的大小无关 基于链表以上的两个优点,正好对应栈结构中的压栈和出栈操作,结合一个变量N,保存栈的元素个数,可...原创 2019-06-05 22:56:11 · 218 阅读 · 0 评论 -
选择排序
选择排序 今天,我们来聊聊排序算法,话说,杂乱无章的事物总是让人感觉困惑,而喜欢秩序的人总是能将事物整理的井井有条。我们以重新排列数组元素作为目标进行说明。 排序算法的模型 研究排序算法时,我们要计算比较和交换的数量。对于不交换元素的算法,我们会计算其访问数组的次数。 排序算法API 在讨论排序算法之前,先约定一些通用的API说明。 sort() 各种排序算法的实现 less() 比较两个元...原创 2019-06-13 21:00:47 · 297 阅读 · 0 评论 -
插入排序
上文中介绍了排序算的基本原理和一些概念和约定API,参见选择排序,本节介绍另一种简单的排序算法:插入排序。 插入排序 场景:我们在玩扑克牌的时候,总是一边揭牌,一边将到手的牌插入到之前已经排好序的手牌中。 这是插入排序最生活化的应用。 与选择排序一样,当前索引左边的所有元素都是有序的,但注意,它们但最终位置还不确定,为了给更小的元素腾出空间,它们可能会被向右移动。当索引到达数据右端时,数组排序就完...原创 2019-06-13 21:58:31 · 119 阅读 · 0 评论 -
归并排序-大事化小
归并排序 前情回顾 前面介绍了几种简单的排序方法 选择排序 插入排序 希尔排序 今天的主角是叫做归并排序的一种方法,归并排序最吸引人的性质是它能保证将任意长度为N的数组排序所需时间和 NlogN成正比,而这是其他排序算法复杂度的上限;而它的主要缺点是它所需的额外空间和N成正比。 算法动图 算法思想 简单来说,归并排序就是将一个数组排序的问题,可以先(递归得)将它分成两半分别排序,然后将结果归...原创 2019-06-21 00:24:03 · 185 阅读 · 0 评论 -
基于链表结构实现先进先出 队列
基于链表结构实现先进先出 队列 上文中讲到了如何基于链表结构实现一个栈的数据结构,参考:下压堆栈(链表实现),本篇介绍如何如何实现队列结构。 队列应用: 生活中各种排队场景:食堂排队,银行排队。。。排队意味着公平。VIP除外 常言道:先来后到,先到先得。都是一种队列思想 实现思路: 定义两个实例变量,first和last,分别指向链表的表头和表尾,同时代表队列的队头和队尾。 队列规定,队尾只...原创 2019-06-11 21:12:24 · 639 阅读 · 0 评论 -
希尔排序
截至目前,我们分别介绍了两种基础的排序算法。 选择排序 插入排序 在介绍插入排序时讲到,插入排序的原理是依次交换相邻的元素,适用于元素数量少的情况和数组已经部分有序的情况,而面对大规模乱序数组时,显得力不从心,插入排序会很慢。 针对插入排序的缺点,出现了一种 称为希尔排序的改进算法。 算法定义 希尔排序是为了加快速度简单地改进了插入排序,交换不相邻的元素以对数组的局部进行排序,并最终用插入排序...原创 2019-06-17 22:27:34 · 131 阅读 · 0 评论 -
快速排序
快速排序 前情回顾 前面介绍了几种简单的排序方法 选择排序 插入排序 希尔排序 归并排序 今天介绍经典的快速排序,与归并排序一样,快速排序也是一种分治的排序方法。 快速排序特点 1.实现简单 2.适用于各种不同的输入数据 3.比其他排序算法快得多 4.原地排序(只需要一个很小的辅助栈) 5.所需时间和NlgN成正比。 算法思想 将一个数组分成两个子数组,左子数组和右子数组。当两个子数组分别有序...原创 2019-06-22 16:15:46 · 125 阅读 · 0 评论