• STATISTIQUES
  • Il y a eu un total de 2 membres et 11664 visiteurs sur le site dans les dernières 24h pour un total de 11 666 personnes!


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 832
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] xda-developers
    Très bon site pour les gros bidouilleurs de smartphone de windows à androïd et de Apple jusqu'...
    Phreaking
    [FR] Infomirmo
    Challenge présenté sous la forme de 6 niveaux de difficultés diverses et variées avec chacun plusieurs chall...
    Challenges
    [EN] w3challs
    Ce site propose différents types de défis informatiques: piratage, craquage, cryptographie, stég...
    Hacking
    [FR] Kalkulators
    Ce projet a plusieurs buts, le premier étant l’étude de toutes formes cryptographiques, le cot&ea...
    Cryptographie
    [EN] Framework Metasploit
    Le Framework Metasploit est un logiciel gratuit, open source de tests de pénétration développ&ea...
    Vulnérabilités
    [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [EN] Sabre Films
    Site de challenge présenté sous la forme d'une quête. Vous êtes un détective et devrez résoudre d...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C] Bibliothèque de gestion des listes doublement chainées
23-09-2012, 12h09 (Modification du message : 19-11-2012, 19h29 par InstinctHack.)
Message : #1
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
[C] Bibliothèque de gestion des listes doublement chainées
Premier code en C :
Elle seras complété par la suite et suivie d'autres Smile
(je pense améliorer ce code pour gerer une arborescence de fichier, donc des structures de arborescence, de répertoire et de fichier...)
Vive le partage

Code :
#include "../h/listes_chaine_simple.h"

typedef struct Node Node;
struct Node
{
    int nombre;
    Node *p_node_suivant;
    Node *p_node_precedant;
};

typedef struct Liste Liste;
struct Liste
{
    Node *p_node_premier;
    Node *p_node_dernier;
    int longueur;
    char name[100];
};

Liste *listes_chaine_simple_initialisation()
{
    Liste *p_liste = malloc(sizeof(*p_liste));

    if (p_liste == NULL)
    {
        printf("Memoire insuffisante! Fin du programme!");
        exit(EXIT_FAILURE);
    }
    else
    {
        p_liste->longueur=0;
        p_liste->p_node_premier=NULL;
        p_liste->p_node_dernier=NULL;
    }
    return p_liste;
}

void listes_chaine_simple_afficher(Liste *p_liste)
{
    if (p_liste == NULL)
    {
        exit(EXIT_FAILURE);
    }
    else
    {
        Node *p_node_actuel = p_liste->p_node_premier;
        printf("Parcours de la liste de longueur : %d\n",p_liste->longueur);
        while (p_node_actuel != NULL)
        {
                printf("\tA l'adresse %p contient :\n\t\t%p node precedant\n\t\t%p node suivant\n\t\t%d data\n",p_node_actuel,p_node_actuel->p_node_precedant,p_node_actuel->p_node_suivant,p_node_actuel->nombre);
                p_node_actuel = p_node_actuel->p_node_suivant;
        }
        printf("\nFin du parcours\n");
    }
}

void listes_chaine_simple_append(Liste *p_liste,char * position, int nombre)
{
    if (p_liste != NULL) /* On vérifie si notre liste a été allouée */
    {
        Node *p_node_new = malloc(sizeof(*p_node_new));/* Création d'un nouveau node */
        if (p_node_new == NULL) /* On vérifie si le malloc n'a pas échoué */
        {
            exit(EXIT_FAILURE);
        }
        else
        {
            p_node_new->nombre = nombre; /* On 'enregistre' notre donnée */

            if(position=="append"){
                p_node_new->p_node_suivant = NULL; /* On fait pointer p_next vers NULL */
            } else if(position=="prepend"){
                p_node_new->p_node_precedant = NULL; /* On fait pointer p_precedant vers NULL */
            }else    {exit(EXIT_FAILURE);}


            if (p_liste->longueur == 0) /* Cas où notre liste est vide (pointeur vers fin de liste à  NULL) */
            {
                if(position=="append"){
                    p_node_new->p_node_precedant = NULL; /* On fait pointer p_prev vers NULL */
                } else if(position=="prepend"){
                    p_node_new->p_node_suivant = NULL;
                }else    {exit(EXIT_FAILURE);}
                p_liste->p_node_premier = p_node_new; /* On fait pointer la tête de liste vers le nouvel élément */
                p_liste->p_node_dernier = p_node_new; /* On fait pointer la fin de liste vers le nouvel élément */
            }
            else /* Cas où des éléments sont déjà présents dans notre liste */
            {
                if(position=="append"){
                    p_liste->p_node_dernier->p_node_suivant = p_node_new; /* On relie le dernier élément de la liste vers notre nouvel élément (début du chaînage) */
                    p_node_new->p_node_precedant = p_liste->p_node_dernier; /* On fait pointer p_prev vers le dernier élément de la liste */
                    p_liste->p_node_dernier = p_node_new; /* On fait pointer la fin de liste vers notre nouvel élément (fin du chaînage: 3 étapes) */

                } else if(position=="prepend"){
                    p_liste->p_node_premier->p_node_precedant = p_node_new;
                    p_node_new->p_node_suivant = p_liste->p_node_premier;
                    p_liste->p_node_premier = p_node_new;
                }else    {exit(EXIT_FAILURE);}


            }
            p_liste->longueur++; /* Incrémentation de la taille de la liste */
        }
    }
}

void liste_chaine_simple_insert(Liste *p_liste, int position, int nombre)
{
    if (p_liste == NULL)
    {
        exit(EXIT_FAILURE);
    }
    else
    {
        if(position==0)
        {
//            printf("\nfacile prepend!\n");
            listes_chaine_simple_append(p_liste,"prepend",nombre);
        }
        else if(position==((p_liste->longueur)-1))
        {
//            printf("\nfacile append!\n");
            listes_chaine_simple_append(p_liste,"append",nombre);
        }
        else
        {
//            printf("\ndur search :'( \n");
            Node *p_node_temp = p_liste->p_node_premier;/* Création d'un nouveau node */
            int i = 0;
            while (p_node_temp != NULL && i <= position)
            {
                if (position == i)
                {
/*
                    if (p_node_temp->p_node_suivant == NULL)
                    {
                        listes_chaine_simple_append(p_liste,"append",nombre);
                    }
                    else if (p_node_temp->p_node_precedant == NULL)
                    {
                        listes_chaine_simple_append(p_liste,"prepend",nombre);
                    }

                    else
                    {
*/
                        Node *p_node_new = malloc(sizeof(*p_node_new));/* Création d'un nouveau node */
                        if (p_node_new == NULL)
                        {
                            exit(EXIT_FAILURE);
                        }
                        else
                        {
                            p_node_new->nombre = nombre;
                            p_node_temp->p_node_suivant->p_node_precedant = p_node_new;
                            p_node_temp->p_node_precedant->p_node_suivant = p_node_new;
                            p_node_new->p_node_precedant = p_node_temp->p_node_precedant;
                            p_node_new->p_node_suivant = p_node_temp;
                            p_liste->longueur++;
                        }
//                    }
                }
                else
                {
                    p_node_temp = p_node_temp->p_node_suivant;
                }
                i++;
            }
        }
    }
}

void liste_chaine_simple_delete_id(Liste *p_liste,int position)
{
    if (p_liste == NULL)
    {
        exit(EXIT_FAILURE);
    }
    else
    {
        Node *p_node_temp = p_liste->p_node_premier;
        int i = 0;
        while (p_node_temp != NULL && i <= position)
        {
            if (position == i)
            {
                if (p_node_temp->p_node_suivant == NULL && p_node_temp->p_node_precedant == NULL)
                {
                    p_liste->p_node_dernier = NULL;
                    p_liste->p_node_premier = NULL;
                }
                else if (p_node_temp->p_node_suivant == NULL)
                {
                    p_liste->p_node_dernier = p_node_temp->p_node_precedant;
                    p_liste->p_node_dernier->p_node_suivant = NULL;
                }
                else if (p_node_temp->p_node_precedant == NULL)
                {
                    p_liste->p_node_premier = p_node_temp->p_node_suivant;
                    p_liste->p_node_premier->p_node_precedant = NULL;
                }
                else
                {
                    p_node_temp->p_node_suivant->p_node_precedant = p_node_temp->p_node_precedant;
                    p_node_temp->p_node_precedant->p_node_suivant = p_node_temp->p_node_suivant;
                }
                free(p_node_temp);
                p_liste->longueur--;
            }
            else
            {
                p_node_temp = p_node_temp->p_node_suivant;
            }
            i++;
        }
    }
}

void liste_chaine_simple_delete(Liste *p_liste)
{
    while(p_liste->longueur>1)
    {
        liste_chaine_simple_delete_id(p_liste,0);
    }
    free(p_liste);
}
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre
23-09-2012, 13h43
Message : #2
supersnail En ligne
Éleveur d'ornithorynques
*******



Messages : 1,614
Sujets : 72
Points: 466
Inscription : Jan 2012
RE: bibliothèque de gestion des listes doublement chainées
Hum, en gros t'as fait une sorte de liste doublement chaînée améliorée :p (après je sais pas si ça sert vraiment le champ p_node_dernier de la structure Liste).

Bref, sympa, même si ton post m'a fait rater le leet time :').
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (0) -1 (0) Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut