日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构-js实现栈和队列

發布時間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-js实现栈和队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們都知道數據結構對我們非常重要,我在幾場筆試題中遇到了非常多的有關數據結構的問題。因為我學習數據結構在一年多以前了,有點忘了,所以今天想好好溫習一下數據結構的知識,先從簡單的數據結構說起吧。

  • 我們都知道棧是一個墳場重要的數據的一種結構,它在我們的計算機很多方面都用到了,也包括我們的調用棧之類的,都有有關棧的知識。我們先說一下棧。網上有好多有數組的方法實現的,那樣太簡單了,但是我不想那樣,因為我想自己實現一個,不想用數組的API。

    • 棧的特點
      • 后進先出(LIFO)(先進后出)
      • 只允許操作棧頂,不能操作棧底
    • 棧示例 偷偷地到了一張圖,如有侵權馬上撤回。 我就不多介紹棧了,相信大家都很清楚。 我們就來說一下棧的操作吧。
  • 初始化棧(init、構造函數)
  • 獲取棧頂元素(Top)
  • 出棧 (Pop)
  • 入棧 (Push)
  • 獲取棧的長度 (Length)
  • 判斷棧是否為空 (isEmpty)
  • 清空棧 (Clear)
  • 輸出棧內元素 (List)
  • 我羅列的可能不清楚或者是不專業,請大家多多指正。(這只是我個人理解的棧的實現)

    class Stack {constructor(){this.stacks = [];this.length = 0;}Top(){return this.stacks[this.length - 1];}Pop(){return this.stacks.splice(-- this.length, 1)[0];}Push(val){this.stacks[this.length ++] = val;}Length(){return this.length;}isEmpty(){return this.length === 0;}Clear(){this.stacks = [];this.length = 0;}List(){for (var i = this.length - 1; i >= 0; i --) {console.log(this.stacks[i]);}} } 復制代碼

    我們來驗證一下

    console.log('-------------棧-----------------'); let stack = new Stack(); console.log("為空" + stack.isEmpty()); console.log("長度" + stack.Length()); stack.Push(0); stack.Push(1); stack.Push(2); console.log("長度" + stack.Length()); stack.List(); console.log("棧頂元素" + stack.Top()); console.log("出棧" + stack.Pop()); console.log("出棧" + stack.Pop()); console.log("棧頂元素" + stack.Top()); stack.Clear(); console.log("清棧"); console.log("長度" + stack.Length()); stack.List(); 復制代碼

    我覺得棧是一種思想,對數據的管理或者是操作的方式,我覺得每一個人都有每一個人實現的方式和對棧的理解,所以我覺得不必非得按照什么樣的格式,只要實現了這樣一個操作就行。

    • 棧的應用
      • 進制轉換
      • 括號或者是成對的匹配問題
      • 等等

    前面聊完了棧,那么就一定有一個跟它思想類似的隊列要說一下。下面我們來聊一聊隊列。

  • 隊列
    • 隊列在我們的計算機中也是大量的應用,比如我們的消息隊列之類的。
    • 特點
      • 先進先出(FIFO)
      • 隊尾插入,隊頭刪除
    • 實例

    就像是我們平常的排隊一樣。

    • 基本操作
  • 初始化(構造函數、init)
  • 入隊(EnQueue)
  • 出隊(DeQueue)
  • 隊頭元素(Top)
  • 長度(Length)
  • 判斷隊是否為空(QueueEmpty)
  • 輸出隊內元素(List)
  • 清空隊列(ClearQueue)
    • 代碼
    class Queue{constructor(){this.queue = [];this.length = 0;}EnQueue(val){this.queue[this.length ++] = val;}DeQueue(){this.length --;return this.queue.splice(0, 1)[0];}List(){for (var i = 0; i < this.length; i++) {console.log( this.queue[i] );}}Top(){return this.queue[0];}Length(){return this.length;}QueueEmpty(){return this.length === 0;}ClearQueue(){this.queue = [];this.length = 0;} } 復制代碼
    • 操作示例
    let queue = new Queue(); console.log("長度" + queue.Length()); console.log("為空" + queue.QueueEmpty()); queue.EnQueue(0); queue.EnQueue(1); queue.EnQueue(2); console.log("長度" + queue.Length()); console.log("隊頭" + queue.Top()); console.log("出隊" + queue.DeQueue()); console.log("出隊" + queue.DeQueue()); console.log("隊頭" + queue.Top()); queue.List(); queue.ClearQueue(); console.log('清空隊列'); console.log("長度" + queue.Length()); console.log("為空" + queue.QueueEmpty()); 復制代碼
    • 輸出
    • 遺憾

    隊列還有好幾種,比如說循環隊列,就是隊頭、隊尾兩個指針,用能力的人可以實現以下。

    • 總結
  • 這次算是自己的溫習,也想讓大神們監督和指出錯誤。好久沒有寫過棧和隊列的實現了,記得一年以前在上大二的時候,我們用C語言實現棧和隊列,現在想起來還意猶未盡。記得那時候用隊列和棧實現一個停車場進出車的功能。
  • 寫這篇文章的時候心里很不踏實,總感覺哪里寫的不對,希望不要誤人子弟,也希望大神們能指出我的錯誤,能讓我更加的認識數據結構與棧和隊列。
  • 轉載于:https://juejin.im/post/5ce557f8e51d45777621badf

    總結

    以上是生活随笔為你收集整理的数据结构-js实现栈和队列的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。