栈:后进先出 LIFO(last in first out)

它是受限制的线性表,只允许从表的一端操作,这端称为栈顶,另一端称为栈底。
压入元素(push):往栈顶新增一个元素,新元素成为新栈顶
弹出元素(pop):移除栈顶元素,原栈顶下的元素成为新栈顶 / 或栈变为空栈


队列:先进先出 FIFO(first in first out)

队列:受限制的线性表,只允许从表的两端操作,一端为队首,一端为队尾
入队(enqueue):往队尾新增一个元素,新元素成为新队尾
出队(dequeue):移出队首元素,下一个元素成为新队首 / 或队列变为空

栈和递归

函数的递归调用本质也是一个栈型调用,因此可以利用栈将一个递归函数改写为
完全等价的非递归函数,避免了操作系统层面的调用栈开销