算法,一门既不容易入门,也不容易精通的学问。但是作为一条有梦想的咸鱼,我决定努力一大把。
栈与队列分别是两种数据结构,不同语言对于栈和队列有着不同的声明,在 java 中 Stack 类是继承自 Vector 集合的子类,Queue 则是以接口形式存在,常用的其实现类是 LinkedList 这个双向队列。在java的标准模版库也是有这两个数据结构定义的具体类的。
栈数据结构的特点是 FILO(first in last out) 即先进后出,队列则是 FIFO(first in first out)即先进先出。
日常现实生活中处处可见,比如,学生在食堂买饭、在公交车上车排队等。这些排队规律都是先来先处理事件,都不能插队,要遵守一定的规范。其实。我们常用的计算机也有队列,操作系统中的进程、资源等待队列、作业队列等等。
一、队列的概念:
队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作。
队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头。队列的插入操作通常称作入队列,队列的删除操作通常称作出队列。
下图是一个依次向队列中插入数据元素a0,a1,...,an-1后的示意图:
1、顺序队列的“假溢出”: