15 . 用两个栈实现一个队列

用两个栈实现一个队列

1 . 一个栈用来做存储空间,一个用来做缓冲空间。

    Stack s1 = new Stack();//作为存储空间
    Stack s2 = new Stack();//作为缓冲空间

2.队列的基本操作。

a .判断队列是否为满:也就是判断栈 s1 是否为满。

    public boolean isFull(){
	return s1.isFull();
    }


 b . 入队:将队列元素插入到 s1 的栈顶。

public void push(int val){
    if(s1.isFull()){
       return;
    }
    s1.push(val);
}

c . 判断队列是否为空:也就是判断栈 s1 是否为空。

    public boolean isEmpty(){
	return s1.isEmpty();
    }

d . 出队:根据队列先进先出的特点,出队的元素即为栈 s1 的栈底元素。

如图:先将 s1 的元素全部出栈,放入 s2 中,只留下栈底元素,然后将 s2 的元素有依次放回 s1 ,覆盖点原来的栈底元素。


public void pop(){
	int tmp;
	if(s1.isEmpty()){
		return;
	}
	while(s1.top > 1){
		tmp = s1.getTop();
		s2.push(tmp);
		s1.top--;
	}
	s1.top = 0;
	while(!s2.isEmpty()){
		tmp = s2.getTop();
		s1.push(tmp);	
		s2.top--;
	}
}

e . 得到队顶元素:队顶元素即为 s1 的栈底元素。

public int getTop(){
		if(s1.isEmpty()){
			return -1;
		}
		return s1.elem[0];
	}

f . 输出队列元素:依次输出栈 s1 的元素。

public void show(){
	s1.show();
}


猜你喜欢

转载自blog.csdn.net/Alyson_jm/article/details/80241750