class Stack {
       private int[] array;
       private int   contents; // stack pointer
       private int   capacity; // array.length;
       public Stack () { this (10); }  // default size
       public Stack (int size) {
          array = new int[size];
          contents = 0;
          capacity = size;
       }
       public void push (int new_value) {
          if (capacity==contents) resize ();
          array[contents] = new_value;
          contents++;
       }
       public int pop () {
          if (contents==0) throw IllegalArgumentException ("Stack Underflow");
          contents--;
          return array[contents];
       }
       private int resize () {
          // you can do this one!
       }
For a Queue you need two pointers: one to write and one to read.
The array is used in a "circular" fashion, which means some if
statements.
This is a good programming exercise.  I recommend that you do it.
 for node #i, children[i] is an array, which lists (as its values) the numbers of the nodes that are the children of node #i.Using this, here is a depth-first search that says whether there is a path from source to dest.
    boolean exists_path (int source, int dest) {
       if (source==dest) return true;
       int[] list = children [source];
       for (int i=0; i<list.length; i++) {
          int child = list[i];
          if (exists_path (child, dest)) return true;
       }
       return false;
    }
Modify this so that it returns a Vector containing the numbers
of the successive nodes in the path.
Better: make this an array,
if you can think of a way of finding out the length of the path before
you need to allocate it.
 This is www.PaulTaylor.EU/algorithms/graph.html and it was derived from algorithms/graph.tex which was last modified on 21 July 2007.