queue&stack
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
import edu.princeton.cs.introcs.StdOut;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
public class Queue<Item> implements Iterable<Item>
|
||||
{
|
||||
private Node first;
|
||||
private Node last;
|
||||
private int N;
|
||||
private class Node
|
||||
{
|
||||
Item item;
|
||||
Node next;
|
||||
}
|
||||
public boolean isEmpty() {return first==null;}
|
||||
public int size() {return N;}
|
||||
public void enqueue(Item item)
|
||||
{
|
||||
// last.next = new Node();
|
||||
// last = last.next;
|
||||
// last.item = item;
|
||||
// N++;
|
||||
Node oldlast = last;
|
||||
last = new Node();
|
||||
last.item = item;
|
||||
last.next = null;
|
||||
if(isEmpty()) first = last;
|
||||
else oldlast.next = last;
|
||||
N++;
|
||||
}
|
||||
public Item dequeue()
|
||||
{
|
||||
Item item = first.item;
|
||||
first = first.next;
|
||||
if(isEmpty()) last = null;
|
||||
N--;
|
||||
return item;
|
||||
}
|
||||
public Iterator<Item> iterator()
|
||||
{
|
||||
return new ReverseArrayIterator();
|
||||
}
|
||||
private class ReverseArrayIterator implements Iterator<Item>
|
||||
{
|
||||
int i = 0;
|
||||
Node nextnode = first;
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return i<N;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item next() {
|
||||
|
||||
if(i!=0)
|
||||
nextnode = nextnode.next;
|
||||
i++;
|
||||
return nextnode.item;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
Queue<Integer> q = new Queue<Integer>();
|
||||
q.enqueue(1);
|
||||
q.enqueue(2);
|
||||
q.enqueue(5);
|
||||
for(int i:q)
|
||||
StdOut.println(i);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
import java.util.Iterator;
|
||||
|
||||
public class Stack<Item> implements Iterable<Item> {
|
||||
private Node first;
|
||||
private int N;
|
||||
|
||||
private class Node {
|
||||
Item item;
|
||||
Node next;
|
||||
}
|
||||
|
||||
public void push(Item item) {
|
||||
Node oldfirst = first;
|
||||
first = new Node();
|
||||
first.item = item;
|
||||
first.next = oldfirst;
|
||||
N++;
|
||||
}
|
||||
|
||||
public Item pop() {
|
||||
Item item = first.item;
|
||||
first = first.next;
|
||||
N--;
|
||||
return item;
|
||||
}
|
||||
|
||||
public Iterator<Item> iterator() {
|
||||
return new ReverseArrayIterator();
|
||||
}
|
||||
|
||||
private class ReverseArrayIterator implements Iterator<Item> {
|
||||
private int i = N;
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return i > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item next() {
|
||||
Node nextnode = first;
|
||||
for (int j = 0; j < N - i; j++)
|
||||
nextnode = nextnode.next;
|
||||
i--;
|
||||
return nextnode.item;
|
||||
}
|
||||
|
||||
public void remove() {
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
Stack<Integer> s = new Stack<Integer>();
|
||||
s.push(1);
|
||||
s.push(2);
|
||||
s.push(3);
|
||||
for (int i : s)
|
||||
System.out.println(i);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user