1. 程式人生 > >描述如何只用一個數組來實現三個棧

描述如何只用一個數組來實現三個棧

int stackSize=100;
int [] buffer=new int [stackSize*3];
int []stackPointer={-1,-1,-1};//用於追蹤棧頂元素的指標
void push(int stackNum,int value) throws Exception
{
/*檢查有無空閒空間*/
if(stackPointer[stackNum]+1>=stackSize)//最後一個元素
{
throw new Exception("out of space.");
}
//棧指標自增,然後更新棧頂元素的值
stackPointer[stackNum]++;
buffer[absTopOfStack(stackNum)]=value;
}
int pop(int stackNum) throws Exception
{
if(stackPointer[stackNum]==-1)
{
throw new Exception("Trying to pop an empty stack.");
}
int value=buffer[absTopOfStack(stackNum)];//獲取棧頂元素
buffer[absTopOfStack(stackNum)]=0;//清零指定索引元素的值
stackPointer[stackNum]--;//指標自減
return value;
}
int peek(int stackNum)
{
int index=absTopOfStack(stackNum);
return buffer[index];
}
boolean isEmpty(int stackNum)
{
return stackPointer[stackNum]==-1;
}
//返回棧“stackNum”棧頂元素的索引,絕對量
    int absTopOfStack(int stackNum)
    {
    return stackNum*stackSize+stackPointer[stackNum];
    }