栈(Stack)是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶(top),相应地,表头端称为栈底(bottom)。不含元素的空表称为空栈。 栈遵循后进先出(last in first out,LIFO)的原则。
1.函数调用管理:栈用于管理函数调用,包括存储局部变量和返回地址。当一个函数调用另一个函数时,当前函数的状态被推入栈中,待调用的函数完成后,从栈中弹出状态,恢复执行。
2.撤销操作:在文本编辑器或其他应用程序中,栈用于实现撤销操作。每次用户进行操作时,操作会被推入栈中,用户可以 通过弹出栈中的操作来撤销最近的操作。
3.浏览器历史管理:栈可以用于管理浏览器的历史记录。当用户访问新页面时,当前页面的地址被推入栈中,用户按“后退” 按钮时,最近访问的页面被弹出并加载。
4.字符串反转:使用栈可以轻松地实现字符串的反转,将字符串中的字符逐个推入栈中,然后再依次弹出。
顺序栈
链栈
队列(queue)是一种先进先出(first in first out,FIFO)的线性表,它只允许在表的一端进行插入,而在另一端删除元素。允许插入的一端叫做队尾(rear),允许删除的一端叫做队头(front)。