Describe how you could use a single array to implement three stacks.
Divide the array into three fixed parts, each stands for a stack.
/*Fixed Size Stacks*/ import java.util.*; public class ThreeStacks { int stackSize = 100; int[] buffer = new int[stackSize * 3]; int[] stackPointer = {-1, -1, -1}; public void push(int stackNum, int key) throws Exception { if(stackPointer[stackNum] + 1 >= stackSize) { throw new Exception("Out of Memory"); } stackPointer[stackNum]++; buffer[stackNum * stackSize + stackPointer[stackNum]] = key; } public int pop(int stackNum) throws Exception { if(stackPointer[stackNum] == -1) { throw new Exception("No Elements"); } int key = buffer[stackNum * stackSize + stackPointer[stackNum]]; stackPointer[stackNum]--; return key; } public int peek(int stackNum) throws Exception { if(stackPointer[stackNum] == -1) { throw new Exception("No Elements"); } return buffer[stackNum * stackSize + stackPointer[stackNum]]; } public boolean isEmpty(int stackNum) { return stackPointer[stackNum] == -1; } public static void main(String[] args) { ThreeStacks ts = new ThreeStacks(); try { ts.push(0, 10); ts.push(1, 20); ts.push(2, 30); ts.push(0, 90); System.out.print(ts.pop(0) + " " + ts.pop(1) + " " + ts.pop(0) + " " + ts.pop(2)); } catch(Exception e) { System.out.println(e.toString()); } } }
原文:http://www.cnblogs.com/pyemma/p/3834157.html