最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript數據結構與算法之棧詳解

 更新時間:2022年06月29日 11:14:34   作者:言不及行yyds  
棧作為一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表,也成稱為先進后出表,下面這篇文章主要給大家介紹了關于JavaScript數據結構與算法之棧的相關資料,需要的朋友可以參考下

1.認識棧

:(stack)又名堆棧,它是一種運算受限的線性表。遵循后進先出(LIFO)

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

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

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

出棧:從一個棧刪除元素又稱作出?;蛲藯#前褩m斣貏h除掉,使其相鄰的元素成為新的棧頂元素

2.面向過程方法源碼編寫棧

2.1思考

面向過程是什么:

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

然后用函數實現,

只要一步一步的執(zhí)行調用他就可以了。

2.2需要實現的方法

  • push(element)添加一個或多個元素到棧頂
  • pop()刪除錢頂的元素,并返回移除的元素
  • peek()返回棧頂的元素
  • isEmpty()用于判斷棧是否為空,空則為空
  • clear()用于清空棧的元素
  • size()用于返回棧中元素的個數

在實現之前我們思考一下我們怎么實現

首先我們借用數組的方法來實現,所以我們需要創(chuàng)建

一個空數組來模擬棧

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需要實現的方法

  • push(element)添加一個或多個元素到棧頂
  • pop()刪除錢頂的元素,并返回移除的元素
  • peek()返回棧頂的元素
  • isEmpty()用于判斷棧是否為空,空則為空
  • clear()用于清空棧的元素
  • size()用于返回棧中元素的個數
  • 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。

4.總結

  • 了解了面向對象與面向過程
  • 掌握了兩種方式用什么來模擬棧
  • 對棧模擬進行源碼設計

到此這篇關于JavaScript數據結構與算法之棧詳解的文章就介紹到這了,更多相關JS棧詳解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • js實現跨域的方法實例詳解

    js實現跨域的方法實例詳解

    這篇文章主要介紹了js實現跨域的方法,實例分析了幾種常用的javascript實現跨域的技巧,需要的朋友可以參考下
    2015-06-06
  • 微信小程序實現二維碼簽到考勤系統(tǒng)

    微信小程序實現二維碼簽到考勤系統(tǒng)

    這篇文章主要介紹了微信小程序實現二維碼簽到考勤系統(tǒng),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • 根據一段代碼淺談Javascript閉包

    根據一段代碼淺談Javascript閉包

    水平不高,不能也不想從太深的層次去講解這個東西,只是根據一段比較有代表性的代碼,結合執(zhí)行結果,從表象上粗淺地談談。
    2010-12-12
  • JS 9個Promise面試題

    JS 9個Promise面試題

    這篇文章主要介紹了JS 9個Promise面試題,對異步Promise感興趣的同學,可以參考下
    2021-05-05
  • Jquery顏色選擇器ColorPicker實現代碼

    Jquery顏色選擇器ColorPicker實現代碼

    這里我要分享一個自己修改的顏色選擇器,有需要的朋友參考下
    2012-11-11
  • JavaScript詳細分析數據類型和運算符

    JavaScript詳細分析數據類型和運算符

    這篇文章主要介紹了JavaScript數據類型和運算符案例,結合實例形式分析了JavaScript數據類型和運算符特性與相關操作技巧,需要的朋友可以參考下
    2022-07-07
  • tkinter使用js的canvas實現漸變色

    tkinter使用js的canvas實現漸變色

    這篇文章主要為大家介紹了tkinter使用canvas實現漸變色,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • js實現使用鼠標拖拽切換圖片的方法

    js實現使用鼠標拖拽切換圖片的方法

    這篇文章主要介紹了js實現使用鼠標拖拽切換圖片的方法,涉及javascript操作圖片實現輪播效果的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • 在組件外(.js文件)中使用pinia的解決方法

    在組件外(.js文件)中使用pinia的解決方法

    這篇文章主要給大家介紹了關于在組件外(.js文件)中使用pinia的解決方法, pinia是Vue的最新一代的輕量級狀態(tài)管理插件,它允許跨組件/頁面共享狀態(tài),需要的朋友可以參考下
    2024-06-06
  • JS+HTML實現的圓形可點擊區(qū)域示例【3種方法】

    JS+HTML實現的圓形可點擊區(qū)域示例【3種方法】

    這篇文章主要介紹了JS+HTML實現的圓形可點擊區(qū)域,結合實例形式分析了javascript結合HTML元素屬性實現一個圓形的可點擊區(qū)域相關操作技巧,需要的朋友可以參考下
    2018-08-08

最新評論

承德县| 井冈山市| 石棉县| 平乡县| 巴马| 连江县| 武陟县| 原平市| 察隅县| 平乐县| 来宾市| 昌宁县| 同仁县| 措勤县| 巨鹿县| 陆川县| 金山区| 湟中县| 卓尼县| 闽侯县| 湖南省| 乌兰察布市| 松滋市| 辽源市| 防城港市| 莱州市| 儋州市| 慈利县| 洛南县| 嘉兴市| 旬阳县| 平利县| 贡嘎县| 泽州县| 扬州市| 监利县| 宁阳县| 贡觉县| 吐鲁番市| 定安县| 卓资县|