首页 > 其他分享 >什么是栈?栈的基本操作

什么是栈?栈的基本操作

时间:2022-08-22 19:22:12浏览次数:60  
标签:function 什么 元素 栈顶 item push 基本操作 stack

 

什么是栈?

栈(stack),它是一种运算受限的线性表,后进先出(LIFO)

  • LIFO(last in first out)表示就是后进入的元素, 第一个弹出栈空间. 类似于自动餐托盘, 最后放上的托盘, 往往先把拿出去使用.

  • 其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。

  • 向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;

  • 从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

 

栈的基本操作

函数调用栈

     var A = function(){
            B();
            console.log("A");
        }
        var B = function(){
            C()
            console.log("B");
        }
        var C = function(){
            A()
            console.log("C");
        }
        A()

 未捕获的RangeError:超过最大调用堆栈大小

 

 

 

     var A = function(){
            B();
            console.log("A");
        }
        var B = function(){
            C()
            console.log("B");
        }
        var C = function(){
            // A()
            console.log("C");
        }
        A()

 

 

 

常用操作

 

  • push(element): 添加一个新元素到栈顶位置.

 

  • pop():移除栈顶的元素,同时返回被移除的元素。
  • peek():返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返回它)。
  • isEmpty():如果栈里没有任何元素就返回true,否则返回false
  • clear():移除栈里的所有元素。
  • size():返回栈里的元素个数。这个方法和数组的length属性很类似。

 

 

通过ES5进行封装栈方法:

1、函数

function Stack() {
            //开辟空间  保存栈元素
            this.item = []

            // 1向栈添加元素 数组的最后添加元素
             this.push = function(ele){
                this.item.push(ele)
             }
            // 2 移除栈顶元素 ,返回栈顶元素(数组最后一个元素)
            this.pop = function(){
                let delnode = this.item.pop()
                return delnode
            }
            // 3 返回栈顶元素(数组最后一个元素)
            this.peek = function(){
                let index =this.item.length-1;
                return this.item[index]
            }
            // 4判空 栈为空true 数组的length长度来判断是否为空
            this.isEmpty = function(){
                return this.item.length ==0;
            }

            // 5清空栈
            this.clear = function(){
                this.item = []
            }

            // 6栈元素的个数   数组中元素的个数
            this.size = function(){
                return this.item.length
            }

        }
        let stack = new Stack()
        stack.push(1)
        stack.push(2)
        console.log(stack.pop(2))
        stack.push(3)
        stack.push(4)
        stack.push(5)
        console.log(stack);

 

 

 

2、原型

 function Stack() {
            //开辟空间  保存栈元素
            this.item = []

            // 1向栈添加元素 数组的最后添加元素
             Stack.prototype.push = function(ele){
                this.item.push(ele)
             }
            // 2 移除栈顶元素 ,返回栈顶元素(数组最后一个元素)
            Stack.prototype.pop = function(){
                let delnode = this.item.pop()
                return delnode
            }
            // 3 返回栈顶元素(数组最后一个元素)
            Stack.prototype.peek = function(){
                let index =this.item.length-1;
                return this.item[index]
            }
            // 4判空 栈为空true 数组的length长度来判断是否为空
            Stack.prototype.isEmpty = function(){
                return this.item.length ==0;
            }

            // 5清空栈
            Stack.prototype.clear = function(){
                this.item = []
            }

            // 6栈元素的个数   数组中元素的个数
            Stack.prototype.size = function(){
                return this.item.length
            }

        }
        let stack = new Stack()

        console.log(stack);

 

 

 

 

通过ES6进行封装

class Stack {

            constructor() {
                this.item = []
            }
            // 1.向栈顶添加元素   数组的最后添加元素
            push(ele) {
                this.item.push(ele)
            }

            // 2.移除栈顶元素,返回栈顶元素(数组最后一个元素)
            pop() {
                let delnode = this.item.pop();
                return delnode
            }

            // 3.返回栈顶元素(数组最后一个元素)
            peek() {
                let index = this.item.length - 1;
                return this.item[index]
            }

            // 4.判空 栈为空true  数组的length长度来判断栈是否为空
            isEmpty() {
                return this.item.length == 0;
            }

            // 5.清空栈
            clear() {
                this.item = [];
            }

            // 6.栈元素的个数 == 数组中元素的个数
            size() {
                return this.item.length
            }

        }
     let stack = new Stack()

        console.log(stack);
 

 

 

 

栈应用

进制转换

    function zhuanhuan(chushu, base) {
   let stack = new Stack() let arr = ["A", "B", "C", "D", "E", "F"] while (chushu > 0) { let yushu = chushu % base if (yushu > 9) { stack.push(arr[yushu - 10]) } else ( stack.push(yushu) ) chushu = Math.floor(chushu / base) } let str = "" while (!stack.isEmpty()) { str += stack.pop() } return str } console.log(zhuanhuan(20, 2))

 

标签:function,什么,元素,栈顶,item,push,基本操作,stack
From: https://www.cnblogs.com/LIXI-/p/16612874.html

相关文章

  • 什么是数据血缘,如何做好数据血缘分析?
    大数据时代,数据的来源极其广泛,各种类型的数据在快速产生,也在爆发性增长,这导致了数据之间的关系也变得越发复杂。因此对数据工程师来说,如何管理表之间、代码之间的复杂关......
  • 正则表达式 $1 $2代表什么?
    $1,$2是表示的匹配的小括号里的内容$1是匹配的第一个小括号里的,$2是匹配的第2个小括号里的//将yyyy-mm-dd格式转换为年月日格式functionchDate1date(str){va......
  • pnpm凭什么这么快
    前端包管理器层出不穷,pnpm算是一个后起之秀。它和npm有什么不同,为什么有了npm还要造一个pnpm?npm的问题npm是最早的包管理器,安装nodejs自带npm,v3版本之前,npm安全依赖的目......
  • 【Java基础】什么是数组
    1.什么是数组Array:多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理。(1)说明①数组本身是引用数据类型,数组中的元素可......
  • 什么是数据结构?
     数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素的集合。--百度 数据结构用途:解决问题方法的效率,根数据的组织方式有......
  • Linux到底要做什么?
    从上一回分析了Linux到底是什么之后。我觉得得具体地思考一下我们到底在实际应用中会拿Linux做什么?从产品应用上来说:如手机、智能电视、智能音箱、车载中控1.手机性能调......
  • Linux-->vi和vim编辑器的基本操作
    vim编辑器介绍vi或者vim就是对linux下的文本进行编辑的一种编辑器比如说a.cpp文件这种Linux会内置vi文本编辑器Vim可以简单的认为vi的增强版Linux是区分大小写的!用......
  • 从 InfluxDB 到 TDengine,阳光氢能为什么会做出这个选择?
    小 T 导读:为了更好地支持阳光氢能PEM绿电制氢系统,本文作者所在的部门需要寻找一套满足业务和性能需求、而且具有国产知识产权的时序数据库,来替代原本使用的InfluxDB......
  • 为什么渲染的时候,明明ajax请求没问题,模板引擎也没问题,却没有呢(layui加template)
    这是因为layui的渲染机制造成的,你在加载的时候是空的,然后你模板获取到之后,已经渲染结束了,所以啥也没有,这个时候我们需要重新渲染一下//初始化文章分类functioninit......
  • 什么是docker的写时复制(CoW)?有什么作用?
    问题一个问题:dockerCoW你知道是什么吗? 1、什么是CoW? CoW=Copy-On-Write 也就是,你经常会听到的一个词,叫做:写时复制。 那么,到底什么是写时复制,究竟有什么样......