数据结构(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)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

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