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