用一个数组实现两个栈的大体思路:先定义一个数组,定义两个栈底指针base1,和base2初始值分别为0和size -1;再定义一个标志位flag用来指示是对哪个栈进行操作,在base2 - base1 == 1时,栈满了,在入栈时左边指针++,右边指针--,出战相反。一下为具体代码,由于比较简单,就没写注释。
public class Stack {
private int stackSize = 10;
private int base1;
private int base2;
private Object [] obj = null;
public Stack(){
obj = new Object[stackSize];
base1 = 0;
base2 = stackSize -1;
}
public Stack(int maxSize){
obj = new Object[maxSize];
base1 = 0;
base2 = maxSize - 1;
}
public boolean isEmpty(int flag){
if(flag == 0){
return base1 == 0;
}else{
return base2 == obj.length -1;
}
}
public boolean isFull(){
return (base2 - base1) == 1;
}
public void push(Object o,int flag){
if(isFull()){
try {
throw new Exception("栈已满");
} catch (Exception e) {
e.printStackTrace();
}
return;
}
if(flag == 0){
obj[base1 ++] = o;
}else if(flag == 1){
obj[base2 --] = o;
}
}
public Object pop(int flag){
if(isEmpty(flag)){
try {
throw new Exception("栈空了");
} catch (Exception e) {
e.printStackTrace();
}
}
if(flag == 0){
return obj[--base1];
}else{
return obj[++base2];
}
}
}
public class Stack {
private int stackSize = 10;
private int base1;
private int base2;
private Object [] obj = null;
public Stack(){
obj = new Object[stackSize];
base1 = 0;
base2 = stackSize -1;
}
public Stack(int maxSize){
obj = new Object[maxSize];
base1 = 0;
base2 = maxSize - 1;
}
public boolean isEmpty(int flag){
if(flag == 0){
return base1 == 0;
}else{
return base2 == obj.length -1;
}
}
public boolean isFull(){
return (base2 - base1) == 1;
}
public void push(Object o,int flag){
if(isFull()){
try {
throw new Exception("栈已满");
} catch (Exception e) {
e.printStackTrace();
}
return;
}
if(flag == 0){
obj[base1 ++] = o;
}else if(flag == 1){
obj[base2 --] = o;
}
}
public Object pop(int flag){
if(isEmpty(flag)){
try {
throw new Exception("栈空了");
} catch (Exception e) {
e.printStackTrace();
}
}
if(flag == 0){
return obj[--base1];
}else{
return obj[++base2];
}
}
}