//ts.java   自己做 Stack --- by tsaiwn@csie.nctu.edu.tw 
import java.util.*;
class MyStack {
  private  Object x[ ];
  private int sp;
  private final int sz = 99;  // 不夠就改大一點
 /////////////////// 原則:  Data 藏起來, functions 公開
  public MyStack( ) { sp = -1;  x = new Object[sz]; }  // 
  public void push(Object o) {
     x[++sp] = o;
  }
  public Object peek( ) { return x[sp]; }  // C++ 叫做 top( )
  public Object pop( ) { return x[sp--]; }
  public boolean empty( ) { return sp < 0; }
  public boolean full( ) { return sp >= sz-1; }
} // MyStack
// Note that the Stack in Library is made of Vector
class ts {
   static double x[ ] = {1,2,3,4,5,8};
   public static void testaa( ) {
      MyStack ss = new MyStack( );
      for(double y:x) {
         System.out.println(y);
         ss.push(y);     // JDK 1.5 後會 autoBoxing
      } // for
      System.out.println("=== now check stack ...");
      while( !ss.empty( ) ) {
         System.out.print(""+ ss.pop( ) + " ");
      }
      System.out.println();
   } 
////// use Library Stack  // 注意 testaa( ) 與 testbb( ) 完全相同!
   public static void testbb( ) {
      Stack ss = new Stack( );    // 除了這裡用程式庫的 Stack
      for(double y:x) {
         System.out.println(y);
         ss.push(y);     // JDK1.4.x 以前不可以!
      } // for
      System.out.println("=== now check stack ...");
      while( !ss.empty( ) ) {
         System.out.print(""+ ss.pop( ) + " ");
      }
      System.out.println();
   } 
   public static void main( String xx[]) {
      testaa( );
      System.out.println("===Now using Library Stack...");
      testbb( );
   } // main
} // class yy
/********************
C:\Jtest>javap java.util.Stack
Compiled from "Stack.java"
public class java.util.Stack extends java.util.Vector{
    public java.util.Stack();
    public java.lang.Object push(java.lang.Object);
    public synchronized java.lang.Object pop();
    public synchronized java.lang.Object peek();
    public boolean empty();
    public synchronized int search(java.lang.Object);
}
***************************************///////////////
/***
C:\Jtest>javac ss.java
Note: ss.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

C:\Jtest>java ss
1.0
2.0
3.0
4.0
5.0
8.0
=== now check stack ...
8.0 5.0 4.0 3.0 2.0 1.0
===Now using Library Stack...
1.0
2.0
3.0
4.0
5.0
8.0
=== now check stack ...
8.0 5.0 4.0 3.0 2.0 1.0

C:\Jtest>
***======================================***/

