zoukankan      html  css  js  c++  java
  • 数据结构与算法JavaScript描述——栈

    栈就是和列表类似的一种数据结构,它可用来解决计算机世界里的很多问题。
    栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现。
    栈的使用遍布程序语言实现的方方面面,从表达式求值到处理函数调用。
     
    1.对栈的操作:                                        
    栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。
    栈被称为一种后入先出的数据结构。
    由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。
    为了得到栈底的元素,必须先拿掉上面的元素。
    对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。入栈使用push() 方法,出栈使用pop() 方法。
    另一个常用的操作是预览栈顶的元素。pop() 方法虽然可以访问栈顶的元素,但是调用该方法后,栈顶元素也从栈中被永久性地删除了。
    peek() 方法则只返回栈顶元素,而不删除它。
     
    为了记录栈顶元素的位置,同时也为了标记哪里可以加入新元素,我们使用变量top
    当向栈内压入元素时,该变量增大;从栈内弹出元素时,该变量减小。
    push()、pop() 和peek() 是栈的3 个主要方法,但是栈还有其他方法和属性。
    clear() 方法清除栈内所有元素,length 属性记录栈内元素的个数。
    我们还定义了一个empty 属性,用以表示栈内是否含有元素,不过使用length 属性也可以达到同样的目的。
     
    2.栈的实现:
    实现一个栈,当务之急是决定存储数据的底层数据结构。这里采用的是数组。
     
    代码:
    <script type="text/javascript">
    /**
    *    用数组dataStore 保存栈内元素,构造函数将其初始化为一个空数组。
    *     变量top 记录栈顶位置 被构造函数初始化为0,表示栈顶对应数组的起始位置0。
    *   如果有元素被压入栈,该变量的值将随之变化。
    */
    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 ++;
    }
    
    function pop(){
        this.top --;
        return this.dataStore[this.top];
    }
    
    /**
    * 返回数组的第top-1 个位置的元素,即栈顶元素
    */
    function peek(){
        return this.dataStore[this.top - 1];
    }
    
    /**
    * 有时候需要知道栈内存储了多少个元素。
    * length() 方法通过返回变量top 值的方式返回栈内的元素个数:
    */
    function length(){
        return this.top;
    }
    
    /**
    * 可以将变量top 的值设为0,轻松清空一个栈:
    */
    function clear() {
        this.top = 0;
    }
    
    
    //测试代码
    //倒数第二行返回undefined,这是因为栈被清空后,栈顶就没值了,这时使用peek() 方法预览栈顶元素,自然得到undefined。
    var s = new Stack();
    s.push("David");
    s.push("Raymond");
    s.push("Bryan");
    console.log("length: " + s.length());                            //length: 3
    console.log(s.peek());                                            //Bryan
    var popped = s.pop();
    console.log("The popped element is: " + popped);                //The popped element is: Bryan
    console.log(s.peek());                                            //Raymond
    s.push("Cynthia");
    console.log(s.peek());                                            //Cynthia
    s.clear();    
    console.log("length: " + s.length());                            //length: 0
    console.log(s.peek());                                            //undefined
    s.push("Clayton");    
    console.log(s.peek());                                            //Clayton
    
    
    
    
    
    
    </script>
     
     
     
     
  • 相关阅读:
    android PopupWindow实现从底部弹出或滑出选择菜单或窗口
    AndroidUI开源组件库BottomView 第三方自定义UI控件
    Android LayoutInflater详解
    Android设置上下边框或者左右边框
    杭州驾校模拟考试
    告诉你LTE-FDD与LTE-TDD的区别
    Android-Uiautomator:[5]停止monkey测试
    Android WebView
    解决Item控件抢占焦点
    ACM-计算几何之Quoit Design——hdu1007 zoj2107
  • 原文地址:https://www.cnblogs.com/tenWood/p/7208891.html
Copyright © 2011-2022 走看看