java数据结构和算法的概述

来源:互联网 发布:数据结构与算法c pdf 编辑:程序博客网 时间:2024/06/06 00:11

一、概述

数据结构:对计算机内存中的数据的一种安排。

算法:对结构中的数据进行各种处理。

二、应用方面:

1、现实世界数据存储;

2、程序员的工具;

3、现实世界的建模。

三、各数据结构优缺点

数据结构类别优点缺点链接备注无序数组插入快,可以直接放到末尾O(1)查找慢O(N)、删除慢O(N)、大小固定
点击打开链接 有序数组比无序数组查找快O(LogN),可以使用二分查找删除慢O(N)、插入慢O(N),大小固定,由于是有序的,插入需移动其他项点击打开链接 单链表插入快O(1)查找慢O(N)、删除慢O(N),若从首或尾删除较快O(1)点击打开链接每个节点有下一个节点的引用,整个链表能找到首双端链表插入快O(1)查找慢O(N)、删除慢O(N),若从首或尾删除较快O(1)点击打开链接较单链表,整个链表能找到尾双向链表插入快O(1)查找慢O(N)、删除慢O(N),若从首或尾删除较快O(1)点击打开链接较双端链表,每个节点有上一个节点的引用有序链表比无序链表查找快O(LogN)、删除快O(LogN),可以使用二分查找。插入也可以O(LogN)。 点击打开链接 二叉树查找、删除、插入都快(数平衡的情况)删除算法复杂点击打开链接 红黑数(平衡树)查找、插入、删除快 算法复杂点击打开链接 2-3-4树(平衡树)查找、插入、删除快算法复杂点击打开链接 哈希表  插入快,通过关键字存取快删除、查找慢线性探测:点击打开链接
再哈希法:点击打开链接
链地址法:点击打开链接底层通过数组实现堆插入O(LogN)、删除快O(LogN),对最大数据项的存取快。对其他数据项存取慢点击打开链接数据结构是完全二叉树树,底层通过数组实现,父节点关键值大于子节点,弱序栈提供后进先出的存取方式存取其他项很慢点击打开链接 队列提供先进先出的存取方式存取其他项很慢点击打开链接 图对现实世界建模有些算法慢且复杂点击打开链接                          


四、复杂度表示法

而lg在数学里面称为常用对数,常用对数就是以10为底数的对数.【举例,10的2次方等于100,那么lg(100)就等于2】

O(1)  优秀

O(Log N)  良好

O(N)  还可以

O(N²) 差



五、数据结构

1、数组、链表、树适合于数据库应用中作为数据记录;

2、栈和队列:

(1)、通常情况作为程序员的工具来运用;

(2)、受限访问

(3)、更加抽象(主要通过接口进行定义)

(4)、底层也是通过数组或链表完成的

3、数组的最大特点就是:寻址容易,插入和删除困难;而链表正好相反,寻址困难,而插入和删除操作容易。那么如果能够结合两者的优点,做出一种寻址、插入和删除操作同样快速容易的数据结构,那该有多好。这就是哈希表创建的基本思想,而实际上哈希表也实现了这样的一个“夙愿”,哈希表就是这样一个集查找、插入和删除操作于一身的数据结构。

4、通用数据结构:数组、链表、树、哈希表。

      通用数据结构按速度的快慢分类:数组和链表是最慢的,树相对较快,哈希表是最快的。  

      但是最快的并不是最好的方案,首先最快的比数组、链表复杂,编程复杂。


六、排序算法

1、比较:

级别类别排序方法时间复杂度
(平均情况)时间复杂度
(最好情况)时间复杂度
(最坏情况)空间复杂度
(辅助存储)稳定性说明连接地址 简单排序插入排序直接插入O(n^2)O(n)O(n^2)O(1)稳定将待排序的无序数列看成是一个仅含有一个元素的有序数列和一个无序数列,将无序数列中的元素逐次插入到有序数列中,从而获得最终的有序数列点击打开链接 高级排序插入排序希尔排序O(n^(1+e))(其中0<e<1)O(n)O(n^2)O(1)不稳定插入排序的升级版。先将整个待排序的记录序列按照一定的间隔直接插入排序,然后按照一定的规则间隔逐渐缩小,直到缩小为1,这样循环的去插入排序。点击打开链接 简单排序选择排序直接选择O(n^2)O(n^2)O(n^2)O(1)不稳定直接选择排序是对冒泡排序的优化,每次只有找到最小或者最大的元素才进行交换,大大减少了交换次数。点击打开链接 高级排序选择排序堆排序 O(nLogN)O(nLogN)O(nLogNO(1)不稳定堆排序是一种树形选择排序,是对直接选择排序的有效改进。点击打开链接 简单排序交换排序冒泡排序O(n^2)O(n)O(n^2)O(1)稳定从数组右往左依次相邻俩数比较,一次循环比较后最小的排在了最左面,依次对剩下的元素进行循环比较,反之先排出大的也可以。点击打开链接 高级排序交换排序快速排序O(nLogN)O(nLogN)O(n^2)O(LogN)不稳定冒泡+二分+递归分治。先从数列中取出一个数作为基准数,根据基准数将数列进行分区,小于基准数的放左边,大于基准数的放右边。重复分区操作,直到各区间只有一个数为止。点击打开链接 高级排序 归并排序O(nLogN)O(nLogN)O(nLogN)O(n)稳定将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,将每个子序列排成有序的。然后再把有序子序列合并为整体有序序列。点击打开链接 高级排序 基数排序O(d(r+n))
r代表关键字的基数,d代表长度,
n代表关键字的个数O(d(n+rd))O(d(r+n))O(rd+n)稳定依次按照低、高位进行排序收集点击打开链接 

2、简单概括


3、使用准则




源码下载:点击打开链接

原创粉丝点击