![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java数据结构和算
文章平均质量分 83
Jane_No1
这个作者很懒,什么都没留下…
展开
-
Java数据结构和算法-数组
1.Java数组的基础知识1.1 创建数组Java当中的数据类型有两类,一类是基础类型(如int和double),还有一类是对象类型,在许多编程语言中(如C和C++),数组属于基础类型,但在Java当中,数组属于对象,所以数组的创建方式利用new操作符:int[] array; //定义对数组的引用array = new int[100]; //创建一个数组,并且利用array来引用它或者使用等原创 2016-11-28 16:23:15 · 467 阅读 · 0 评论 -
Java数据结构和算法-归并排序的递归应用
归并排序是一种比简单排序快很多的排序算法,在之前介绍的简单排序比如冒泡排序、选择排序的时间都是O(N^2),而归并排序只需要O(N*log(N))的时间,从下图就可以发现归并排序比简单排序要快多少: 而且归并排序的实现相当容易。它的唯一的缺点就是需要在存储器中有一个与原数组相同大小的数组,如果初始的数组已经几乎占满了整个存储器,那么归并排序将是不可行的,不过如果存储器有足够的空间,那么这将是一原创 2016-12-29 12:01:07 · 553 阅读 · 0 评论 -
Java数据结构和算法-链表(5-迭代器)
在链表中可以通过find()方法来查找到某一个特定的值,也可以通过delete方法删除某一个特定的值。这些操作都有一个搜索的工作,以找到特定的链接点。 在链表中进行一次某个值的查找删除或插入是简单的。但是现实中,经常会进行的是对某些特定的链接点的操作,而这些操作也都要进行搜索的工作。例如:要查找出所有某班成绩低于平均成绩的同学,要改变公司所有拥有最低工资的员工工资。这些都要进行搜索。 但是链表原创 2016-12-23 15:11:52 · 830 阅读 · 0 评论 -
Java数据结构和算法-链表(4-双向链表)
传统的链表沿链表进行反向遍历是很困难的,比如:current = current.next可以很快的找到下一个链接点,但是却没有方法返回前一个链接点。根据应用的不同,这个限制可能为会引发一些问题。比如在之前提到过的要删除链表当中的最后一个链接点,虽然在双端链表中,可以通过last的引用很快的找到最后一个链接点,但是由于倒数第二个链接点无法快速找到(删除最后一个链接点时,需要将last指原创 2016-12-21 17:30:56 · 459 阅读 · 0 评论 -
Java数据结构和算法-链表(3-有序链表)
链表的效率在表头当中插入和删除的速度是很快的,仅仅需要一到两个引用值,和链接点的多少无关,只需O(1)的时间。 不过,查找和删除指定的链接点和在指定位置插入链接点仍然需要搜索一半的链接点,所以比较时间为O(N)。虽然,数组的查找、插入和删除的比较时间也为O(N),但链表在插入和删除链接点的时候不需要移动任何东西,这样增加的效率是显著的,特别是在复制时间比比较时间大的多时。 还有一点就是链表原创 2016-12-12 14:43:43 · 641 阅读 · 0 评论 -
Java数据结构和算法-链表(2-双端链表)
双端链表和传统的链表非常相似,唯一的不同点在于,双端链表的表头除了有一个指向第一个链接点的Link对象first外,还有一个指向链表最后一个链接点的Link对象last。如下图: 双端链表可以很快的像普通链表一样在表头位置插入新节点,同时也可以在表尾直接插入新节点。虽然普通链表也可以做到在表尾插入新链接点,但是需要通过遍历链表直到表尾,这显然效率是很低的。双端链表的Java代码链接点的类与之前原创 2016-12-08 15:46:40 · 447 阅读 · 0 评论 -
Java数据结构和算法-综述
Java数据结构和算法是对Robert Lafore的Java数据结构和算法学习的以自己方式的总结,里面可能会有绝大部分的内容和书上描述差不多(原谅我的语文不怎么好)。1.数据结构和算法的作用数据结构是对计算机内存或者磁盘中的数据的一种安。数据结构大致有数组、链表、图、二叉树等等。而算法是对数据结构中存储的数据进行一系列处理。大致可分为三类情况:现实世界数据的存储、程序员工具、建模。1.1现实世原创 2016-11-28 11:38:01 · 541 阅读 · 0 评论 -
Java数据结构和算法-链表(1-单链表)
在前面所讲的数组当中,我们发现虽然数组能解决基本的插入、删除和查找的问题,但是数组却存在着一些缺点,无序数组的查找有序数组的插入,以及两者的删除效率都很低,而且数组创建之后其大小是固定不变的。 而在本章中所讲的链表就可以解决这些问题,它也是一种数据存储结构,在大多数情况下我们可以通过链表来代替数组的操作,比如说栈和队列的实现,除非需要频繁的通过下标随机访问数据。链接点(Link)在每个链表中,每一原创 2016-12-08 13:32:26 · 542 阅读 · 0 评论 -
Java数据结构和算法-栈和队列(4-解析算术表达式)
解析算术表达式,例如3+4*5等和之前所学的例子匹配分隔符类似,都是利用栈来实现的,只不过解析算术表达式会更复杂一些。 计算机算法直接求算术表达式是很难的,但是通过下面两个步骤实现算法会相对容易很多:将算术表达式转换为另一种表达式:后缀表达式。计算后缀表达式的值。在研究两个步骤的具体实现之前,我们先介绍后缀表达式。后缀表达法在生活中,我们使用的都是中缀表达式,即将操作符放在两个操作数的中间,原创 2016-12-07 11:59:48 · 2319 阅读 · 0 评论 -
Java数据结构和算法-栈和队列(3-优先级队列)
优先级队列是比栈和队列更为专用的数据结构,它和普通的队列一样有一个队尾和一个队头,并且每一次移除数据项时,都从队头处移除,不同的地方在于,优先级队列是按照关键字有序排列的,比如在本文中,我们将优先级队列按照关键字从队头到队尾由大到小排列,那么关键字越大越接近队头也就越早会被移除(访问)。也正因为这个性质,所以优先级队列的插入不是在队尾插入,而是根据关键字的值被插入合适的位置。 以之前讲的职员安排工原创 2016-12-06 14:35:55 · 769 阅读 · 0 评论 -
Java数据结构和算法-栈和队列(2-队列)
队列(queue)和我们生活中的队伍一样,是一种等待服务的模式,就是站到队列中去。它也是一种数据结构,和栈一样,也是作为程序员的一种辅助工具,但是栈是先进后出,而队列是先进先出,这和我们现实世界的排队是一样的,它可以被用在一些复杂的数据结构算法中,比如图,也可以用于模拟真实世界的环境,比如模拟电影院的排队取票等。 在计算机操作系统当中,队列也有其用武之地。打印作业在打印队列中等待着打印操作。同时原创 2016-12-05 15:31:21 · 566 阅读 · 0 评论 -
Java数据结构和算法-栈和队列(1-前言+栈)
本章要将的栈和队列与之前所讲的数据结构和算法有三个不同之处:程序员的工具前面所讲的数组和后面要讲的其他数据结构(链表、树等)都是用来记录数据库中的数据,常常用于存储现实世界的对象和活动的数据。如学生档案和商务数据等等,这些数据结构都具有便于插入、删除和查找的优点。 而本章所要讲的栈和队列是作为程序员的工具来使用的。它们主要作为构思算法的辅助工具,而不是完全的用来数据存储。这些数据结构的生命周期要比原创 2016-12-05 15:09:20 · 732 阅读 · 0 评论 -
Java数据结构和算法-简单排序(4-对象排序及几种排序的比较)
对象排序原创 2016-12-05 09:15:11 · 546 阅读 · 0 评论 -
Java数据结构和算法-简单排序(3-插入排序)
在大部分情况下,插入排序是简单排序中最好的,虽然插入排序算法仍然需要O(N^2)的时间,但是它要比冒泡排序快一倍,比选择排序快一点,尽管插入排序算法比冒泡和选择排序算法麻烦一些,但也并不复杂,它常作为复杂排序的最后一段,比如快速排序。插入排序的例子同样以体育课排队为例,只不过这次利用插入排序。 这次假设,利用插入排序已经排好了队伍的一半(这样更便于对插入排序的理解),即在中间的同学的右边队伍是有序原创 2016-12-03 15:15:22 · 612 阅读 · 0 评论 -
Java数据结构和算法-简单排序(2-选择排序)
选择排序改进了冒泡排序,将其必要的交换时间由O(N^2)减小为O(N),虽然在比较效率上两者没有太大差别,但是对于大记录量的排序需要在内存中移动来说,这就使得移动的时间和比较的时间相比要重要很多。选择排序的例子和冒泡排序类似,以体育课学生排队为例,这次体育委员不再使用冒泡排序,而是采用选择排序对班级的同学进行排序。 程序如下:利用一个毛巾来标记当前最矮的同学。首先先记编号0位置的同学是编号0到N-原创 2016-12-03 15:01:48 · 699 阅读 · 0 评论 -
Java数据结构和算法-简单排序(1-冒泡排序)
一般在创建数据库之后,就可能对某些数据进行排序。例如:对商店的销售品按价格排序,对城市按人口增长率进行排序等。排序一般作为检索的一个初始步骤,正如在前面所讲的数组中,二分查找要比线性查找快的多,但是二分查找只适用于有序的数据。 排序非常重要但又十分耗时,因此它成为了一个计算机科学领域广泛研究的课题,并且也已经有了不少的成就。比如在本章的简单排序中的冒泡排序、选择排序和插入排序。 本章描述的算法很原创 2016-12-02 14:20:48 · 710 阅读 · 0 评论 -
Java数据结构和算法-数组(续)
2.大O表示法二分查找和线性查找在数据个数较少时看不出太大的区别,但是随着数据项个数的增多,差异也就回越来越明显,如下表: 范围 所需比较次数 10 4 100 7 1000 10 10000 14 100000 17 10000000 20 100000000 24 1000000000 27 10000000000 3原创 2016-12-02 10:46:27 · 453 阅读 · 0 评论 -
Java数据结构和算法-高级排序(1-希尔排序)
在之前所讲的简单排序,虽然简单易实现,但是速度很慢,归并排序速度不慢,也易实现,但是却需要原始数组两倍大的空间。 在本章所讲的高级排序:希尔排序和快速排序都要比简单排序快得多:希尔排序只需要时间O(N*log(N)^2),而快速排序只需要时间O(N*log(N))。并且希尔排序和快速排序都不需要很大的辅助空间,希尔排序和归并排序一样容易实现,而快速排序是当前所讲的排序当中速度最快的一种。希尔排序希原创 2016-12-30 11:28:42 · 590 阅读 · 0 评论