Comment code un aperçu de la méthode pour la Liste chaînée
Je suis de la création d'une liste liée de mise en œuvre pour une pile. J'ai la pop et de la méthode push fait, mais je n'arrive pas à obtenir le coup d'oeil méthodes de droit. Le code que j'ai maintenant dans il y, retourne l'adresse de la mémoire je pense.
Voici mon code:
public class LinkedStack<T> implements StackADT<T> {
private int count;
private LinearNode<T> contents;
public LinkedStack() {
count = 0;
contents = null;
}
@Override
public void push(T element) {
LinearNode<T> top = new LinearNode<T>(element);
if (contents == null) {
contents = top;
} else {
LinearNode<T> current = contents;
while (current.getNext() != null) {
current = current.getNext();
}
current.setNext(top);
}
count++;
}
@SuppressWarnings("unchecked")
@Override
public T pop() {
T item = (T) contents;
contents = contents.getNext();
count--;
return item;
}
@SuppressWarnings("unchecked")
@Override
public T peek() throws NoSuchOperationException {
T top = (T) contents;
if(top == null){
throw new NoSuchOperationException();
}
return top;
}
@Override
public boolean isEmpty() {
//TODO Auto-generated method stub
return false;
}
@Override
public int size() {
return count;
}
}
C'est ce que les sorties lorsque j'appelle la méthode lire. J'ai utilisé ma méthode de commande pour ajouter un objet, et je l'ai testé avec la méthode de dimensionnement. Il a montré que j'ai ajouté un élément. Alors j'ai appelé ma méthode pop et affiche la taille de nouveau à assurez-vous que travaillé.
C'est ma sortie de la méthode lire:
LinearNode@33f42b49
Voici mon LinearNode classe:
public class LinearNode<T> {
private T element;
private LinearNode<T> next;
public LinearNode() {
this.element = null;
this.next = null;
}
public LinearNode(T element) {
this.element = element;
this.next = null;
}
public T getElement() {
return element;
}
public void setElement(T _element) {
this.element = _element;
}
public LinearNode<T> getNext() {
return next;
}
public void setNext(LinearNode<T> next) {
this.next = next;
}
}
Que voulez-vous dire par "je n'arrive pas à obtenir le coup d'oeil méthodes"? Ne vous obtenez une erreur de compilation? Une trace de la pile? Sortie incorrecte? Veuillez lire ce lien: stackoverflow.com/questions/how-to-ask
Je pense que votre code est correct. Faites-vous un sysout sur les résultats de l'œil? Si oui, vous verrez probablement une adresse de mémoire puisque c'est un objet de type T.
C'est ma sortie lorsque j'appelle ma méthode lire: LinearNode@33f42b49
Ce n'est pas une adresse de mémoire, de son Objet.toString() (qui est l' .hashcode() en hexadécimal...)
OriginalL'auteur Brock | 2011-10-06
Vous devez vous connecter pour publier un commentaire.
Sonne comme le LinearNode les besoins de la classe une méthode toString ().
Le LinearNode devraient jamais être retourné à partir de la peek() et pop() méthodes (comme ils le devraient retourner tout le LinearNode est de garder une référence à un "T") - une méthode toString() n'est pas très utile, et ne fera que masquer les erreurs de type présent dans Brock code.
OriginalL'auteur Jim Kiley
pop() et peek() doit retourner ce que le LinearNode références, pas le LinkedNode.
L' @SupressWarnings indiquer que vous ne faites pas les génériques droit. Les retirer, et regardez ce que vous êtes de retour - il n'a pas l'air comme vous êtes de retour d'un " T " mais le LinkedNode directement. Vous ne devriez pas avoir besoin de tout SupressWarnings dans le présent code.
Si vous souhaitez stocker des Chaînes ensuite, vous devez définir la pile comme ceci:
Vous pouvez penser que le type générique
T
sera alors représenter une Chaîne de caractères à l'intérieur de votre classe de pile.Dans ce cas, le
peek()
méthodes de signature sera ensuite de retour à une Chaîne.Aussi: Vérifiez votre pop et push méthodes, les deux devraient être en mesure de le faire en O(1), cependant, vous êtes en parcourant la liste. Vous avez qu'à reculons.
OriginalL'auteur KarlP
Vous pouvez simple coup d'œil à l'aide du Système..println("L'élément de tête est:" + haut.getElement);
et retour haut de page.getElement. Rappelez-vous en haut vous sont effectivement la suppression d'un Nœud à partir du haut de la pile et de son élément. Depuis le coup d'oeil ne voit que le haut de l'élément de la pile, vous n'avez pas besoin d'utiliser top = haut.getNext ou count--;. Espérons que cela aide!
OriginalL'auteur Jorge A Vega Vigo