begin process at 2012 05 28 11:47:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Aide sur les liste chainées


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Aide sur les liste chainées

samedi 3 février 2007 à 19:44:38 | Aide sur les liste chainées

thespartan

Voilà j'ai un petit problème avec les listes chainées : j'ai ma liste ls que je rempli par des chiffres de 1 à 8 dans l'ordre croissant dans le champ x et un chiffre1 dans le champ y . Les affichages dans makelist me montrent que la liste est bien remplie. Seulement ça marche plus quand je veux afficher la liste à partir d'une fonction extérieure en l'occurence aff. Quelqu'un peut m'aider plz???

<quote>
#include <stdio.h>

struct liste_coord{
  int x;
  int y;
  struct liste_coord *suiv;
};
typedef struct liste_coord liste_coord;

liste_coord makelist (liste_coord *coups, int t[8]){
     int i;
      coups=NULL;
     for(i=0;i<8;i++){
     coups = malloc(sizeof(liste_coord));
     coups->x=i;
     coups->y=1;
      printf("- [%d %d]\n",coups->x,coups->y);
     coups=coups->suiv;
   }
     coups=NULL;
}

void aff(liste_coord *p)
{
  while(p)
    {
      printf("%d %d\n",p->x,p->y);
      p = p->suiv;
    }
}

main(){
  liste_coord *ls=NULL;
  int t[8],i;
  for(i=0;i<8;i++)
    t[i]=i;
  makelist(ls,t);
  aff(ls);
  getchar();
}
<\quote>

samedi 3 février 2007 à 20:38:49 | Re : Aide sur les liste chainées

SAKingdom

Membre Club
Réponse acceptée !
#include <stdio.h>

typedef struct liste_coord
{
    int x, y;
    struct liste_coord *suiv;
}liste_coord;

liste_coord *makelist (/*int *t,*/ int num)
{
    int i = 0;
    liste_coord *first = 0, *coups, *prev = 0;
    do
    {
        coups = malloc(sizeof(liste_coord));
        if(!first) first = coups;
        coups->x=i; coups->y=1;
        printf("- [%d %d]\n",coups->x,coups->y);
        if(prev) prev->suiv = coups;
        prev = coups;
    } while(++i<num);
    coups->suiv = 0;
   
    return first;
}

void aff(liste_coord *p)
{
    while(p)
    {
        printf("%d %d\n",p->x,p->y);
        p = p->suiv;
    }
}

main()
{
    liste_coord *ls;
/*    int t[8],i;
    for(i=0;i<8;i++) t[i]=i;*/
    ls = makelist(/*t,*/ 8);
    aff(ls);
    getchar();
}

C++ (@++)

lundi 5 février 2007 à 00:59:09 | Re : Aide sur les liste chainées

thespartan

Si je comprend mieux je réécrivais tout le temps dans le même noeud avant? Pour le seg fault je sais pas trop.

Encore une chose , j'appelle makelist avec ls sachant que dans makelist, cette liste sera first, pas besoin de retourner first à la fin de la fonction vu que ls et first pointent sur la même chose non? En fait je sais que c'est non vu que ça marche pas mais je ne comprends pas pourquoi.

typedef struct liste_coord liste_coord;

liste_coord *makelist (liste_coord *first){
     int i;
     liste_coord *prev=NULL,*coups;
     first=NULL;
     for(i=0;i<8;i++){
     coups = malloc(sizeof(liste_coord));
         if(!first) first = coups;
     coups->x=i;
     coups->y=1;
      printf("- [%d %d]\n",coups->x,coups->y);
      if(prev) prev->suiv = coups;
        prev = coups;
   }
     coups->suiv=NULL;
     return first;
}

void aff(liste_coord *p)
{
    while(p)
    {
        printf("%d %d\n",p->x,p->y);
        p = p->suiv;
    }
}

main()
{
    liste_coord *ls;
    makelist(ls);
    aff(ls);
    getchar();
}


Spartan
lundi 5 février 2007 à 03:03:07 | Re : Aide sur les liste chainées

SAKingdom

Membre Club
if(!first) first = coups;

