本文源码:GitHub·点这里 || GitEE·点这里

一、队列结构

1、基础概念

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

2、特点描述

队列是一个有序列表,可以用数组或是链表来实现,遵循先进先出的原则。即:先进入队列的数据,会先取出;后进入队列的数据,要后取出;即FIFO原则。

入队列示意图

出队列示意图

通过上述两张图解,不难发现队列结构的一些特点:

  • 先进入的数据先出去;
  • 数据从队尾进入,从队首出去;
  • 基于数组描述队列下标变更频繁;
  • 出队列算法可以基于容器大小取模;

队列结构的核心是对容器内是否空、是否满标志的判断算法,即容器为空不可再取,容器已满无法再存;该算法结构在仓储领域的适应非常广泛。

3、消息队列

消息队列就是基于数据结构中的“先进先出”策略实现的,将消息以排队的方式放入队列中,然后出队列被消费:

有时候某类消息消费需要有顺序控制,即可以对消息中的公共ID做取模处理,即把某类消息都置于一个队列中即可。

4、API使用案例

LinkedList类实现Queue队列接口,因此可以基于LinkedList模拟队列效果。

import java.util.LinkedList;
import java.util.Queue;public class M01_Queue {public static void main(String[] args) {// 入队列Queue<String> queue = new LinkedList<>();queue.add("head") ;queue.add("middle") ;queue.add("tail") ;// 当队列出数据之后,size是不断变化的int queueSize = queue.size() ;int loop = 0 ;// 根据队列大小,不断出队列while (loop < queueSize) {System.out.println(queue.poll());System.out.println(queue);loop ++ ;}}
}

二、栈结构

1、基础概念

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈(push),它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈(pop),它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

2、特点描述

栈是一个先入后出的有序列表,添加和删除只能在栈顶端(Top)操作,另一端为固定的一端,称为栈底(Bottom)。

入栈示意图

出栈示意图

通过上述两张图解,栈结构的一些特点如下:

  • 进栈出栈都要通过栈顶端操作;
  • 进出栈都不移动栈底指针;
  • 进出栈都要移动栈顶指针;

基于栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,从栈容器中而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。

3、递归应用

栈在Java编程中的常见应用,(1)子程序的调用:在跳往子程序前,会将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,退回到原来的程序中;(2)处理递归调用:和子程序的调用类似,除了存储下一个指令的地址外,也要将参数、区域变量等数据存入堆栈中。

4、API使用案例

Stack栈API是Vector的一个子类,它实现了一个标准的后进先出的栈,堆栈只定义了默认构造函数,用来创建一个空栈,堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。

import java.util.Stack;public class M02_Stack {public static void main(String[] args) {// 入堆栈Stack<String> stack = new Stack<>() ;stack.push("First") ;stack.push("Second") ;stack.push("Third") ;int stackSize = stack.size() ;int loop = 0 ;// 根据栈大小,不断出栈while (loop < stackSize) {System.out.println(stack.pop());System.out.println(stack);loop ++ ;}}
}

三、源代码地址

GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

推荐阅读:数据结构和算法

序号 文章标题
01 算法和结构(01):稀疏数组和二维数组转换
02 算法应用:RSA算法,加密解密,签名验签流程详解
03 算法应用:递归算法,处理树形结构下的业务数据

结构与算法(02):队列和栈结构相关推荐

  1. 先进先出算法_结构与算法(02):队列和栈结构

    一.队列结构1.基础概念 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的 ...

  2. JAVA SE学习day_12:集合的排序、队列、栈结构

    一.集合的排序 1.1 集合的排序 集合的工具类java.util.Collections提供了一个静态方法sort,可以对List集合 进行自然排序,即:从小到大 除了自然排序之外还有反转.乱序方法 ...

  3. 队列与栈结构的相同点与不同点

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请 ...

  4. [算法设计题] 双栈结构

    双栈结构 要求 要求编写双栈初始化,判断栈空.栈满.进栈和出栈 已知的双栈结构: typedef struct {int top[2], bot[2]; //栈顶和栈底指针SElemType *V; ...

  5. 算法开启队列转栈武魂

    文章目录 ==**队列接口见 [算法开启小码农队列血脉](https://blog.csdn.net/diandengren/article/details/121072953?spm=1001.20 ...

  6. 类C语言--栈与队列习题:设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。算法应对异常

    此代码可以正常运行,下附有运行区,是实实在在的类C语言 #include <stdio.h> #include <stdlib.h> #include<string.h& ...

  7. 【PAT】PAT总结《搜索、打表、分治、排序算法、队列、栈、堆、Hash》

    打表 打表这个技巧其实我们在素数部分的题已经涉及到了.还是要仔细思考,什么时候应该打表,打表有助于减少后续的计算的时候,我们应该打表, 特别是查询量特别大,即时计算无论多么快都会超时的情况.或者逆向运 ...

  8. 数据结构与算法 | 用队列实现栈

    上一章实现了用栈来实现队列,这一次我们试试用队列来实现栈. 因为栈的特性是先进后出,队列是先进先出. 所以我们可以想到用两个队列,一个空队列,一个放数据,当我们入队的时候将数据直接放入非空队列,出队的 ...

  9. 什么叫结构化算法,为什么要提倡结构化算法?

    定义:由一些基本结构顺序组成,流程的转移只存在于一个基本的结构范围之内. 优点:便于编写,阅读,修改和维护.减少程序出错的机会,提高程序可读性.

最新文章

  1. SAP MM MIGO界面上的Freight标签页
  2. 图像分割matlab_基于MATLAB的指针示数识别
  3. 在C++中子类继承和调用父类的构造函数方法
  4. java spring mvc_java spring mvc 全注解
  5. [转] Android系统如何实现UI的自适应
  6. 标准WPS框架下的空间信息处理服务部署方法
  7. json序列化后日期如何变回来
  8. 中仪股份管道机器人_中仪股份携带管道机器人再次出发美国,携手2018年WEFTEC欢度国庆...
  9. AD模式下出现NetLogon 5781错误的对策
  10. Spring揭秘——什么是IOC和DI
  11. 手动挡你会开吗 八招教你开好手动挡车型
  12. 【Python教程】python之路
  13. uni-app如何使用HBuildX云打包发布app
  14. Python知识点总结(1)
  15. 新西兰计算机预科学费多少钱,留学新西兰预科学费
  16. sql中时间的比较方法
  17. Simulink系统仿真
  18. CAS-01 关于CAS服务端设置自定义返回参数给CAS-CLIENT
  19. 怎么做我们自己的微信营销?
  20. 质因数为2,3,5得数

热门文章

  1. 面试题17. 打印从1到最大的n位数
  2. 字扩展、位扩展、字位同时扩展
  3. Linux日常运维管理技巧(四)文件同步工具-rsync、Linux系统日志、dmesg命令、lastb命令查看登录失败的用户、screen工具虚拟屏幕
  4. Python list合并(列表合并),dict合并(字典合并)
  5. VC++CopyFile函数的用法
  6. Python错误:TypeError: string indices must be integers
  7. sqlmap使用方法
  8. 双数据源配置(一个项目中链接两个数据库)
  9. Ubuntu下apt-get命令详解(转)
  10. 引入mui后,radio单选框不可点击问题解决