算法|结构与算法:队列和栈结构

文章图片

文章图片

一、队列结构1、基础概念队列是一种特殊的线性表 , 特殊之处在于它只允许在表的前端(front)进行删除操作 , 而在表的后端(rear)进行插入操作 , 和栈一样 , 队列是一种操作受限制的线性表 。 进行插入操作的端称为队尾 , 进行删除操作的端称为队头 。
2、特点描述队列是一个有序列表 , 可以用数组或是链表来实现 , 遵循先进先出的原则 。 即:先进入队列的数据 , 会先取出;后进入队列的数据 , 要后取出;即FIFO原则 。
入队列示意图:
出队列示意图:
通过上述两张图解 , 不难发现队列结构的一些特点:
- 先进入的数据先出去;
- 数据从队尾进入 , 从队首出去;
- 基于数组描述队列下标变更频繁;
- 出队列算法可以基于容器大小取模;
3、消息队列消息队列就是基于数据结构中的“先进先出”策略实现的 , 将消息以排队的方式放入队列中 , 然后出队列被消费:
有时候某类消息消费需要有顺序控制 , 即可以对消息中的公共ID做取模处理 , 即把某类消息都置于一个队列中即可 。
4、API使用案例LinkedList类实现Queue队列接口 , 因此可以基于LinkedList模拟队列效果 。
二、栈结构1、基础概念栈(stack)又名堆栈 , 它是一种运算受限的线性表 。 限定仅在表尾进行插入和删除操作的线性表 。 这一端被称为栈顶 , 相对地 , 把另一端称为栈底 。 向一个栈插入新元素又称作进栈、入栈或压栈(push) , 它是把新元素放到栈顶元素的上面 , 使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈(pop) , 它是把栈顶元素删除掉 , 使其相邻的元素成为新的栈顶元素 。
2、特点描述栈是一个先入后出的有序列表 , 添加和删除只能在栈顶端(Top)操作 , 另一端为固定的一端 , 称为栈底(Bottom) 。
入栈示意图:
出栈示意图:
通过上述两张图解 , 栈结构的一些特点如下:
- 进栈出栈都要通过栈顶端操作;
- 进出栈都不移动栈底指针;
- 进出栈都要移动栈顶指针;
3、递归应用栈在Java编程中的常见应用 , (1)子程序的调用:在跳往子程序前 , 会将下个指令的地址存到堆栈中 , 直到子程序执行完后再将地址取出 , 退回到原来的程序中;(2)处理递归调用:和子程序的调用类似 , 除了存储下一个指令的地址外 , 也要将参数、区域变量等数据存入堆栈中 。
4、API使用案例【算法|结构与算法:队列和栈结构】Stack栈API是Vector的一个子类 , 它实现了一个标准的后进先出的栈 , 堆栈只定义了默认构造函数 , 用来创建一个空栈 , 堆栈除了包括由Vector定义的所有方法 , 也定义了自己的一些方法 。
推荐阅读
- 糖尿病并发症|糖尿病人的胖与瘦,哪个更容易发生并发症?
- 杨振宁|网传物理学家杨振宁去世,系谣言!昨夜还与友人回信互动!
- 印度_社会|天灾还是人祸?印度多年前与美国联手“监视”中国,现在自食恶果
- 红蜘蛛|防治红蜘蛛与蚜虫,阿维菌素与哪种农药复配,可以提高防治的效果
- 辣椒|关于信仰、哲学与科学的迷思|東西堂主
- 腰椎间盘突出症|经常腰痛,可能与哪些疾病有关?别再拖下去了
- 白云飞|青春榜样|参与大国重器项目!硕博生白云飞和他的万米海试
- es|JGR:中国区域大尺度强Es结构观测研究
- 西安市第八医院|西安市第八医院封闭隔离区一检验师确诊新冠,该病例未与外界接触
- 手揉披萨饼胚-与达美乐同款做法
