数据结构之队列
队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。
比如我们去电影院排队买票,第一个进入排队序列的都是第一个买到票离开队列的人,而最后进入排队序列排队的都是最后买到票的。
在比如在计算机操作系统中,有各种队列在安静的工作着,比如打印机在打印列队中等待打印。
队列分为:
①、单向队列(Queue):只能在一端插入数据,另一端删除数据。
②、双向队列(Deque):每一端都可以进行插入数据和删除数据操作。
这里我们还会介绍一种队列——优先级队列,优先级队列是比栈和队列更专用的数据结构,在优先级队列中 ...
二分查找算法
一个游戏:讲二分查找算法之前,先讲个猜数字游戏的规则:从1-100中猜测一个预先设置的数字,猜测者每次猜测一个数字,设定数字的人会告知比猜测的数字大或者小或者猜对了。
### ·简单算法:
我们可以每次从1开始猜测,第二次猜2,依次增加,如果数字设置的小还好,如果设置较大,那么猜测的次数将大大增加,我们称这种算法为简单算法。
·二分查找算法(又叫折半算法):正确的做法是从50开始猜,如果大了,我们第二次开始猜25,如果小了,我们就猜75,以此类推,这样1-100中的数字,我们一定能在7次猜对对方给出的数字,这就是二分查找算法的思路。
二分查找算法图示:二分算法次数:
样本放大,如果是从1-1亿中猜数字,那么简单猜测的步数就是1亿次,而二分查找算法的步数是27次,算法的威力就提现出来了。二分查找算法的步数的计算公式是log₂n(n是数字范围)
~算法的代码实现(Java版):1、循环实现二分查找算法/**
* 循环实现二分查找算法
* @param list:需要查找的有序数组
* @param result:查找的目标值
* @return
*/
public s ...
数据结构与算法之数组
1.概述数组是应用最广泛的一种数据结构,常常被植入到编程语言中,作为基本数据类型使用,因此,在一些教材中,数组并没有被当做一种数据结构单独拿出来讲解(其实数组就是一段连续的内存,即使在物理内存中不是连续的,在逻辑上肯定是连续的)。其实没必要在概念上做纠缠,数组可以当做学习数据结构的敲门砖,以此为基础,了解数据结构的基本概念以及构建方法
数据结构不仅是数据的容器,还要提供对数据的操作方法,比如检索、插入、删除、排序等
2.无序数组下面我们建立一个类,对数组的检索、插入、删除、打印操作进行封装,简便起见,我们假设数组中没有重复值(实际上数组可以包含重复值)
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950public class Array {` private String [] strArray; private int length = 0; //数组元素个数 //构造方法,传 ...
数据结构与算法之基本概念
1.概述
数据结构之间的相互关系称为逻辑结构。通常分为四类基本结构:
●集合:结构中的数据元素除了同属于一种类型外,别无其他关系。●线性结构:结构中的数据元素之间存在一对一的关系。●树形结构:结构中的数据元素之间存在一对多的关系。**●图状结构或网状结构:**结构中的数据元素之间存在多对多的关系。
数据结构在计算机中有两种不同的存储方法:
**●顺序存储结构:**数据元素在存储器中的相对位置来表示数据元素之间的逻辑关系。**●链式存储结构:**在每一个数据元素 中增加一个存放地址的指针,呲指针来表示数据元素之间的逻辑关系。