IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Un petit problème avec pop


Sujet :

C++

  1. #1
    Paulinho
    Invité(e)
    Par défaut Un petit problème avec pop
    J'ai un petit problème dans mon code.
    Example: Après insérer 3 éléments(soient-ils: (1,1), (2,2) et (3,3)), le programme, quand on veut insérer un élément, doit sortir une exception (pille complète) mais doit rétirer l'élément dans bas(1,1) et insérer l'élément désiré(soit-il (4,4)).

    Comme ça, avant:
    (3,3)
    (2,2)
    (1,1)

    Aprés:
    (4,4)
    (3,3)
    (2,2).

    Comment doit-je faire pour qu'il fasse ça? Je n'arrive pas a solutionner le problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    virtual C pop_down() { if (count == 0) throw Pilha_vazia();
         else {
         Pilha_node_ptr aux = pilha;
         pilha = pilha -> next;
         delete aux; 
         count--;
     
         }
        };
    merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Lorsque la pile est pleine, tu dois repérer le dernier élément (son champ next est à NULL) et l'avant dernier élément de la pile. Par exemple, tu peux la parcourir à partir de la tête jusqu'à ce que x->next->next == NULL. x est alors l'avant dernier. détruire l'élément pointé par x->next ( le dernier) Placer x->next à NULL (c'est le nouveau dernier), décrémenter count puis insérer normalement le nouvel élément.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Paulinho
    Invité(e)
    Par défaut
    Merci diogene.

    Mais juste une precision: comment on fait pour parcourir la pille?

    J'ai fait comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    virtual C pop_down() { // Método que devolve o objecto no fundo e remove-o da lista
         if (count == 0) throw Pilha_vazia();
         else {
         Pilha_node_ptr aux = pilha;
         aux -> next -> next = NULL;
         delete(aux -> next);
         aux -> next = NULL;
         count--;
         }
        };
    Mais lors de l'éxécution il me rétire le deux premiers ((1,1) et (2,2)).

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il faut modifier push. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        void push(C &i){ // Método que insere um objecto da classe C na pilha
          if (count == I)
          {
           Pilha_node_ptr x = pilha;
           while (x->next->next != NULL) x = x->next; // recherche l'avant dernier
           delete x->next;   //  détruit le dernier
           x->next = NULL;  // nouveau dernier
           count--;              // mis à jour de count 
           insert(i);            // insère le nouveau
           throw Pilha_cheia();  // envoie l'exception
          }
          else insert(i);
        };
    avec pour insert , nouvelle méthode privée de la classe, le code précédemment dans push mis sous la forme d'une fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      void insert(C &i)
       {
          Pilha_node_ptr aux = new Pilha_node;
          aux -> elem = i;
          aux -> next = pilha;
          pilha = aux;
          count++;
          }
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Paulinho
    Invité(e)
    Par défaut
    Merci encore diogene.

    Bonsoir!

Discussions similaires

  1. Petit problème avec les accents circonflexes...
    Par Harvester dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 29/11/2005, 19h44
  2. Petits problèmes avec une CListCtrl
    Par vanitom dans le forum MFC
    Réponses: 2
    Dernier message: 17/11/2005, 12h45
  3. Petit problème avec Line Input
    Par GrosQuicK dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/09/2005, 13h47
  4. (Petit ?) problème avec une page contenant du Flash
    Par ologram dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/09/2005, 19h45
  5. Petit problème avec SDL
    Par Nyarlathotep dans le forum C
    Réponses: 10
    Dernier message: 01/07/2005, 10h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo