使用两个栈模拟队列
实现代码
public class Test {
public static void main(String[] args) {
MyStackQueue sq = new MyStackQueue(3);
try {
sq.add(1);
sq.add(2);
sq.add(3);
// sq.add(4); 会抛出异常
System.out.println(sq.remove());// 1
System.out.println(sq.remove());// 2
System.out.println(sq.remove());// 3
// System.out.println(sq.remove()); 会抛出异常
} catch (Exception e) {
e.printStackTrace();
}
}
}
//-------------------------使用两个栈模拟队列------------------------
class MyStackQueue{
private MyStack stack1;
private MyStack stack2;
public MyStackQueue(int size){
stack1 = new MyStack(size);
stack2 = new MyStack(size);
}
public MyStackQueue(){}
/**
* 本方法用于将value排入队列中
* @param val 需要进入队列的value
* @throws Exception 队列满了抛出异常
*/
public void add(int val) throws Exception {
stack1.push(val);
}
/**
* 本方法 是删除队列第一个value
* @return 被删除的value
* @throws Exception 队列为空抛出异常
*/
public int remove() throws Exception {
while (stack1.getSize() != 0){
stack2.push(stack1.pop());
}
int val = stack2.pop();
while (stack2.getSize() != 0){
stack1.push(stack2.pop());
}
return val;
}
/**
* 在队列中value的个数
*/
public int getSize(){
return stack1.getSize();
}
//---------------------模拟栈------------------------
}
class MyStack{
private int size;
private int[] data;
public MyStack(int size){
data = new int[size];
}
public MyStack(){}
/**
* 本方法用于向栈中添加 value
* @param val 需要存储的 value
* @throws Exception 栈满了抛出异常
*/
public void push(int val) throws Exception {
if (size >= data.length) throw new Exception("满了");
data[size++] = val;
}
/**
* 本方法用于删除栈顶的第一个 value
* @return 返回被删除的 value
* @throws Exception 栈为空抛出异常
*/
public int pop() throws Exception {
if (size == 0) throw new Exception("空了");
int val = data[--size];
data[size] = 0;
return val;
}
/**
* 栈中value的个数
* @return
*/
public int getSize(){
return size;
}
}