堆实现栈:堆是一种先进先出的结构而栈是一种后进先出的结构,在构造的过程中使用两个堆。一个堆用来存放数据,另外一个堆在取出数据的时候用来存放数据。
package lianxi03;
import java.util.LinkedList;
import java.util.Queue;
public class Code04_QueueToStack {
public static void main(String[] args){
QueueToStack s=new QueueToStack();
s.add(1);
s.add(2);
System.out.println(s.peek());
System.out.println(s.pop());
System.out.println(s.pop());
}
public static class QueueToStack{
private Queue<Integer> queue1;
private Queue<Integer> queue2;
public QueueToStack(){
queue1=new LinkedList<>();
queue2=new LinkedList<>();
}
public void add(int num){
queue1.add(num);
}
public int pop(){
if(queue1.isEmpty())
throw new RuntimeException("The stack is empty");
while(queue1.size()!=1)
queue2.add(queue1.remove());
int res=queue1.remove();
swap();
return res;
}
public int peek(){
if(queue1.isEmpty())
throw new RuntimeException("The stack is empty");
while(queue1.size()!=1)
queue2.add(queue1.remove());
int res=queue1.remove();
queue2.add(res);
swap();
return res;
}
public void swap(){
Queue<Integer> tmp=queue1;
queue1=queue2;
queue2=tmp;
}
}
}
用两个栈来实现堆
package lianxi03;
import java.util.Stack;
public class Code05_StackToQueue {
public static void main(String[] args) {
StackToQueue s=new StackToQueue();
s.add(1);
s.add(2);
s.add(3);
System.out.println(s.peek());
System.out.println(s.pop());
}
public static class StackToQueue{
private Stack<Integer> stack;
private Stack<Integer> help;
public StackToQueue(){
stack=new Stack<>();
help=new Stack<>();
}
public void add(int num){
stack.add(num);
}
public int pop(){
if(help.isEmpty()&&stack.isEmpty())
throw new RuntimeException("The queue is empty");
if(help.isEmpty()){
while (!stack.isEmpty()){
help.add(stack.pop());
}
}
return help.pop();
}
public int peek(){
if(help.isEmpty()&&stack.isEmpty())
throw new RuntimeException("The queue is empty");
if(help.isEmpty()){
while (!stack.isEmpty()){
help.add(stack.pop());
}
}
return help.peek();
}
}
}