zoukankan      html  css  js  c++  java
  • 栈与队列

    一. JS数据结构实现: 栈和队列
    1). 栈与队列的理解
    栈: 遵循后进先出(LIFO)原则的有序集合。新添加的或是待删除的元素都保存在栈顶,而另一端我们称作栈底。(压栈)
    队列: 遵循先进先出(FIFO)原则的有序集合,队列从尾部添加新元素,从顶部移除元素

    2). 栈与队列的行为
    1. 栈
    push(element): 添加一个或是几个新元素到栈顶
    pop(): 移除栈顶的元素,同时返回被移除元素
    peek(): 返回栈顶的元素,但并不对栈顶的元素做出任何的修改
    size(): 返回栈的元素个数
    isEmpty(): 检查栈内是否有元素,如果有返回true,没有返回false
    clear(): 清除栈里的元素
    2. 队列
    enqueue(element): 向队列尾部添加一个(或是多个)元素。
    dequeue(): 移除队列的第一个元素,并返回被移除的元素。
    front(): 返回队列的第一个元素——最先被添加的也是最先被移除的元素。队列不做任何变动。
    size(): 返回队列的长度。
    isEmpty(): 检查队列内是否有元素,如果有返回true,没有返回false
    clear(): 清除队列里的元素

    ## 3). 自定义栈
     (function (window) {
        
          let items = []
        
          function Stack() {
        
          }
        
          Stack.prototype.push = function (el) {
            items.push(el)
          }
        
          Stack.prototype.pop = function () {
            return items.pop();
          }
        
          Stack.prototype.peek = function () {
            return items[items.length - 1]
          }
        
          Stack.prototype.size = function () {
            return items.length
          }
        
          Stack.prototype.isEmpty = function () {
            return items.length === 0
          }
        
          Stack.prototype.clear = function () {
            items = []
          }
        
          Stack.prototype.toString = function () {
            return items.toString() + ' ' + 'Stack'
          }
        
          window.Stack = Stack
        
        })(window)


    4). 自定义队列
    (function (window) {
        
          let items = []
        
          function Queue() {
        
          }
        
          Queue.prototype.enqueue = function (el) {
            items.push(el)
          }
        
          Queue.prototype.dequeue = function () {
            return items.shift()
          }
        
          Queue.prototype.front = function () {
            return items[0]
          }
        
          Queue.prototype.size = function () {
            return items.length
          }
        
          Queue.prototype.isEmpty = function () {
            return items.length === 0
          }
        
          Queue.prototype.clear = function () {
            items = []
          }
        
          Queue.prototype.toString = function () {
            return items.toString() + ' ' + 'Queue'
          }
        
          window.Queue = Queue
        
        })(window)
        
        
    const obj1 = {}
    const obj2 = {}
    const obj3 = {}
    
    obj1.next = obj2
    obj2.next = obj3
  • 相关阅读:
    iOS 两个App之间调起通信
    iOS图片压缩处理
    c# XML和实体类之间相互转换(序列化和反序列化)
    asp代码获取年数,季度数.星期数,天数,小时数,分钟数,秒数等时
    C# 响应微信发送的Token验证,文字、图文自动回复、请求客服对话.....
    sql server2008 R2打开报错:无法识别的配置节 system.serviceModel解决办法分享
    html5/css3响应式布局介绍及设计流程
    C#从入门到精通视频教程(2009年最新) 视频列表
    视频播放flv player的使用
    ASP中DateDiff函数详解
  • 原文地址:https://www.cnblogs.com/baixiaoxiao/p/11061105.html
Copyright © 2011-2022 走看看