IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 栈-跟着JavaScript学习数据结构 一 -> 正文阅读

[数据结构与算法]栈-跟着JavaScript学习数据结构 一

栈-跟着JavaScript学习数据结构 一

栈数据机构

栈是一种遵从后进先出原则的有序集合。新添加或者待删除的元素都保存在栈的同一端,称为栈顶,另一端就叫栈底,在栈里,新元素的都靠近栈顶,旧元素都靠近栈底,比如一摞书,一堆碟子

创建一个基于数组的栈

我们通过创建一个类来表示栈

    class Stack{
        constructor(){
            this.items=[]
        }
    }

我们需要一种数据结构来保存栈里的元素,可以选择数组,数组允许我们在任意位置添加或者删除元素,由于栈遵循LIFO原则,需要对元素的插入和删除功能进行限制,规定一些方法

  • push 添加一个(或几个)到栈顶
  • pop 删除栈顶的元素,同时返回被移除的元素
  • peek 返回栈顶的元素,不对栈做任何的修改
  • isEmpty 如果栈里没有任何元素就返回true,否则返回false
  • clear 移除栈的所有元素
  • size 返回栈中的元素个数
向栈中添加元素
function Stack() {
    //1.各种属性和方法的声明
        var items = [] [];//1.1需要一种数据结构来保存栈里的元素。可以选择数组
        // 1.2接下来,要为我们的栈声明一些方法
        this.push = function(element){
            items.push(element);
            console.log(items);
        };
    }
    //测试类
    var s =new Stack();
    s.push("aa");
    s.push("bb");
向栈中删除元素
     this.pop = function(){
            return items.pop();
        };
查看栈顶元素

为我们的类实现一些额外的辅助方法。如果想知道栈里最后添加的元素是什么,可以用 peek 方法。这个方法将返回栈顶的元素:
因为类内部是用数组保存元素的,所以访问数组的最后一个元素可以用 length - 1

 this.peek = function(){
            return items[items.length-1];
        };
判断栈是否为空

如果栈为空的话将返回 true ,否则就返回 false :
使用 isEmpty 方法,我们能简单地判断内部数组的长度是否为0

 this.isEmpty = function(){
            return items.length == 0;
        };
返回栈的长度

类似与数组的length属性

 this.size = function(){
        return items.length
 }
清空栈

数组的清空的最简单的方法就是将length置为0

  this.clear = function(){
      items.length = 0
  }
打印栈元素
    this.print = function(){
           console.log(items.toString());
        }

使用stack类

function Stack() {
        var items = [];
        // 判断栈是否为空
        this.isEmpty = function(){
            return items.length == 0;
        };
        // 往栈里添加的元素
        this.push = function(element){
            items.push(element);
            console.log(items)
        };
        // 往栈里添加的最后一个元素
        this.peek = function(){
            return items[items.length-1];
        };
        // 栈里有多少个元素
        this.size = function(){
            return items.length;
        };
        // 移除
        this.pop = function(){
            return items.pop();
        };
        // 打印栈现在的元素有哪些
        this.print = function(){
           console.log(items.toString());
        };
    }
    var stack =new Stack();//
    console.log(stack.isEmpty());//true
    stack.push(5);
    stack.push(8);
    console.log(stack.peek());//输出8.因为它是往栈里添加的最后一个元素
    stack.push(11);
    console.log(stack.size());//3
    console.log(stack.isEmpty()); //输出false
    stack.pop();
    console.log(stack.size()); //输出2
    stack.print();//5,8
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:29:50  更:2021-07-27 16:30:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:23:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码