首頁 >web前端 >js教程 >簡單了解JavaScript資料結構與演算法之棧

簡單了解JavaScript資料結構與演算法之棧

WBOY
WBOY轉載
2022-06-13 17:48:451638瀏覽

本篇文章為大家帶來了關於javascript的相關知識,其中主要介紹了關於棧的相關問題,包括了面向過程方法源碼編寫棧以及用面向對象的方法來源碼書寫等等內容,下面一起來看一下,希望對大家有幫助。

簡單了解JavaScript資料結構與演算法之棧

【相關推薦:javascript影片教學web前端

1.認識堆疊

堆疊:(stack)又稱為堆疊,它是一種運算受限的線性表。 遵循後進先出(LIFO)

#棧頂#:限定僅在表尾進行插入和刪除操作的線性表,

堆疊底:限定僅在表頭進行插入和刪除操作的線性表。

進棧:向一個棧插入新元素又稱為進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;

#出棧#:從一個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素

#2.以過程方法原始碼編寫堆疊


#2.1思考

面向過程是什麼:

面向過程就是將解決問題的步驟分析出來,

接著用函數實現,

只要一步一步的執行呼叫他就可以了。


2.2需要實作的方法

  1. #push(element)新增一個或多個元素到棧頂
  2. pop()刪除錢頂的元素,並回傳移除的元素
  3. peek ()返回堆疊頂部的元素
  4. isEmpty()用來判斷堆疊是否為空,空則為空
  5. clear()用於清空堆疊的元素
  6. size()用於傳回堆疊中元素的個數字

在實作之前我們先思考我們怎麼實現

#首先我們借用陣列的方法來實現,所以我們需要建立

一個空數組來模擬堆疊


2.3源碼實現,並呼叫類別

建構一個類,用數組來模擬,

在類別中書寫各種方法

部分呼叫數組的方法。

總的來說就是用類別來包裝

陣列的方法來實作堆疊的模擬

class Stack {
   constructor() {
       this.item = []
         }
   push(element) {
        this.item.push(element)
               }
   pop() {
      return this.item.pop()
          }
   peek() {
       return this.item[this.item.length - 1]
            }
   isEmpty() {
       return this.item.length === 0
            }
   clear() {
         this.item = []
   size() {
          return this.item.length
            }
        }
//实例化Stack类
const stack = new Stack()
stack.push(4)
stack.push(6)
console.log( stack.pop())
console.log(stack.peek())
console.log(stack.isEmpty())
console.log(stack.size())

運行結果:


# 3.用物件導向的方法來源碼書寫


#3.1思考

物件導向:

就是將建構問題的事物,分解成若干個物件

建立物件不是為了完成某個步驟,而是為了

描述某個事物在解決問題過程的行為


3.2需要实现的方法

  1. push(element)添加一个或多个元素到栈顶
  2. pop()删除钱顶的元素,并返回移除的元素
  3. peek()返回栈顶的元素
  4. isEmpty()用于判断栈是否为空,空则为空
  5. clear()用于清空栈的元素
  6. size()用于返回栈中元素的个数
  7. toString()用于将栈以字符串的形式打印

那么在实现这个类,我们用对象来模拟栈


3.3源码及使用类

class Stack {
   constructor() {
      this.count=0
      this.items = {}
            }
   push(element) {
      this.items[this.count]=element
      this.count++
            }
    pop() {
       if(this.isEmpty()){
           return undefined
          }
       this.count--
       const result=this.items[this.count]
       delete this.items[this.count]
       return result
            }
    peek() {
          if(this.isEmpty()){
               return undefined
               }
         return this.items[this.count-1]
            }
    isEmpty() {
         return this.count===0
            }
    clear() {
        this.items={}
        this.count=0
          }
    size() {
       return this.count
           }
    toString(){
       if(this.isEmpty()){
        return undefined
               }
         let objectString=`${this.items[0]}`
          for(let i=1;i<this.count;i++){
               objectString=`${objectString},${this.items[i]}`
               }
         return objectString
            }
        }

  const stack = new Stack()
  stack.push(23)
  stack.push(34)
  stack.push(80)
  console.log( stack.pop())
  console.log(stack.peek())
  console.log(stack.isEmpty())
  console.log(stack.size())
  console.log(stack.toString())

在使用对象来模拟栈时,采用了键:值的方式 

来存储数据,比如this.items[this.count]=element

在这个结构中用this.count来记录栈的大小,

当我们向里面插入一个数字时,就分配count为键

插入的值为值。这个时候就需要将this.count++.

关于pop()与peek(),toString()方法都需要

先判断栈是否为空,如果为空则返回undefined。

【相关推荐:javascript视频教程web前端

以上是簡單了解JavaScript資料結構與演算法之棧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除