不二如是 发表于 2018-4-2 17:05:06

0001 ¥ 栈与队列 |【栈的创建与基础操作】

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

http://xxx.fishc.com/forum/201803/20/101934b3igkgm9hgbgz0ck.gif



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

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

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

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







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

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

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



创建栈

先创建一个类来表示栈,从基础开始,先声明这个类:
function stack(){
      //属性声明
    }

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

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



像栈里添加元素

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

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

代码:
//添加元素
      this.push = function(element){
            items.push(element);
      };

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

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



移除栈中的元素

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

代码:
//移除元素
      this.pop = function () {
            return items.pop();
      };

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



返回栈的长度

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

代码:
//查看栈的长度
      this.size = function(){
            return items.length;
      };



查看栈顶元素

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

代码:
//查看栈顶
      this.peek = function(){
            return items;
      };

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



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



检查栈是否为空

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

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

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



清空和打印栈的元素

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

代码:
//清空栈
      this.clear = function(){
            items = [];
      };

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



将栈中元素输出到控制台

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

代码:
this.print = function(){
      console.log(items.toString());
    };



最终代码

代码:
**** Hidden Message *****



如果有收获,别忘了评分{:10_281:} :

http://xxx.fishc.com/forum/201709/19/094516hku92k2g4kefz8ms.gif

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

http://xxx.fishc.com/forum/201803/21/151715umqz1qoywp11wjbq.gif

dereusi1 发表于 2018-4-16 20:08:33

有帮助

jieweilin 发表于 2018-11-10 20:41:45

前端小坤 发表于 2020-3-23 15:56:08

good

Ruide 发表于 2020-5-18 17:11:54

出栈入栈

qiaoxiaojing 发表于 2020-6-11 17:26:56

优时风 发表于 2020-6-23 19:31:22

1

jack6666 发表于 2022-10-21 22:32:06

1
页: [1]
查看完整版本: 0001 ¥ 栈与队列 |【栈的创建与基础操作】