题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和再队列头部删除节点功能。
class CQueue{
private stack stack1,stack2;
public CQueue(){}
public void appendTail(T node){}
public T deleteHead(){}
}
思路:使用stack1依次插入数据,实现appendTail操作;进行deleteHead的操作时,由于head元素在stack1的底部,故需要按照顺序先把stack1的数据插入stack2内,然后再删除head数据。
解决方案:
public class Question9 {
static class CQueue<T>{
private Stack stack1 = new Stack();
private Stack stack2 = new Stack();
public CQueue(){}
public void appendTail(T element){
stack1.push(element);
}
public T deleteHead(){
if (stack2.size() <= 0){
while (stack1.size() > 0){
T data = (T)stack1.pop();
stack2.push(data);
}
}
if (stack2.size() == 0){
try {
throw new Exception("queue is empty");
} catch (Exception e) {
e.printStackTrace();
}
}
T head = (T)stack2.pop();
return head;
}
}
public static void main(String[] args) {
int element1 = 1;
int element2 = 2;
int element3 = 3;
int element4 = 4;
int element5 = 5;
CQueue cQueue = new CQueue<Integer>();
cQueue.appendTail(element1);
cQueue.appendTail(element2);
cQueue.appendTail(element3);
cQueue.appendTail(element4);
cQueue.appendTail(element5);
System.out.println(cQueue.deleteHead());
}
}
网友评论