如何只用一个数组来实现三个栈
2016-11-11 16:29
316 查看
题目:描述如何只用一个数组来实现三个栈
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];
}
相关文章推荐
- 你如何只用一个数组实现三个栈?
- 程序员面试金典: 9.3栈与队列 3.1描述如何只用一个数组来实现三个栈
- 描述如何只用一个数组来实现三个栈
- 描述如何只用一个数组来实现三个栈
- 如何用一个数组实现三个栈
- Stack_Queue 一个数组实现三个栈 @CareerCup
- Objective-C如何自己实现一个基于数组下标的属性访问模式
- 只用赋值、加1、循环三个操作实现一个减1的运算
- 一个数组实现三个栈
- Objective-C如何自己实现一个基于数组下标的属性访问模式
- 面试金典--一个数组实现三个栈(固定大小)
- 面试例题:输入n,求一个n x n矩阵,规定矩阵沿45度递增,形成一个zigzag数组(JPEG编码里取像素数据的排列顺序),请问如何用C++实现? (中国台湾著名硬件公司2007年11月面试题)
- 一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。
- 程序员面试金典(8)一个数组实现三个栈
- Chapter 3 | Stacks and Queues--一个数组实现三个栈
- 一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。
- 用一个数组实现三个栈
- 用一个数组实现三个stack
- 如何只用一个加号计算三个数之和?
- 每日一练--一个数组实现三个栈