一道面试题:一个数组实现两个栈
通常我们实现栈有 数组 和 链式 两种结构。 但数组形式一般用来实现一个栈, 现在我们如何用一个数组 来实现 两个栈保存数据呢。
一般来说,有三种思路:
1. 将数组的下标为0的位置当做第一个栈的栈底,下标为1的位置当做第二个栈的栈底,将数组的偶数位置看做第一个栈的存储空间,奇数位置看做第二个栈的存储空间。 如图:
2.从数组中间分别向两边压栈将数组的中间位置看做两个栈的栈底,压栈时栈顶指针分别向两边移动,当任何一边到达数组的起始位置或是数组尾部,则开始扩容。 如图
3. 从两边向中间压栈将数组的起始位置看作是第一个栈的栈底,将数组的尾部看作第二个栈的栈底,压栈时,栈顶指针分别向中间移动,直到两栈顶指针相遇,则扩容。
方案一二都会存在空间浪费的问题,分析如下图:
我们给出第三个方案的实现代码:

面试中遇到一个问题,要求用一个数组实现两个独立的栈。文章探讨了三种不同的实现方式,包括将数组的偶数位置分配给一个栈,奇数位置给另一个栈,从数组中间向两边扩展,以及从两边向中间移动的策略。前两种方法存在空间浪费,而第三种方法在栈顶指针相遇时进行扩容,提供了更优的解决方案。
最低0.47元/天 解锁文章
1709





