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 :

inversion [Sources]


Sujet :

C

  1. #21
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Par défaut
    En fait ça donnerait ça

    void reverseString( struct elem* parFirst);
    {
    elem *tmp1,*tmp2;
    char c;

    tmp1 = reverString( parFirst->suivant); // même fonction ms avec retour
    tmp2 = tmp1->suivant;
    tmp1->suivant = NULL;
    parFirst->suivant -> suivant = tmp1;
    parFirst->suivant = tmp2;
    c = parFirst->caractere;
    parFirst->caractere = tmp1->caractere;
    tmp1->caractere = c;
    }
    on part de parFirst->s->a->l->u->t->NULL
    et on obtient

    result->t->u->l->a->NULL

    et tjs parFirst->s


    on dit que la première cellule devient la dernière de facon à avoir

    u->l->a->t->NULL

    ensuite on dit que parFirst->suivant->suivant (s pointe tjs sur a) est égale à u et on se retrouve avec

    parFirst->s->u->l->a->t->NULL

    et il suffit d'inverser les valeurs des deux cellules aux extremités.

    et en fin parFirst->t->u->l->a->s->NULL


    Et la chaine est inversée

  2. #22
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    J'ai pas lu toute la réponse mais je cite ta question:
    la même chose mais sans retour de pointeur
    Et après ta solution appelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmp1 = reverString( parFirst->suivant); // même fonction ms avec retour
    Je trouve qu'utiliser une fonction qui retourne quelque chose est une façon de tricher. Masi bon, il y aurait à ce moment là plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void inverse(SListe *liste)
    {
      SListe *inv;
      if(liste!=NULL)
        {
        inv = superinversequifaittoutleboulot(liste);
        liste->val = inv->val;
        liste->next = inv->next;
        }
    }
    Mais je suppose généralement lorsqu'on applique des modification de la liste chaînée que ce qui nous intéresse est modifié l'ordre du chaînage et non pas la valeur dans les éléments. Une solution comme tu (ou ma version) fonctionne bien sûr mais cela ne sert pas à grand chose lorsqu'on a une liste chaînée où chaque élément contient un millers d'éléments...

    C'est pour cela que je dis que ce n'est pas possible. Echanger le contenu des éléments d'une liste chaînée ne me vient pas à l'esprit...

    Jc

  3. #23
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Par défaut
    Nan mais je suis d'accord avec toi que c'est la question con, juste pr l'exo. Après ds la pratique, c'est clair que tu fais pas ce genre de chose...;-)

    @+

    Je repars sur Paris pour d'autres entretiens....

  4. #24
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par fearyourself
    Citation Envoyé par DreadNum
    Le truc c'est justement de le faire sans double pointeur....
    Sans double pointeur, sans retour et sans le premier élément qui est là comme sentinelle, il est impossible (à mon avis) en C d'inverser une liste. Je parle bien sûr de liste simplement chaînée...

    Cela devait être une question piège...
    Pas forcément.

    On peut aussi passer l'adresse d'une structure contenant le pointeur. C'est certes une une façon déquisée (mais élégante) de passer un 'double pointeur', tout en conservant une syntaxe claire (p->x) et une approche 'objet'.

    Il n'est pas rare de faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    struct node
    {
       struct node *p_next;
       struct node *p_prev;
       long id; /* identificateur de donnees generiques */
       void *p_data; /* adresse des donnees generiques */
    };
     
    struct dlist
    {
       struct node * p_head;
       struct node * p_tail;
       struct node * p_curr;
    };
    etc.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. inverser l'écran
    Par relax_06 dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/03/2004, 12h20
  2. inverser la lecture d'une requète
    Par nilaco dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/08/2003, 12h16
  3. [VB6] [Graphisme] Inversion dans picturebox
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 23
    Dernier message: 16/04/2003, 15h05
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. [VB6]fonction inverse de Hex (nombres hexadécimaux)
    Par Guigui_ dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/10/2002, 19h31

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