Link
Home Nach oben

 

Home
Nach oben
Link
Job
Maschine
Maschine_seq
Maschinengroup
Process
Simulation
Statistic_List
Werkhalle
File Read
Report

/** Link.java, Timm Grams, Fulda, Februar 2000

Die Klasse "Link" ist Basisklasse fuer einfach verkettete Datenstrukturen
(lineare und zyklische Listen, Baeume in Parent-Darstellung).
Die Methode "less" definiert eine abstrakte partielle Ordnung.

Autor: Timm Grams, Fulda
Erstellung: Februar 2000
Letzte Aenderung: 16.03.00
geaendert: 15.12.2001- Dirk Schmitt. Erweiterung der Klasse Link zur NamedLink
so daß nun jedes Linkobjekt eine eindeutige id besitzt.
neue Methoden: get_id() und erweiterter Konstruktor
****************************************************************************/

package SingleLink;
public class NamedLink {
    int ref; //Anzahl der nx-Referenzen auf das Link-Objekt
    int id;
    NamedLink nx;
    
    public int get_id() {
        return this.id;
    }
    
    public NamedLink(){ref=0; nx=null;}
    public NamedLink(int id){ref=0; this.id=id; nx=null;}
    
    public void in(NamedLink p) {
        if(p.nx==null){p.nx=nx; nx=p; p.ref++;
        }else throw new Error("NamedLink: NamedLink.in(p) failed");
    }
    public void add(NamedLink p) {
        if (p==null); //geaendert: 16.03.00
        else if (nx!=null) nx.add(p); else {nx=p; p.ref++;}
    }
    public NamedLink out() { //geaendert: 16.03.00
        NamedLink p=nx;
        if (p!=null) {nx=p.nx; p.ref--; p.nx=null;}
        return p;
    }
    public NamedLink bisect(){
        NamedLink p=nx;
        if (p!=null){nx=null; p.ref--;}
        return p;
    }
    public NamedLink next() {return nx;}
    public int nref() {return ref;}
    
    //Partielle Ordnung
    public boolean less(NamedLink p){return false;};
    
    //p wird in die Liste mit dem Kopf this unter Erhaltung der partiellen Ordnung
    //eingefuegt. Das Element p wird - falls ein solches existiert - vor dem ersten
    //groesseren Element platziert, ansonsten am Ende der Liste.
    public void fitIn(NamedLink p){
        NamedLink cur=this;
        while (cur.nx!=null) {if (p.less(cur.nx)) break; cur=cur.nx;}
        cur.in(p);
    }
    
    public boolean contains(NamedLink p) {
        NamedLink cur=this; //Aenderung am 16.03.00
        while (cur!=null&&cur!=p) cur=cur.nx;
        return cur==p;
    }
    
    public boolean empty() {return nx==null;}
    
    public void clear() {bisect();}
    
    public int cardinal() {
        int i=0;
        NamedLink cur=nx;
        while (cur!=null) {cur=cur.nx; i++;}
        return i;
    }
}