package algs;
import java.util.Iterator;
/*
* LIFO
* Last In First Out
*/publicclass Stack<Item> implements Iterable<Item>{
privateclass Node{
Item item;
Node next;
}
private Node first;
privateint N;//元素数量public boolean isEmpty(){return first==null;}
publicintsize(){return N;}
//publicvoidpush(Item item){
Node oldFirst=first;
first=new Node();//need create a Node object assign to first.
first.item=item;
first.next=oldFirst;
N++;
}
public Item pop(){
Item item=first.item;
first=first.next;
N--;
return item;
}
public Iterator<Item> iterator(){
returnnew ListIterator();
}
privateclass ListIterator implements Iterator<Item>{
private Node current=first;
public boolean hasNext(){
return current!=null;
}
publicvoidremove(){
}
public Item next(){
Item item=current.item;
current=current.next;
return item;
}
}
publicstaticvoidmain(String[] args){
Stack<String> stack=new Stack<String>();
String[] s="to be or not to - be - - that - - - is".split(" ");
for(String m:s) System.out.print(m);
System.out.println();
for(String x:s){
if(!x.equals("-"))
stack.push(x);
elseif(!stack.isEmpty()) System.out.print(stack.pop()+" ");
}
System.out.println("("+stack.size()+" left on stack)");
}
}
Queue
FIFO first In first out
package algs;
import java.util.Iterator;
/*
* FIFO
* First In First Out
*/publicclass Queue<T> implements Iterable<T> {
private Node first;// point to the front of the queueprivate Node last;//point to the end of the queueprivateint N;//the length of the queue;privateclass Node{
T item;
Node next;
}
public boolean isEmpty(){return N==0;}
publicintsize(){return N;}
//publicvoidenqueue(T item){
Node oldLast=last;
last=new Node();
last.item=item;
last.next=null;
if(isEmpty()) first=last;
else oldLast.next=last;
N++;
}
public T dequeue(){
T item=first.item;
first=first.next;
if(isEmpty()) last=null;
N--;
return item;
}
publicstaticvoidmain(String[] args) {
// TODO Auto-generated method stub
Queue<String> q=new Queue<String>();
String[] s="to be or not to - be - - that - - - is".split(" ");
for(String x:s){
if(!x.equals("-"))
q.enqueue(x);
elseif(!q.isEmpty()) System.out.print(q.dequeue()+" ");
}
System.out.println("("+q.size()+" left on queue)");
}
@Override
public Iterator<T> iterator() {
// TODO Auto-generated method stubreturnnull;
}
}