|
|
Java Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
public class Queue { Element TOS; int f; int[] b; public Queue() { TOS = new Element(); TOS = null; f = -1; b = new int[50000]; } public void enqueue(int x) // Element hinzufügen { Element h = new Element(); h.value = x; h.next = TOS; TOS = h; f++; b[f] = h.value; } public void dequeue() // unterstes Element entfernen { if (TOS == null) return; TOS = TOS.next; f--; } public boolean empty() // Überprüfung ob der Queue leer ist { return (TOS == null); } public int front() // Ausgabe des untersten Wertes { return b[0]; } public void show() //Queue in Konsole ausgeben { while (TOS != null) { TOS.show(); TOS = TOS.next; } } } |
This post has been edited 1 times, last edit by "Abi2010" (Jan 28th 2009, 2:36pm)
|
|
Java Quellcode |
1 2 3 4 5 6 7 8 |
public void show() { while (TOS != null) { TOS.show(); TOS = TOS.next; } } |

|
|
Java Quellcode |
1 |
int[] b; |
|
|
Java Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
public class Stack { Element TOS; int f; int[] b; public Stack() { TOS = new Element(); TOS = null; f = -1; b = new int[50000]; } public void push(int x) // Element hinzufügen { Element h = new Element(); h.value = x; h.next = TOS; TOS = h; f++; b[f] = h.value; } public void pop() // oberstes Element entfernen { if (TOS == null) return; TOS = TOS.next; f--; } public boolean empty() // Überprüfung ob der Stack leer ist { return (TOS == null); } public int top() // Anzeigen des obersten Elementes { return b[f]; } public void show() // Anzeigen { while (TOS != null) { TOS.show(); TOS = TOS.next; } } } |
|
|
Java Quellcode |
1 2 3 4 |
public int top() { return TOS.value; } |
|
|
Java Quellcode |
1 2 |
TOS = new Element(); TOS = null; |
Meinst du jetzt die show oder die dequeue Methode? Ich denke mal show...

show soll mir die Werte in einer Konsole ausgeben was beim Stack funktionierte. Einziges Manko war, dass nach dem Ausführen von show der Stack unbrauchbar wurde. Is aber nicht schlimm.

dequeue soll halt das unterste Element entfernen (also das welches als erstes hinzugefügt wurde).
also erstmal find ich das Array unnötig und Speicherintensiv. Dazu setzt es eine wiilkürliche Grenze wie groß ein Stack (oder Queue) werden kann.
Die top() Methode lässt sich doch auch ohne relativ einfach implementieren
![]()
Java Quellcode
1 2 3 4 public int top() { return TOS.value; }
|
|
Java Quellcode |
1 2 3 4 |
public Element top() { return TOS; } |
Allgemein sollte man aus objektorienterter sicht nicht direkt auf die Atribute eines Objektes zugreifen (können). Das sollte über get/set Methoden geschehen.
Sonst kann man das erste Element nicht entfernen, weil man nicht weiß was das 2. Element ist, auf den ja der Anfangs-Zeiger nach dem entfernen des 1. Elementes zeigen muss.
This post has been edited 1 times, last edit by "Marcus Gnaß" (Jan 29th 2009, 11:15am)
Kann man schon, aber eben nur mit Iterieren. Aus Performance-Gründen ist eine doppelt verkettete Liste absolut sinnvoll.
Wobei es bis auf ein wenig mehr Speicher natürlich nicht schadet.
So nicht ganz richtig. Es gibt Szenarien in denen Getter & Setter sinnvoll, sogar zwingend sind, so z.B. bei Beans. Diese Anforderung generell zu stellen ist aber nicht nötig. Die Java API ist voll von Klassen mit Attributen ohne Getter oder Setter.
|
|
Java Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
public class Stack { Element TOS; public Stack() { TOS = new Element(); } public void push(int x) { Element h = new Element(); h.value = x; h.next = TOS; TOS = h; } public void pop() { if (TOS == null) return; TOS = TOS.next; } public boolean empty() { return (TOS == null); } public Element top() { return TOS; } public void show() { while (TOS != null) { TOS.show(); TOS = TOS.next; } } } |
|
|
Java Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
public class Queue { private Element First; private Element Last; public Queue() { First = Last = new Element(); } public void enqueue(int x) { Element h = new Element(); h.value = x; Last.next = h; Last = h; } public void dequeue() { if(!empty()) { First = First.next; } } public boolean empty() { return Last == First; } public Object front() { if(!empty()) { return First.next.value; } return null; } } |
|
|
Java Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
/** Ein Element. */ public class Element { public int value; public Element next = null; /** Erzeugt ein Element. */ public Queue(int value) { this.value = value; } /** Gibt den Wert eines Elementes auf der Konsole aus. */ public void show() { System.out.println("value: " + value); } } /** Eine Queue. */ public class Queue { private Element firstElement; private Element lastElement; /** Erzeugt eine Queue. */ public Queue() { firstElement = lastElement = null; } /** Prüft ob die Queue Elemente enthält. */ public boolean empty() { return lastElement == null && firstElement == null; } /** Fügt ein Element der Queue hinzu. */ public void enqueue(Element element) { element.next = firstElement; firstElement = element; if (null==lastElement) lastElement = element; } /** Fügt einen Wert der Queue hinzu. */ public void enqueue(int x) { enqueue(new Element(x)); } /** Entfernt das älteste Element der Queue und gibt dieses zurück. */ public Object dequeue() { Element element = null; if (!empty()) { element = firstElement; firstElement = element.next; if (null==firstElement) lastElement = null; } return element; } /** Gibt das älteste Element der Queue zurück ohne dieses zu entfernen. */ public Object front() { Element element = null; if (!empty()) element = firstElement; return element; } } |