JavaScript數據結構—棧 隊列 雙端隊列

棧(Stack)

棧:又稱為堆疊,是計算機科學中的一種抽象數據類型,只允許在有序的線性數據集合的一端(稱為堆棧頂端,英語:top)進行加入數據(英語:push)和移除數據(英語:pop)的運算。因而按照后進先出(LIFO, Last In First Out)的原理運作。(來自維基百科)

由于棧后進先出,有操作如下:入棧(push),出棧(pop),獲取棧頂元素(peek),JavaScript中Array自帶push(), pop()操作,用Array[Array.length-1]來實現peek操作,所以可以用Array實現Stack類型;


棧的實現,采用 ES6
方法說明:

push(element):添加新元素到棧頂
pop():移除棧頂元素,同時返回被移除的元素
peek():返回棧頂元素,不對棧做任何修改
isEmpty():判斷棧是否為空
size():返回棧里的元素個數
clear():清空棧

隊列(Queue)

隊列:又稱為佇列(queue),是先進先出(FIFO, First-In-First-Out)的線性表。在具體應用中通常用鏈表或者數組來實現。隊列只允許在后端(稱為rear)進行插入操作,在前端(稱為front)進行刪除操作。隊列的操作方式和堆棧類似,唯一的區別在于隊列只允許新數據在后端進行添加。(來自維基百科)

由于隊列后先進先出,有操作如下:入對(enqueue),出對(dequeue),JavaScript中Array自帶push(), shift()操作;


隊列的實現,采用ES6
方法說明:

enqueue(element):向隊列尾部添加新的項
dequeue():移除隊列第一項,同時返回被移除的元素
peek():返回隊列中第一個元素,不對棧做任何修改
isEmpty():判斷隊列是否為空
size():返回隊列的元素個數
clear():清空隊列

雙端隊列

雙端隊列(deque,全名double-ended queue)是一種具有隊列性質的抽象數據類型。雙端隊列中的元素可以從兩端彈出,插入和刪除操作限定在隊列的兩邊進行。(來自維基百科)
雙端隊列把棧和隊列相結合,同時遵守了先進先出和后進先出的原則。

雙端隊列的實現,采用ES6

方法說明:

addFront(element):向雙端隊列前端添加新的項
addBack(element):向雙端隊列后端添加新的項
removeFront():從雙端隊列前端移除第一個元素
removeBack():從雙端隊列后端移除第一個元素
peekFront():返回雙端隊列前端第一個元素
peekBack():返回雙端隊列后端第一個元素

雙端隊列的應用

下面采用雙端隊列實現一個回文檢查器,算法如下:


回文算法,雙端隊列實現
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容