堆疊和佇列的運用

2021-10-08 09:45:56 字數 1926 閱讀 9844

棧是一種 lifo(last-in-first-out, 後進先出)的資料結構,也就是先進後出的理念,而棧中項插入(叫做堆入)和移除(叫做彈出),只發生在乙個位置 --棧的頂部,我們可以把棧想象為乙個開口向上的容器,如圖所示:

最開始的時候棧中不含有任何資料,叫做空棧,此時棧頂就是棧底,然後資料從棧頂進入,棧頂和棧底分離,整個棧的當前容量變大;資料出棧時,資料從棧頂彈出,棧頂下移,整個棧的容量變小

push操作實現了在棧頂的堆入,返回改變後陣列的長度;

pop的操作實現了在棧底的彈出,返回移除那項的內容。

佇列是一種fifo(first-in-first-out, 先進先出)。佇列在列表的末端新增項,從列表的前端移除項,如下圖所示:

unshift操作實現了在佇列的新增,返回改變後陣列的長度;

push()操作是在陣列的尾部新增的,不影響其他資料的位置變化,但是unshift是在資料的頭部新增的,每次的新增都會影響後面的資料忘後面移動一位,影響效能。

var arr =

;var starttime =

+new

date()

;//+new date()相當於new date().valueof(),返回當前時間的毫秒數

// push效能測試

for(

var i =

0; i <

100000

; i++

)var endtime =

+new

date()

;console.

log(

"呼叫push方法往陣列中新增100000個元素耗時"

+(endtime-starttime)

+"毫秒");

starttime =

+new

date()

; arr =

;// unshift效能測試

for(

var i =

0; i <

100000

; i++

)endtime =

+new

date()

;console.

log(

"呼叫unshift方法往陣列中新增100000個元素耗時"

+(endtime-starttime)

+"毫秒"

);

瀏覽器輸出結果:

var arr =

, s =

+new

date

;for

(var i =

0; i <

100000

; i++

)console.

log(

"呼叫reverse方法將陣列裡面的100000元素的順序反轉耗時:"+(

+new

date

- s)

+"毫秒"

);

瀏覽器輸出的結果:

總結:在大資料的陣列操作是,盡量在資料的尾部操作,如果需要運算元組頭部的內容,可以通過陣列的reverse()方法進行反轉操作。

堆疊和佇列

堆疊是限定插入和刪除操作都在表的同一端進行的線性表。允許插入和刪除元素的一端稱為棧頂,另一端稱為棧底。若棧中無元素,則稱為空棧。一定要記住的是 棧有後進先出的特點,lase in first out,lifo。棧的基本操作除了插入和刪除外,還有建立和撤銷棧等操作。creat 建立乙個空棧 destr...

堆疊和佇列

堆疊是一種後進先出 lifo 的資料結構,在下推堆疊中,只允許兩種操作 將物件推入堆疊,並將物件從堆疊中彈出。元素只能在堆疊頂部新增和刪除。push將物件新增到堆疊頂部,pop從頂部刪除物件。乙個很好理解的例子,有一沓書,你可以只拿走 刪除 頂部的書,也可以在頂部新增新書。判斷其中的 是否成對出現 ...

堆疊和佇列的應用

目的 1 計算數學表示式的值。輸入數學表示式,輸出表示式的計算結果。數學表示式由單個數字和運算子 構成,例如 2 3 4 5 6 4。假定 表示式輸入格式合法。2 以乙個 m n 的長方陣表示迷宮,0 和 1 分別表示迷宮中的通路和障礙。設計乙個程式,對任意設定的迷宮,求出一條從入口到出口的通路,或...