

class MyData {

    String     k;
    boolean b;
    float   f;

}

class Link {

    MyData data;
    Link   next;

}


public class MyHashS {


    static final int m = 5;
    static Link[] a = new Link[m];

    static int h(String key) {
 
        int aux = 0;


        // Beispiel : "ABCDEF"
        // 

        for ( int iCnt=0; iCnt< key.length(); iCnt++ )
	    aux = ((aux * 256 + (int)(key.charAt(iCnt))))%m;

	return aux;

    }

    static void insertIntoHashtable(String k, boolean b, float f) {

	Link x  = new Link();

        x.data = new MyData();
        x.data.k = k;
        x.data.b = b;
        x.data.f = f;
      
        x.next = a[h(k)];

        a[h(k)] = x;

        System.out.println("Insert key " + k +
                           " at index " + h(k));


    }

    static MyData findInList(String k, Link list) {

	if ( list == null ) {
	    return null;
	}
        else if ( list.data.k.equals(k) ) {
            return list.data;
	}
        else {
            return findInList(k,list.next);
	}

    }

    static MyData findInHashTable(String k) {

	return findInList(k,a[h(k)]);

    }

    static void printResult(String k,MyData d) {

        if ( d != null ) 
          System.out.println("Key "+k+"  returns (" + 
			     d.k + "," + d.b + "," + d.f + ")");
        else 
	  System.out.println("Key "+k+"  returns null");

    }



    public static void main(String[] args) { 

        MyData d;

	insertIntoHashtable("jan",true,3.45f);
	insertIntoHashtable("240",true,4.45f);
	insertIntoHashtable("Johannes",true,3.55f); 
	insertIntoHashtable("Cornelia",true,3.45f); 
	

        printResult("jan",findInHashTable("jan"));
        printResult("blurps",findInHashTable("blurps"));
        printResult("Johannes",findInHashTable("Johannes"));
        printResult("Cornelia",findInHashTable("Cornelia"));

       
  
    }

}
