首页 > 代码库 > CTCI 3.1

CTCI 3.1

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());        }    }}