鱼C论坛

 找回密码
 立即注册
查看: 2295|回复: 7

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

[复制链接]
发表于 2018-4-2 17:05:06 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 不二如是 于 2018-4-4 10:51 编辑


                               
登录/注册后可看大图





数组是计算机世界中最常用的数据结构,默认鱼油已经会使用了~

我们可以在数组中“为所欲为”,增删改查随意操作。

有两种结构类似数组,在“增加”和“删除”时更为可控,没错,就是“栈与队列”

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






stack.jpg


栈(Stack)是遵循LIFO(Last In First Out)原则的有序集合。

新添加的或待删除的元素都保存在栈的同一端,即栈顶。(新元素靠近栈顶,旧元素靠近栈底)

常被用在编程语言的编译器和内存中保存变量、方法调用等。




创建栈

先创建一个来表示栈,从基础开始,先声明这个类:
  1. function stack(){
  2.         //属性声明
  3.     }
复制代码


然后我们需要一种数据结构来保存栈里的元素,可以选择数组:
  1. let items =[];
复制代码


接下来要为这个栈声明一些方法:
  1. push(element(s)) -> 添加一个(多个)新元素到栈顶。
  2. pop() -> 移除栈顶的元素,同时返回被移除的元素。
  3. peek() -> 返回栈顶的元素,不对栈做任何修改(不会移除栈顶的元素,仅仅返回它)
  4. isEmpty() -> 如果栈里没有任何元素就返回true,否则返回false
  5. clear() -> 移除栈里的所有元素。
  6. size() -> 返回栈里的元素个数。
复制代码





像栈里添加元素

通过使用push(),完成往栈里添加新元素。

记住:
该方法只添加元素到栈顶(即栈的末尾)


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


我们使用了数组来保存栈里的元素。

记住:
为了符合后进先出原则,只能用push()方法,往栈里添加元素。





移除栈中的元素

栈遵从后进先出原则,因此移除的是“最后添加进去的元素”

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


记住:
为了符合后进先出原则,只能用pop()方法,从栈中删除元素。





返回栈的长度

对于集合,最好用size代替length,因为栈的内部使用数组保存元素,所以可以简单返回栈的长度。

代码:
  1. //查看栈的长度
  2.         this.size = function(){
  3.             return items.length;
  4.         };
复制代码





查看栈顶元素

如果想知道栈里最后添加的元素,就要用peek()方法。

代码:
  1. //查看栈顶
  2.         this.peek = function(){
  3.             return items[items.length-1];
  4.         };
复制代码


因为内部用数组保存元素,最后一个元素可以用整体长度(length)-1

Snip20180402_42.png


上图中又一个包含三个元素的栈,内部数组长度位3,最后一项的位置是[2](3-1)。




检查栈是否为空

使用isEmpty()可以简单的判断内部数组的长度。

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


栈为空返回true,否则返回false。




清空和打印栈的元素

使用clear()方法可以用来清除栈中的所有元素。

代码:
  1. //清空栈
  2.         this.clear = function(){
  3.             items = [];
  4.         };
复制代码


另外也可以通过多次调用pop()方法,把数组中的元素清除。




将栈中元素输出到控制台

最后,我们要把栈中的元素全部输出。

代码:
  1. this.print = function(){
  2.         console.log(items.toString());
  3.     };
复制代码





最终代码

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





如果有收获,别忘了评分


                               
登录/注册后可看大图


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



                               
登录/注册后可看大图

评分

参与人数 1贡献 +3 收起 理由
睦ちゃん她爹 + 3

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-4-16 20:08:33 | 显示全部楼层
有帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-10 20:41:45 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-23 15:56:08 | 显示全部楼层
good
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-18 17:11:54 | 显示全部楼层
出栈入栈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 17:26:56 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 08:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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