鱼C论坛

 找回密码
 立即注册
查看: 1955|回复: 4

[庖丁解牛] 0005 ¥ 栈与队列 |【队列的创建与基础操作】

[复制链接]
发表于 2018-4-5 16:20:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2018-4-5 16:20 编辑


                               
登录/注册后可看大图





我们已经学了,那么毫无疑问就轮到“队列”了。

栈是后进先出,队列则是先进先出

基础介绍请看:0 1 2 4 ★ Js中‘仿 ' 【栈stack】&【队列queue】| 【鱼C独家】




1.jpg


队列(Queue)是遵循FIFO(First In First Out)原则的有序的项。

队列在尾部添加新元素,并从顶部移除元素,最后添加的元素必须排在队列的末尾。




创建队列

我们来用创建一个队列,先从最基本的声明开始:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <meta name="keywords" content="小甲鱼,Web开发,HTML5,CSS3,Web编程教学">
  7.     <meta name="description" content="《零基础入门学习Web开发》案例演示">
  8.     <meta name="author" content="鱼C工作室">
  9.     <title>鱼C-数据结构与算法(JavaScript)</title>
  10. </head>
  11. <body>
  12. <script>
  13. //    声明一个队列
  14.     function Queue(){
  15.         //定义属性和方法
  16.     }
  17. </script>
  18. </body>
  19. </html>
复制代码


首先需要一个用于存储队列中元素的数据结构,可以使用数组

在Queue()方法中创建一个数组:
  1. //        创建数组
  2.         let items = [];
复制代码


接下来需要声明一些队列的方法:
enqueue(element(s)):像队列尾部添加一个(多个)新的项。

dequeue():移除队列的第一个(最前面的顶部)项,并返回被移除的元素。

front():返回队列中的第一个元素(最先被添加,最先被移除)。
(队列不会有任何改变,不删除,只返回元素的信息)

isEmpty():如果队列中不包含任何元素,返回true,否则false。

size():返回队列包含的元素个数。





enqueue(element(s))像队列添加元素

这个方法负责像队列中添加新的项,记住:
新的项只能添加到队列末尾。


代码:
  1. //        添加新的项
  2.         this.enqueue = function(element){
  3.             items.push(element);
  4.         };
复制代码


由于JS的数据结构特点,我们往队列的末尾添加值。

此时就可以用JS的push方法。

预知详情请看:0 0 4 6 ★ 数组对象之push()方法




dequeue()从队列中移除元素

这个方法负责移除项,由于队列遵循先进先出原则,最先添加的项最先被移除。

此时可以用JS的Array类中的shift方法。

预知详情请看:0 0 5 2 ★ 数组对象之shift()方法

示例:
  1. //        移除元素
  2.         this.dequeue = function(){
  3.             return items.shift();
  4.         };
复制代码





front()查看队列的头元素

如果突然想知道队列最前面的项是什么,就可以用front()。

示例:
  1. //        查看项
  2.         this.front = function(){
  3.             return items[0];
  4.         };
复制代码


默认返回第0项,可以手动指定查看队列中的任何一项,然后修改item[n]中的n值即可。




isEmpty()检查队列是否为空

如果队列为空,会返回true,否则返回false。

示例:
  1. //        检查是否为空
  2.         this.isEmpty = function(){
  3.             return items.length == 0;
  4.         };
复制代码





size(),返回队列包含的元素个数。

本方法可以返回队列的长度,如果长度为0,也可以用来判断队列是否为空。

示例:
  1. //        检查队列长度
  2.         this.size = function(){
  3.             return items.length;
  4.         };
复制代码





打印输出队列元素

运用本方法,会在控制台输出队列中的指定元素。

示例:
  1. //        输出元素
  2.         this.print = function(){
  3.             console.log(items.toString());
  4.         };
复制代码





最终的Queue

源码:
游客,如果您要查看本帖隐藏内容请回复





如果有收获,别忘了评分


                               
登录/注册后可看大图


这位鱼油,如果喜欢本系列学习笔记,请订阅 专辑&#9758;传送门)(不喜欢更要订阅



                               
登录/注册后可看大图

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-24 09:01:32 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-15 09:40:25 | 显示全部楼层
啦啦啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-7 16:24:05 | 显示全部楼层
1111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-21 22:48:40 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 15:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表