javascript算法与数据结构之栈

栈的概述

列表是一种最自然的数据组织方式,如果数据存储顺序不重要,也不必对数据进行查找,那么列表就是一种再好不过的数据结构。对于其他一些应用,列表就显得太过简陋了,我们需要某种和列表类似但是更复杂的数据结构。
栈就是和列表类似的一种数据结构,它可用来解决计算机世界里的很多问题。栈是一种高效的数据结构,因为数据只能在栈顶添加或者删除,所以这样的操作很快,而且容易实现。栈的使用遍布程序语言实现的方方面面,从表达式求值到处理函数调用。

对栈的操作

栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。咖啡厅内的一摞盘子是现实世界中常见的栈的例子。只能从最上面取盘子,盘子洗净后,也只能摞在这一摞盘子的最上面。栈被称为一种后入先出的数据结构。
由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈顶元素,必须拿掉上面的元素
对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。入栈使用push()方法,出栈使用pop()方法。
另外个常用的操作是预览栈顶的元素。pop()方法虽然可以访问栈顶元素,但是调用该方法后,栈顶元素也从栈中被永久性地删除了。peek()方法则只返回栈顶元素,而不删除它。

栈示意图

这里写图片描述

入栈和出栈

为了记录栈顶元素的位置,同时也为了标记哪里可以加入新元素,我们使用变量top,当向栈内压入元素时,该变量增大;从栈内弹出元素时,该变量减小

 push() pop() 和peek() 是栈的三个主要方法,但是栈还有其他属性和方法。clear()方法清除栈内所有元素,length属性记录栈内元素的个数。我们还定义了一个empty属性,用以表示栈内是否含有元素,不过使用length属性也可以达到同样的目的。   

栈javascript实现(可用于nodejs)

//栈的实现
function Stack(){
    this.dataStore = [];//用于储存栈元素的数组
    this.top =0;
    this.push = push;
    this.pop=pop;
    this.peek = peek;
    this.clear = clear;
    this.length = length;
}
function push(element){
    this.dataStore[this.top++] = element; //注意这里的区别 如果是++this.top 的话就不一样了 例子 var i,j;i=j=3; i++(表达式返回值是3,同时i的值4)  ++i(表达式返回值是4,同时i的值4) 
}
function peek(){
    return this.dataStore[this.top-1];//返回顶部的栈元素
}
function pop(){
    return this.dataStore[--this.top];//出栈 返回顶部的栈元素同时让栈元素减少
}
function clear(){
    this.top = 0; //清除栈
}
function length(){
    return this.top; //返回栈元素个数
}

window.onload = function(){
        var s = new Stack();
        s.push('David');
        s.push('Raymond');
        s.push('Bryan');
        console.log('length: '+s.length());
        console.log(s.peek());
        var popped = s.pop();
        console.log('The popped element is :'+popped);
        console.log(s.peek());
        s.push('Cynthia');
        console.log(s.peek);
        s.clear();
        console.log('length: '+s.length());
        console.log(s.peek());
        s.push('Clayton');
        console.log(s.peek());
};

参考书籍

数据结构与算法javascript描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值