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


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


  • ANNUAIRE
  • [EN] Astalavista
    JavaScript: 1, Exploit: 2, Crypto: 34, CrackIt: 15, Stegano: 8, Programming: 12, Logic: 36, Special: 6, Science: 4, Info...
    Challenges
    [FR] Microcontest
    Cryptographie: 7, Mathématiques: 8, Image Son Vidéo: 5, Intelligence artificielle: 3, Réseau: 2, Divers: 7, Phy...
    Challenges
    [FR] Le site du zero
    Découvrez gratuitement la programmation (C, C++, PHP, MySQL, XHTML, CSS...), Linux, le Mapping, la modé...
    Programmation
    [EN] Reddit
    Subreddit dédié à la sécurité informatique.
    Hacking
    [FR] Cyber-Hacker
    CH - Cyber Hacker est un jeu par navigateur de simulation de hack, programmez et envoyez vos virus et piratez les aut...
    Hacking
    [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [EN] Gekko
    Site de challenge présenter sous la forme d'une quête. Vous êtes un agent secret qui répond sous le nom...
    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 Hors 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 : 2 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut