# Stack Implementierung als verkettete Liste



## OiM86 (13. Nov 2009)

Hallo erstmal !


Habe das Forum beim googlen nach einer Lösung für mein Problem gefunden und hoffe das mir hier geholfen werden kann.

Ich soll eine Klasse Stack so vervollständigen, dass sie anstatt eines Arrays (das war eine Teilaufgabe die ich gelöst habe) eine verkettete Liste zu DAtenspeicherung nutzt. 

Ich habe eine Klasse Link gegeben : 

```
package stack;

public class Link {
	
	protected Object data;
	protected Link next;
	
	public Link(){				// Erzeugt ein neues, leeres Link-Objekt
		this.data = null;
		this.next = null;
	}
	
	public Link(Object data){	// Erzeugt ein neues, gefülltes Link-Objekt
		this.data = data;
		this.next = null;
	}
}
```

und eine Klasse Stack 


```
package stack;

public class Stack {
	
	public void empty(){
}

public void push(Object element){
}
// usw
	}
```

Meine Frage ist : Was macht die Klasse Link genau ? Und wie soll ich sie nutzen ? Ich steh grad auf dem Schlauch.

Vielen Dank im voraus!


----------



## OiM86 (13. Nov 2009)

Hmm vll hab ich meine Problemstellung nicht genau genug erläutert ! 
Ich weiß grad nicht wie ich in der Klasse Stack anfangen soll. 

Also ob ich sowas wie 

```
Link a = new Link();
```
brauche. Und wenn ja, dann wie weiter. Mir würde z.B der Quellcode der in der Methode push() (Diese soll ein Element auf den Stack legen) stehen soll sehr viel weiter helfen. Mir fehlt einfach der Ansatz.


----------



## Final_Striker (13. Nov 2009)

Die Klasse Link ist eine einfach verkettete Liste. Jedes Element hat ein Objekt und einen Zeiger auf des nächste Element der List.

In der Methode pop könntest du einfach das übergebene Objekt entweder am Anfang oder am Ende der List anhängen.


----------



## eRaaaa (13. Nov 2009)

Final_Striker hat gesagt.:


> In der Methode pop könntest du einfach das übergebene Objekt entweder am Anfang oder am Ende der List anhängen.



wah? meinst du nicht eher push? ???:L


----------



## OiM86 (13. Nov 2009)

Final_Striker hat gesagt.:


> In der Methode pop könntest du einfach das übergebene Objekt entweder am Anfang oder am Ende der List anhängen.



Ich geh mal davon aus, dass du push meintest. Ja, dass ist eben das Problem wie mach ich das  ? Muss ich dafür einen Array oder Vektor machen und da die Objekte reinschreiben ?


----------



## vitruvor (13. Nov 2009)

ist das hier ungefähr was du dir vorgestellt hast? ist zwar ein "FIFO-Stack" aber nur zum herzeigen erstmal.

Main.java

```
package stack;

public class Main {

    static Auto myAuto;

    public static void main(String[] args) {
        Stack myStack = new Stack();

        myStack.push(myAuto = new Auto("rot", 2011));
        myStack.push(new Auto("schwarz", 1998));

        while(myAuto != null){
            System.out.println("farbe: "+myAuto.farbe + " | erstzulassung: "+myAuto.erstzulassung);
            myAuto = myAuto.next;
        }
    }

}
```

Link.java

```
package stack;

public final class Link {

    private static Link instance;

    Auto myAuto;

    private Link() {
    }

    public static Link getInstance(){
        if(instance == null){
            instance = new Link();
        }
        return instance;
    }
    
    public void add(Auto myAuto){
        if(this.myAuto == null){
            this.myAuto = new Auto();
            this.myAuto = myAuto;
        } else {
            this.myAuto.next = new Auto();
            this.myAuto.next = myAuto;
            this.myAuto = myAuto;
        }
    }
}
```

Stack.java

```
package stack;

public class Stack {

    Link linkInstance;

    public Stack() {
        linkInstance = Link.getInstance();
    }

    public void empty() {
    }

    public void push(Auto element) {
        linkInstance.add(element);
    }    
}
```

Auto.java

```
package stack;

public class Auto {
    String farbe;
    int erstzulassung;
    Auto next;

    public Auto() {
    }

    public Auto(String farbe, int erstzulassung) {
        this.farbe = farbe;
        this.erstzulassung = erstzulassung;
    }
    
}
```


----------



## OiM86 (13. Nov 2009)

Ok langsam komm ich dahinter 

```
public void push(Object element){
Link a = new Link(element);
}
```
Oder bin ich da auf dem Holzweg ?


----------



## OiM86 (14. Nov 2009)

Vielen Dank nochmal an alle!
@vitruvor deine Klassen haben mir sehr weiter geholfen ! Thx


----------



## eRaaaa (14. Nov 2009)

vitruvor hat gesagt.:


> ist zwar ein "FIFO-Stack" aber nur zum herzeigen erstmal.



mhm 
sieht imo eher nach: FIKI  (first in, keep in oder so ähnlich) aus :lol:
*das pop() such*


----------

