共享栈
在一个程序中如果同时具有相同类型的两个顺序栈,最直接的方法是为每个栈开辟一个一个数组空间,这样做的结果可能出现一个栈的空间已经被占满而无法再进行操作而另一个栈的空间仍有大量剩余而没有得到利用的情况,从而造成储存空间的浪费。 我们可以利用顺序栈的单向延伸的特点,使用一个数组来存储两个栈,让一个栈底位于该数组的始端,另一个栈的栈底位于该数组的末端,每个栈从各自的端点开始向中间相向延伸。如图: (下面实现的时候,测试数据的描述) 两个栈的共享空间中,由于两个栈相向增长,浪费的数组空间就会减少,同时发生上溢出的概率也会减少。但是,一般只有两个栈的空间需求有相反的关系时,这种方法才会奏效。 也就是说,最好一个栈伸长一个栈缩短,有 “此消彼长” 的势头。 “敌进我退,敌退我追” 倒是可以描述这种结构。
编写这种数据结构只要有顺序栈的基本基础就OK,下面是我之前编写的