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 :

Listes chainées multiples


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut Listes chainées multiples
    Bonsoir tout le monde,

    Je voudrais savoir s'il y a moyen de faire un nombre listes chainées defini par l'utilisateur?


  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Tu veux dire que le nombre de maillons max soit défini par l'utilisateur ?

  3. #3
    Membre confirmé
    Profil pro
    Responsable de projet
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut
    explique toi mieux j'ai pas tout compris.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut
    L'utilisateur donne un nombre (exemple : 5)

    Le programme crée 5 listes chainées pour y rentrer des données. Les données ne sont pas triés, et donc il faudrait un moyen pour acceder simplement a une liste, un peu comme un tableau à deux dimensions.

  5. #5
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par Mister Jingles Voir le message
    L'utilisateur donne un nombre (exemple : 5)

    Le programme crée 5 listes chainées pour y rentrer des données. Les données ne sont pas triés, et donc il faudrait un moyen pour acceder simplement a une liste, un peu comme un tableau à deux dimensions.
    Tu veux une liste de listes ?

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut
    Justement, je sais pas si c'est possible, mais c'est un peu ça. Le problème c'est qu'il faut parcourir la première liste pour trouver la deuxième. C'est pas un peu lourd a faire?

  7. #7
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par Mister Jingles Voir le message
    Justement, je sais pas si c'est possible, mais c'est un peu ça. Le problème c'est qu'il faut parcourir la première liste pour trouver la deuxième. C'est pas un peu lourd a faire?
    Bien sur, c'est possible. C'est pas très difficile à faire non plus.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut
    N'est t'il pas plus simple de faire un tableau de pointeur? Chaque case[i] du tableau pointe sur la ième liste?

    Je voudrais faire un algo rapide et avec un minimum de memoire.

  9. #9
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut
    J'ai dis une connerie?

    J'ai fais une base avec une liste chainée.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct article
    {
    	int date;
    	struct article* suivant;
    }article;
     
    typedef article* ll;
     
    ll addArticles_(ll distributeur, int dateArticles)
    {
    	ll newArticle=malloc(sizeof(article));
    	newArticle->date=dateArticles;
    	newArticle->suivant=NULL;
    	if(distributeur==NULL)
    		return newArticle;
    	else
    	{
    		ll tmp=distributeur;
    		while(tmp->suivant!=NULL)
    			tmp=tmp->suivant;
    		tmp->suivant=newArticle;
    		return distributeur;
    	}
    }
     
    ll delArticles_(ll distributeur)
    {
    	if(distributeur!=NULL)
    	{
    		ll retour=distributeur->suivant;
    		free(distributeur);
    		return retour;
    	}
    	else
    		return NULL;
    }
     
    int finDate_(ll distributeur)
    {
    	int date=distributeur->date;
    	ll tmp=distributeur;
    	while(tmp!=NULL)
    	{
    		if(tmp->date<date)
    			date=tmp->date;
    		tmp=tmp->suivant;
    	}
    	return date;
    }
     
    int main()
    {
    	int nbOperations=0, operation=0, i=0;
    	int nombreArticles=0, dateArticles=0, date=0;
    	ll distributeur=NULL;
    	scanf("%d", &nbOperations);
    	for(operation=0;operation<nbOperations;operation++)
    	{
    		scanf("%d%d", &nombreArticles, &dateArticles);
    		if(nombreArticles>0)
    		{
    			for(i=0;i<nombreArticles;i++)
    				distributeur=addArticles_(distributeur, dateArticles);
    		}
    		else
    		{
    			for(i=0;i>nombreArticles;i--)
    				distributeur=delArticles_(distributeur);
    		}
    	}
    	date=finDate_(distributeur);
    	printf("%d\n", date);
    	return 0;
    }
    Comment faire pour en avoir plusieurs??

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Très simple:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    /* Article */
    typedef struct article
    {
    	int date;
    } article;
     
    /* Liste d'articles */
    typedef struct chainon_article
    {
    	article a;
    	struct chainon_article *pSuiv;
    } chainon_article;
     
    typedef struct liste_articles
    {
    	chainon_article *pPremier;
    } liste_articles;
     
    /* Liste de listes d'articles */
    typedef struct chainon_liste_articles 
    {
    	liste_articles l;
    	struct chainon_liste_articles *pSuiv;
    } chainon_liste_articles;
     
    typedef struct liste_listes_articles 
    {
    	chainon_liste_articles *pPremiere;
    } liste_listes_articles;
    Et les fonctions qui vont avec.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut
    Merci.

    Et dernière question:

    J'ai fais un tableau dynamique de structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableaull=malloc(nbDistributeurs*sizeof(ll));
    Chaque case pointe vers le premier élément de la chaine.

    Lequels des deux algos est le plus rentable, niveau memoire et temps?

  12. #12
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par Mister Jingles Voir le message
    Merci.

    Et dernière question:

    J'ai fais un tableau dynamique de structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableaull=malloc(nbDistributeurs*sizeof(ll));
    Chaque case pointe vers le premier élément de la chaine.

    Lequels des deux algos est le plus rentable, niveau memoire et temps?
    Si le nombre de listes chaînées n'est plus susceptible de varier (ou pas souvent), c'est le plus économique en mémoire et en temps

    Remarque : ll est un pointeur. Il est peu astucieux de masquer cette propriété dans un typedef ou alors l'identificateur doit la suggérer . Je préfère pour mon goût article*

  13. #13
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 39
    Par défaut
    Ok merci

    Pour le coup du pointeur, j'ai pris l'habitude de faire comme ça. Et donc moi ça ne me choque pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bibliothèque de listes chainées
    Par gege2061 dans le forum C
    Réponses: 29
    Dernier message: 17/12/2004, 20h15
  2. copie de liste chainée
    Par tomsoyer dans le forum C++
    Réponses: 15
    Dernier message: 31/08/2004, 18h20
  3. [Débutant][JSP] récupération liste choix multiple
    Par Jovial dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/05/2004, 13h59
  4. Trie liste chaine
    Par Congru dans le forum C
    Réponses: 2
    Dernier message: 30/03/2004, 19h05
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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