Les langages de programmation
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Les langages de programmation

Venez apprendre les langages de programmation à votre rythme
 
AccueilGalerieRechercherDernières imagesS'enregistrerConnexion
Le deal à ne pas rater :
Coffret dresseur d’élite ETB Pokémon EV06 Mascarade Crépusculaire
56.90 €
Voir le deal

 

 Liste doublement chaînée

Aller en bas 
AuteurMessage
Invité
Invité




Liste doublement chaînée Empty
MessageSujet: Liste doublement chaînée   Liste doublement chaînée Icon_minitimeMar 24 Avr - 8:51

Hello Smile

Voilà j'ai un soucis sûrement tout bête mais pas moyen de trouver.

tab.c

Code:
#include <stdio.h>
#include <stdlib.h>
#include "tab.h"

liste *creer()
{
    liste *nouvelle = malloc(sizeof(liste));
    nouvelle->first = nouvelle->last = NULL;
    nouvelle->len = 0;
    return nouvelle;
}

void ajouter(liste *ma_liste, char *ch)
{
    elt *elem = malloc(sizeof(elt));
    elem->chaine = ch;

    if(ma_liste->len == 0)
    {
        elem->prec = elem->suiv = NULL;
        ma_liste->first = ma_liste->last = elem;
    }
    else
    {
        elem->prec = ma_liste->last;
        elem->suiv = NULL;
        ma_liste->last = elem;
    }
    ma_liste->len++;
}

int main(int argc, char **argv)
{
    liste *List = creer();
    int i;

    for(i=0; i<argc; i++)
    {
        ajouter(List, argv[i]);
        printf("%s\n", List->first->chaine);
        List->first = List->first->suiv;
    }
    free(List);
    return EXIT_SUCCESS;
}

tab.h

Code:
#ifndef TAB_H_INCLUDED
#define TAB_H_INCLUDED

typedef struct
{
    char *chaine;
    struct elt *suiv;
    struct elt *prec;
} elt;

typedef struct
{
    elt *first;
    elt *last;
    int len;
} liste;

liste *creer();
void ajouter(liste *ma_liste, char *ch);

#endif

Quand je compile j'ai cette erreur --> /home/fred1599/Desktop/tab.c|25|warning: assignment from incompatible pointer type [enabled by default]|

et --> /home/fred1599/Desktop/tab.c|41|warning: assignment from incompatible pointer type [enabled by default]|

Donc ligne 25 et 41 qui sont :

Code:
elem->prec = ma_liste->last;

Code:
List->first = List->first->suiv;

Pourtant dans mon .h il ne me semble pas m'être trompé, bref un peu d'aide me serait utile Wink
Revenir en haut Aller en bas
Invité
Invité




Liste doublement chaînée Empty
MessageSujet: Re: Liste doublement chaînée   Liste doublement chaînée Icon_minitimeMar 24 Avr - 13:01

Bon j'ai trouvé Razz

Il y a toujours des warnings, mais ça fait ce que je veux

Code:
#include <stdio.h>
#include <stdlib.h>
#include "tab.h"

liste *creer()
{
    liste *nouvelle = malloc(sizeof(liste));
    nouvelle->first = nouvelle->last = NULL;
    nouvelle->len = 0;
    return nouvelle;
}

void ajouter(liste *ma_liste, char *ch)
{
    elt *elem = malloc(sizeof(elt));
    elem->chaine = ch;

    if(ma_liste->len == 0)
    {
        elem->prec = elem->suiv = NULL;
        ma_liste->first = ma_liste->last = elem;
    }
    else
    {
        ma_liste->last->suiv = elem;
        elem->prec = ma_liste->last;
        elem->suiv = NULL;
        ma_liste->last = elem;
        ma_liste->last->prec = elem->prec;
    }
    ma_liste->len++;
}

void afficher(liste *ma_liste)
{
    elt *elem = ma_liste->first;

    while(elem != NULL)
    {
        printf("%s\n", elem->chaine);
        elem = elem->suiv;
    }
    free(elem);
}

int main(int argc, char **argv)
{
    liste *List = creer();
    int i;

    for(i=0; i<argc; i++)
    {
        ajouter(List, argv[i]);
    }
    afficher(List);
    free(List);
    return EXIT_SUCCESS;
}

J'avais oublié de pointer sur l'élément précédent de la liste ma_liste->last->prec = elem->prec

Edit : J'ai trouvé mon warning, c'était bien dans mon .h

Code:
typedef struct elt /* L'erreur de mettre une structure anonyme */
{
    char *chaine;
    struct elt *suiv;
    struct elt *prec;
} elt_t;

Revenir en haut Aller en bas
koija
Professeur
Professeur
koija


Nombre de messages : 81
Age : 28
Réputation : 11
Date d'inscription : 13/02/2011

Liste doublement chaînée Empty
MessageSujet: Re: Liste doublement chaînée   Liste doublement chaînée Icon_minitimeMer 25 Avr - 17:25

D'accord bien joué Smile ! Sinon, pour vrai concorder entre le nom de la structure elt_t et la déclaration de pointeurs sur lui même au milieu, tu peux aussi faire comme ceci:

Code:
typedef struct elt_t elt_t;
struct elt_t /* L'erreur de mettre une structure anonyme */
{
    char *chaine;

    elt_t *suiv;
    elt_t *prec;
};

Voilà ! Sinon, bien joué pour ton débugage Smile !
Revenir en haut Aller en bas
http://koija.no-ip.org
Invité
Invité




Liste doublement chaînée Empty
MessageSujet: Re: Liste doublement chaînée   Liste doublement chaînée Icon_minitimeMer 25 Avr - 17:45

Citation :
tu peux aussi faire comme ceci

Je connais cette notation, j'aime pas du tout, enfin c'est moins naturel on va dire comme ça.

Citation :
Voilà ! Sinon, bien joué pour ton débugage

Oui je m'entraine beaucoup, du coup le C++ je le met un peu comme toi de côté, mais faut dire que la syntaxe est plus simple, mais on gratte (code) plus. proordi
Revenir en haut Aller en bas
Contenu sponsorisé





Liste doublement chaînée Empty
MessageSujet: Re: Liste doublement chaînée   Liste doublement chaînée Icon_minitime

Revenir en haut Aller en bas
 
Liste doublement chaînée
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Les langages de programmation :: Staff :: Bureau de Koija-
Sauter vers: