数据结构(1)--用js做一个栈,并写出 压栈 和弹栈。

首先来科普一下数据结构中的栈是什么:

专业术语:

是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

----

其实专业术语并不难懂,但是为了大家更通俗易解一些,下面用图示来给大家解释一下数据结构中的栈:


可以把栈理解成一个杯子,可以一直往杯子里面放数据,但是放入的数据并不可以灵活调用,最先放入的数据库将被放入杯子最底部,然后再放入一个数据将在这个最先放入的数据的上面,然后一次叠加,这叫做压栈

如果你想取出最低下的数据,或者其他数据,就得以此弹出这些数据,直到弹到你想要的数据,这叫弹栈。

接下来加上代码:

我们先定义一个存放数据的类 

function Node(value){

        this.value = value; // 用于指向传入的数据

        this.point = null;    // 用于指向上一个传入的数据 后面会用到

}

我们再定义一个栈类:

function Stack(){

        this.top = null;//栈顶指针

        this.bottom = null;//栈底指针

        this.push=function(value){ //压栈

                    node = new Node(value);

                    if(this.bottom!=null){   //当this.bottom指向的节点不为null时 则把 node.point的节点指向this.top以前指向的地方,并且把this.top指向新传进来的节点    (2)图   就这样 来回叠加 this.top 不断指向新传入的节点 也就是最顶点 而node.point也是不断上方节点指向下方节点 如 (3)图

                            node.point = this.top;

                            this.top = node;

                     }else{         //如果this.bottom指向的节点为null 那证明是第一次传入数据节点 那么将this.bottom 和 this.top都指向新传入的这个节点就ok  (1)图

                            this.bottom = node;

                            this.top = node;

                    }

          }

          this.pop = function(){    //弹栈

                    node = null;

                    if(this.top!=null){  //当this.top不为null时,node表示为 最顶点的数据节点 this.top,并将this.top变为最顶点节点的下面的节点

                                node = this.top;

                                this.top = node.point;

                                if(this.top==null){   //当this.top一直往下变为null时 this.top 将不再变化 最底层的this.bottom也会变成null

                                        this.bottom = null;

                                 }

                    }

                    return node;  //每执行一次 将 node弹出一次 也就是将最顶层的 数据结点弹出一次

            }

}

(1)


(2)


(3)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,789评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 想你,几乎是每天都在想你。 脑袋闲下来就会想你,就是这样子也觉得很幸福,因为我还能够想你。 会在抑制不住情感的深夜...
    苏语Suu阅读 197评论 1 0
  • 如果我是一条小溪 我愿留在这里 听风听雨看云看你 哪里再也不去 谁说到大海才是意义 难道到了那里就不孤寂 从来没有...
    拔剑心茫然阅读 178评论 0 1