
数据结构和算法
文章平均质量分 83
Creating
这个作者很懒,什么都没留下…
展开
-
(一)线性数组的数据结构和算法
一、数据结构描述:1. 插入操作:对于一般数组(不包括有序数组)而言,插入一个元素,即在数组的最后面添加一项。当然,我们这里讨论的并不全面,因为一个数组的长度定义以后就不能再改变。所以,在添加数据项时,还要保证没有超过数组的长度限制。一旦超过了数组容量,就会报错ArrayIndexOutOfBoundsException。所以,对于长度固定的数组而言,并不适用于实际应用中的所原创 2009-08-25 12:31:00 · 3639 阅读 · 0 评论 -
(十六)高级排序—快速排序
一、快速排序描述:快速排序的基本思想是:将最右端的元素作为枢纽,然后将所有元素划分为两组,然后将最右端的枢纽元素与枢纽位置上的元素替换(枢纽位置即为prititioin方法返回的位置,这样做的目的是使枢纽元素以后不需要再排序);接下来,再将这两个组最右端的元素分别作为两组的枢纽继续划分,依次类推下去,直到只剩下最后一个元素。快速排序的起始图如下所示:二、快速排序Java语言描述原创 2009-09-15 21:43:00 · 951 阅读 · 0 评论 -
(十五)高级排序—划分算法
一、 划分算法描述1. 划分就是将数据项分成两组,一组大于某个特定的数据项,而另一组小于某个特定的数据项。在划分算法中,这个特定的数据项叫做枢纽。2. 如下图所示:划分算法的思想是:中间的横线代表枢纽;数据项的左端和右端分别有两个指针(leftPtr和rightPtr);leftPtr从左向右遍历元素,rightPtr从右向左遍历元素,当le原创 2009-09-15 20:35:00 · 1875 阅读 · 0 评论 -
(十三)递归
一、递归的特点:1. 递归都在调用自身2. 当调用自身的时候,是为了解决更小的问题3. 存在某个足够简单的问题层次,这一层不需要调用自己就可以解决问题 二、有序数组二分法查找用递归实现package com.solid.recursive;public class BinarySearch { private l原创 2009-09-07 22:30:00 · 764 阅读 · 0 评论 -
(十四)高级排序—希尔排序
一、希尔排序说明:1. 希尔排序是由于计算机科学家Shell而得名,他在1959年发明了希尔排序算法。希尔排序是基于插入排序,增加了一些新的特性,提高了插入排序的效率。2. 回顾以往我们的插入排序,会发现,如果一个最小的元素在最右端,进行插入排序时,将他取出放入临时变量,几乎所有的元素都要向右移动一位,效率会非常的低。而希尔排序正好对他进行了原创 2009-09-09 22:29:00 · 631 阅读 · 0 评论 -
(十二)链表—双向链表
一、双向链表说明:1. 以前所遇到的链表都只提供了从前向后遍历数组的功能,而双向链表提供了从最后向前遍历数组的功能。这是因为在双向链表中都有两个指向其他链表的引用。2. 当然,双向链表也有它的缺点:每次插入和删除链结点的时候,都要处理四个引用;此外,双向链表的链结点比其他链表的链结点占用的空间要多。双向链表如下图所示: 二、Java语言描述原创 2009-09-06 22:38:00 · 806 阅读 · 0 评论 -
(十一)链表—有序链表
一、Java语言描述有序链表在有序链表中数据按照关键字有序的排列,插入到有序链表中的程序如下所示:package com.solid.link;public class SortLink { //对第一个链结点的引用 private Link first; /** * 构造方法 */ public SortLi原创 2009-09-03 19:28:00 · 894 阅读 · 0 评论 -
(十)链表—双端链表
一、双端链表简介双端链表和一般的链表相似,但是它拥有最后一个链结点的引用,这样方便在最后一个元素后面插入元素。双端链表结构如图所示: 二、Java语言描述双端链表package com.solid.link; public class FirstLastLink { //指向第一个结点的引用 private Link first;原创 2009-09-03 19:20:00 · 741 阅读 · 0 评论 -
(九)链表—单链表
一、链表说明:1. 链表是继数组之后的又一个使用很广泛的数据结构。链表包括有单链表、双端链表、有序链表、双向链表和有迭代器的链表等。2. 在链表中,每个数据项在“链结点”(Link)中。每个Link对象都包含一个对下一个链结点的引用字段(通常叫做next),链表本身有一个字段指向对第一个链结点的引用。链表的结构如图所示: 二、单链表的操作:原创 2009-08-31 20:32:00 · 880 阅读 · 0 评论 -
(四)简单排序—冒泡排序
一、冒泡排序的思想:1. 首先这些简单排序(包括:冒泡排序、选择排序和插入排序)针对的数据结构是数组。2. 冒泡排序的整个思想是:从左到右,依次对相邻的两个元素比较大小,将较大的元素移动到右侧(这里的移动其实是将较小的元素放入中间临时变量temp,将较大的移动到右侧,然后将较小的放回到左侧。当然,如果原本右边的值就大,就不需要交换位置。),当第一轮比较完原创 2009-08-26 12:36:00 · 1317 阅读 · 0 评论 -
(七)抽象数据结构—栈
一、抽象数据结构说明:1. 栈、队列和优先级队列是比数组和其他数据结构更为抽象的结构。它们主要是作为构思算法的辅助工具,而不是完全的数据存储工具。这些数据结构的生命周期比那些数据库类型的结构要短得多。在程序执行期间它们才被创建,通常用他们去执行某项特殊的任务;当完成任务之后他们就被销毁。2. 此外,它们的访问时受限制的,即在特定的时刻只有一个数据项可以原创 2009-08-26 18:11:00 · 1127 阅读 · 0 评论 -
(二)有序数组的二分法查找
一、有序数组的二分法查找有序数组是一种特殊的数组,里面的元素,按一定的顺序排列,我们这里假设由小到大排列。对于这种特殊的数组,我们可以采用前面提到的二分法来查找数组中特定的元素,这种算法的思想是:每查找一次,便将查找的范围缩小一半,所以叫做二分法查找。 有序数组的优点就是增加了查询的效率,但是它并没有提高删除和插入元素的效率,因此,对于有序数组更适合用于查询的领域。 二分法原创 2009-08-25 18:16:00 · 3374 阅读 · 0 评论 -
(六)简单排序—插入排序
一、插入排序思想:将位置为1(即下标为1)的元素取出复制到temp的临时变量,然后将它与位置1之前(当然这里只有0)的元素进行比较,如果temp中的值比位置0的值大,则直接将temp复制到位置1。如果它比位置0的值小,则将位置0的值向右移动一位,然后将temp复制到位置0。这样前两位元素就局部有序了。接下来,取出位置2上的元素复制到temp临时变量,将它与2之前的两个元素进行比较,如原创 2009-08-26 18:09:00 · 994 阅读 · 0 评论 -
(五)简单排序—选择排序
一、选择排序思想:选择排序的思想是:首先将第一个位置的元素标记为最小,依次与后面的元素比较,当发现比第一个元素更小的元素时,将那个元素标记为最小,然后用最小的这个元素继续与后面的元素比较,直到最后,然后将第一轮比较中最小的元素,与第一个元素交换位置。接下来,进行第二轮循环,再以第二个元素作为起点,将其标记为最小,因为第一个元素已经排好了位置。依然按照上面的方法比较。依次类推,直到将所有最小原创 2009-08-26 18:07:00 · 1017 阅读 · 0 评论 -
(三)数组中存储对象
一、数组描述在现实世界中,数组并不仅仅可以存储像我们以前所描述的基础数据类型,它还可以存储对象(当然,在Java语言中实际存储的是对象的引用。)下图描述了数组存储对象的原理:二、Java语言描述数组存储对象:package com.solid.array;public class Person { //名 private String firs原创 2009-08-25 18:51:00 · 9464 阅读 · 0 评论 -
(八)抽象数据结构—队列
一、队列说明:队列和栈一样,也属于抽象数据类型,也主要是作为构思算法的辅助工具之一。不同的是队列的实现原理和栈不同,它采用的是FIFO(先进先出),而栈则是LIFO(后进先出)。下面我们用数组来实现队列的描述,当然,队列的实现也可以采用链表等数据结构。二、Java语言描述队列:package com.solid.queue;publicclass Queue原创 2009-08-27 18:06:00 · 999 阅读 · 0 评论