• STATISTIQUES
  • Il y a eu un total de 0 membres et 5242 visiteurs sur le site dans les dernières 24h pour un total de 5 242 personnes!
    Membres: 2 609
    Discussions: 3 580
    Messages: 32 820
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] WeChall
    Audio: 3, Coding: 11, Cracking: 9, Crypto: 18, Encoding: 11, Exploit: 44, Forensics: 1, Fun: 6, HTTP: 6, Image: 8, Java:...
    Challenges
    [EN] Defcon
    Lancé en 1992 par Dark Tangent, DEFCON est la plus ancienne et la plus grande conférence underground de...
    Hacking
    [FR] Kalkulators
    Ce projet a plusieurs buts, le premier étant l’étude de toutes formes cryptographiques, le cot&ea...
    Cryptographie
    [FR] PHP Débutant
    Apprendre le PHP par l'exemple, facilement et simplement. Réservé d'abord aux débutants....
    Programmation
    [FR] Secuser
    Actualité de la sécurité informatique, fiches virus et hoax, alertes par email, antivirus gratui...
    Hacking
    [FR] Hackfest
    Le Hackfest est un évènement de sécurité et de piratage informatique au Québec reg...
    Hacking
    [EN] xda-developers
    Très bon site pour les gros bidouilleurs de smartphone de windows à androïd et de Apple jusqu'...
    Phreaking

  • 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,610
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