棧(Stack)
棧:又稱為棧或堆疊,是計算機科學中的一種抽象數據類型,只允許在有序的線性數據集合的一端(稱為堆棧頂端,英語:top)進行加入數據(英語:push)和移除數據(英語:pop)的運算。因而按照后進先出(LIFO, Last In First Out)的原理運作。(來自維基百科)
由于棧后進先出,有操作如下:入棧(push),出棧(pop),獲取棧頂元素(peek),JavaScript中Array自帶push(), pop()操作,用Array[Array.length-1]來實現peek操作,所以可以用Array實現Stack類型;
方法說明:
push(element):添加新元素到棧頂
pop():移除棧頂元素,同時返回被移除的元素
peek():返回棧頂元素,不對棧做任何修改
isEmpty():判斷棧是否為空
size():返回棧里的元素個數
clear():清空棧
隊列(Queue)
隊列:又稱為佇列(queue),是先進先出(FIFO, First-In-First-Out)的線性表。在具體應用中通常用鏈表或者數組來實現。隊列只允許在后端(稱為rear)進行插入操作,在前端(稱為front)進行刪除操作。隊列的操作方式和堆棧類似,唯一的區別在于隊列只允許新數據在后端進行添加。(來自維基百科)
由于隊列后先進先出,有操作如下:入對(enqueue),出對(dequeue),JavaScript中Array自帶push(), shift()操作;
方法說明:
enqueue(element):向隊列尾部添加新的項
dequeue():移除隊列第一項,同時返回被移除的元素
peek():返回隊列中第一個元素,不對棧做任何修改
isEmpty():判斷隊列是否為空
size():返回隊列的元素個數
clear():清空隊列
雙端隊列
雙端隊列(deque,全名double-ended queue)是一種具有隊列和棧性質的抽象數據類型。雙端隊列中的元素可以從兩端彈出,插入和刪除操作限定在隊列的兩邊進行。(來自維基百科)
雙端隊列把棧和隊列相結合,同時遵守了先進先出和后進先出的原則。
方法說明:
addFront(element):向雙端隊列前端添加新的項
addBack(element):向雙端隊列后端添加新的項
removeFront():從雙端隊列前端移除第一個元素
removeBack():從雙端隊列后端移除第一個元素
peekFront():返回雙端隊列前端第一個元素
peekBack():返回雙端隊列后端第一個元素
雙端隊列的應用
下面采用雙端隊列實現一個回文檢查器,算法如下: