1,数据结构:
数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。
数据结构的三要素:
1)逻辑结构:
逻辑结构是指数据元素之间客观存在的关系,和数据在计算机中怎么存储无关,主要用于人们理解和交流以及指导算法的设计。逻辑结构分为四类:
- 线性结构:数据元素之间存在一对一的关系
- 树形结构:数据元素之间存在一对多的关系
- 图形结构:数据元素之间存在多对多的关系
- 集合结构:数据元素属于同一个集合
2)物理结构(存储结构):
逻辑结构主要用于算法设计,而存储结构用于指导算法编程实现。存储结构有基本的两种结构:
- 顺序存储:逻辑上相邻的元素存储在物理位置相邻的存储单元中。
- 链式存储:在数据元素中添加一些地址域或辅助结构,用于存放数据元素之间的关系。
3)数据的运算
数据结构中的操作主要是指数据元素的查找、插入、删除、遍历和排序等等。
2,常用数据结构:
1).数组
在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型。
2).链表
链表是一种非连续、非顺序的结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,链表由一系列结点组成。
3).堆栈
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。它体现了后进先出(LIFO)的特点。
4).队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作,亦即所谓的先进先出(FIFO)。
5).哈希表
散列表也叫哈希表,是根据关键键值(Keyvalue)进行访问的数据结构,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做散列函数。
6).树
树(tree)是包含n(n>0)个节点的有穷集合,其中:每个元素称为节点(node)有一个特定的节点被称为根节点或树根(root),除根节点之外的其余数据元素被分为m(m≥0)个互不相交的结合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)。
7).堆
堆是一颗完全二叉树,在这棵树中,所有父节点都满足大于等于其子节点的堆叫大根堆,所有父节点都满足小于等于其子节点的堆叫小根堆。
8).图
图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
3,算法:
算法用来设计并实现一种用计算机来解决问题的方法。
它满足下列性质:
- 输入:有零个或多个输入量
- 输出:产生至少一个输出量
- 确定性:算法的指令清晰、无歧义
- 有限性:算法的指令执行次数有限,执行时间有限
4,常见算法:
1)快速排序算法
快速排序是一个知名度极高的排序算法,其对于大数据的优秀排序性能和相同复杂度算法中相对简单的实现使它注定得到比其他算法更多的宠爱。
2)堆排序算法
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。
3)归并排序
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
4)二分查找算法
二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。
5) 选择排序
选择排序简单直观,先在数据中找出最大或最小的元素,放到序列的起始;然后再从余下的数据中继续寻找最大或最小的元素,依次放到排序序列中,直到所有数据样本排序完成。
6)插入排序
通过构建有序序列,对于未排序的数据序列,在已排序序列中从后向前扫描,找到相应的位置并插入,类似打扑克牌时的码牌。插入排序有一种优化的算法,可以进行拆半插入。
来源:oschina
链接:https://my.oschina.net/u/4804839/blog/4720881