On test pour savoir si first est nulle. Si non, on considère que first pointe déjà sur quelque chose de valide. Or, ton ls à sa déclaration n'est pas nulle donc la fonction considère que first pointe déjà sur la première liste.
Faudrait que ls soi nulle dès sa création:
liste_coord *ls = 0;

Mais je ne recommande pas ça. Il risque d'y avoir des oublies et ça fait un code pas très compréhensible. Le code que je t'est montré est parfaitement opérationnel. C'est lui que je te recommande. Optimise le à tes besoins (car y'a encore du travaille à faire dedans).


C++ (@++)

lundi 5 février 2007 à 15:03:19 | Re : Aide sur les liste chainées

SAKingdom

Membre Club
Ou encore, on peut garder ta méthode et initialiser first à 0 directement dans la fonction. Ce pourrais être une bonne alternative.
Cependant, si tu ne veut pas que ta fonction retourne quelque chose, il faudrait qu'elle soit de type void.

C++ (@++)

lundi 5 février 2007 à 20:54:52 | Re : Aide sur les liste chainées

SAKingdom

Membre Club
Réponse acceptée !
Décidément, je dis vraiment n'importequoi ces temps-ci. Non, on ne peut pas passer first en argument, du moin pas comme ça. Faudrait faire un pointeur de pointeurs mais ça complique les choses pour rien. Déclare first dans makelist, et retourne le à la fin comme dans mon exemple. Y'a pas plus simple.

En passent, il serait préférable que tu laisse num dans makelist pour pouvoir générer des chaines de taille variable (pas seulement de 8 listes).

C++ (@++)

mardi 6 février 2007 à 00:07:52 | Re : Aide sur les liste chainées

thespartan

d'accord je n'ai pas encore tout compris sur les listes chainées mais l'aide que tu m'as fournie me suffit pour l'instant. Quand j'aurais le temps j'essairai d'approfondir mes connaissances sur les listes chainées.

Spartan


Cette discussion est classée dans : int, liste, coord, ls, coups


Répondre à ce message

Sujets en rapport avec ce message

[C++]Problème de pointeur ou de liste chainee [ par Arkko ] Bonjour... J'essaye de convertir une liste chainée du site en une liste chainée demandant comme parametre un new par exemple ajouter(new Test);Cela f Passage par adresse d'un tableau de structures. [ par alekine ] Bonjour, j'ai un problème pour passer par adresse un tableau de structures. Voilà mon code:#include #define L_MAX 2struct point //la structure d'un p URGENT : transposer du C en Caml [ par torgal79 ] Salut Voila mon probleme. On m'a filé un prog en c et j'y connais rien a ce langage. Et mon boulot est de le transposer en caml et c'est super urgent. rand() ca marche pas!!! [ par Arnaud16022 ] hello je voudrais savoir pourquoi ce prog donne toujours la meme liste de resultats:#include #include int main(){ for (int a=0;a!=10;a++){ REcuperer des donnée d'un fichier binaire vers une tableau de hachage [ par whiteknight ] Slt j'ai des problemes avec ma fonction load qui me permet de recuperer les données d'un fichier binaire et de les transférer vers un tableau de hacha conversion int en char* [ par arwenita ] Encore un petit problème en C++...Dans mon programme, je voudrais afficher une liste de nombres (premiers), que je récupère de la fonction Crible(n).L constructeur de recopie et pointeur sur pointeur [ par popi0016 ] Bonjour je bloque sur la définition d'un constructeur de recopie d'une classe "liste" afin de sortir du programme principale sans provoque une exeptio aide sur les concensus [ par torgal79 ] salut voila je suis tres novice en langage c et je dois comprendre un code portant sur la methode des concensus.Mais le probleme c'est que mes bases Listes chainées [ par angelfire0808 ] Bonjour voila voici mon, code j'ai une ereeur de compilation mais je ne comprend pas ;-(l'erreur c'est ici :   " nouveau->suivant=(*tete); ".De plus j Est-ce que mes destructeurs sont corrects ? [ par nisaloncaje ] Bonjour, voila, j'ai les classes suivantes, et le programme suivant :class st2{public:int nb;            // Le nombre de briques de chacun des joueurs


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,404 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales