在js中,對陣列的操作是比較常見的,有時候,我們需要模擬棧和佇列的特性才能實現需求,今天來給大家用通俗易懂、簡潔明瞭的幾行文字,來告訴大家棧和佇列的幾個函式,如何快速記住。
首先,概念還是要知道的:
棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
佇列(queue)是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
js中沒有專門棧和佇列型別,其實都是用陣列模擬的
棧:一端封閉,只能從另一端進出的陣列
filo(first in last out) 先進的後出
棧進出分為兩種:
結尾出入棧:
入: arr.push(值) 將值壓入陣列末尾(push之前棧裡是沒有 元素的)
出: var last=arr.pop() 【彈出來的數有用,所以用last接住】
從陣列末尾彈出1個元素 (新值永遠在末尾)
好處:新出入棧元素,不影響其他元素的位置
開頭出入棧: 入: arr.unshift(值) 將值插入到開頭【api】
出: var first=arr.shift();
從陣列開頭彈出第1個元素(新值永遠在開頭)
缺點: 每出入棧一次元素,其餘所有元素的位置都要改變(效率低一些)
何時使用棧: 保證始終使用陣列中最新的元素時
eg:ecs 執行環境棧
瀏覽器永遠訪問最新的**,外面是歷史記錄棧
佇列: 只能從一端進入,從另一端出
fifo(first in first out) 先進先出
從結尾入佇列: arr.push(值)
從開頭出佇列: var first=arr.shift()
何時使用佇列: 希望按照先來後到的順序使用資料時
函式速記:
pop()與shift()都是刪除
pop()刪除陣列中的最後乙個元素,並返回該元素
shift()刪除陣列中的第乙個元素,並返回該元素
push()與unshift()都是插入
push()新增乙個或多個新元素到陣列的結尾,返回陣列長度
unshift()新增乙個或多個新元素到陣列的開頭,返回陣列長度
(即 :
單詞短的為刪除,
單詞長的為插入,
刪除返回該元素,
插入返回該長度)
shift與unshift都是開頭,pop和push都是結尾
(帶shift的為開頭,帶p的為結尾)
簡單方法快速記憶陣列棧和佇列函式
在js中,對陣列的操作是比較常見的,有時候,我們需要模擬棧和佇列的特性才能實現需求,今天來給大家用通俗易懂 簡潔明瞭的幾行文字,來告訴大家棧和佇列的幾個函式,如何快速記住。首先,概念還是要知道的 棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被...
關於linux的vi命令快速記憶方法
linux的vi命令是linux操作最基本的文字工具,主要採用快捷方式,本文說說如何快速記憶。一 三個工作狀態 1 命令狀態 任何時候esc鍵,都可以進入命令狀態。2 編輯狀態 在命令列顯示 insert模式 在命令狀態按 i 即進入編輯模式 當然,還有n多其他按鍵,也能進入編輯狀態 i,a,a,o...
vue生命週期的快速記憶方法
概念 從vue例項建立 執行 到銷毀期間,總是伴隨著各種各樣的事件,這些事件統稱為生命週期。而生命週期中的各種事件被稱為生命週期鉤子函式。建立期間的生命週期函式 beforecreate 在例項初始化時同步呼叫。此時資料觀測 事件等都尚未初始化。created 在例項建立之後呼叫。此時已完成資料繫結...