栈和队列
1.用链表实现栈
class Node<E>{
Node<E>next=null;
E data;
public Node(E data){
this.data = data;
}
}
public class MystackList<E>{
Node<E>top=null;
public boolean Empty(){
return top==null;
}
public void push(E data){
Node<E>newNode=new Node<E>(data);
newNode.next = top;
top = newNode;
}
public E pop(){
if(this.Empty()){
return null;
}
E data = top.data;
top = top.next;
return data;
}
public E peek(){
if(this.Empty()){
return null;
}
return top.data;
}
public static void main(String[] args){
MystackList<Integer>s=new MystackList<Integer>();
s.push(1);
s.push(2);
System.out.println("栈顶元素为:"+s.pop());
System.out.println("栈顶元素为:"+s.pop());
}
}
2.用栈实现队列
public class stacktoqueue<E> {
private Stack<E>s1=new Stack<E>();
private Stack<E>s2=new Stack<E>();
public synchronized void put(E e){
s1.push(e);
}
public synchronized E pop(){
if(s2.isEmpty()){
while(!s1.isEmpty()){
s2.push(s1.pop());
}
}
return s2.pop();
}
public synchronized Boolean empty(){
return s1.isEmpty()&&s2.isEmpty();
}
public static void main(String[] args){
stacktoqueue<Integer>s=new stacktoqueue<Integer>();
s.put(1);
s.put(2);
s.put(3);
System.out.println("队列首元素为:"+s.pop());
System.out.println("队列首元素为:"+s.pop());
}
}