棧:是一種遵循后進(jìn)先出(Last In First Out / LIFO) 原則的一種有序集合。
新添加或者要?jiǎng)h除的元素都會(huì)保存在棧的同一端,我們把它叫做棧頂,另外一端叫做棧底。
在棧中所有的新元素都接近棧頂,而所有的舊元素都接近棧底。
在我們的生活中也有很多類似于棧這種結(jié)構(gòu)的例子:
我們將棧視作是一個(gè)容器,比如水杯。它只有一個(gè)入口和出口就是杯子的頂部(和我們的棧非常相似)。我們向杯子中放入5塊同杯子直徑大小的餅干,全部放入后我們開始取出餅干。大家會(huì)發(fā)現(xiàn) 你最先取出的餅干是最后放入的那塊,正好也就符合了我們棧的特點(diǎn)(LIFO)
在編程世界中棧也被用來保存變量、方法調(diào)用等功能,也被用于瀏覽器的歷史記錄(比如瀏覽器的返回按鈕)。
那么下面我們就使用JavaScript的類來創(chuàng)建一個(gè)我們的棧。
我們需要一種方式來保存我們棧中的數(shù)據(jù),從上面的代碼可以看到,我這邊選擇的是數(shù)組。但是數(shù)組允許我們在任何位置添加或者刪除元素,我們需要給元素添加和刪除的位置有一個(gè)約束,讓我們的數(shù)組能夠遵循 后進(jìn)先出(LIFO) 的原則。所以接下來需要給我們的棧再添加一些方法。
以上代碼就已經(jīng)實(shí)現(xiàn)了我們棧的功能。 接下來我們把它整理到一起來看一下。
接下來就可以使用我們的 Stack 了
最后,還有一些專業(yè)詞匯希望大家能夠掌握
向棧中添加元素: 我們可以稱其為 入棧、壓棧、壓入
從棧中移除元素: 我們可以稱其為 出棧、彈出