堆棧(Stack)是一種常見的數(shù)據(jù)結(jié)構(gòu),它的特點是后進先出(Last In First Out,LIFO)。堆棧類似于一個垂直的堆,數(shù)據(jù)元素只能從堆棧的頂部插入(稱為“入棧”),也只能從堆棧的頂部刪除(稱為“出棧”)。
堆棧中的插入和刪除操作只能在棧頂進行,所以堆棧的插入和刪除操作都是O(1)的時間復(fù)雜度。堆棧的主要應(yīng)用包括:程序中的函數(shù)調(diào)用棧、表達式求值、內(nèi)存管理、回溯算法等等。
舉個例子,假設(shè)有一堆書需要從地上放到書架上,為了避免亂放,可以使用一個箱子作為堆棧,每次只能從箱子的頂部放入一本書,取書時也只能從箱子的頂部取書。這樣,放入的最后一本書會被放在箱子的頂部,取書時也會先取出最后放入的書。這就是堆棧的基本原理。