Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- struct noeud {
- int donnees;
- int id;
- struct noeud *suivant;
- struct noeud *precedent;
- };
- struct noeud *premier = NULL;
- struct noeud *dernier = NULL;
- struct noeud *actuel = NULL;
- int taille() {
- int taille = 0;
- struct noeud *actuel;
- for(actuel = premier; actuel != NULL; actuel = actuel->suivant){
- taille++;
- }
- return taille;
- }
- void afficherAvant() {
- struct noeud *ptr = premier;
- printf("\n[ ");
- while(ptr != NULL) {
- printf("(%d,%d) ",ptr->id,ptr->donnees);
- ptr = ptr->suivant;
- }
- printf(" ]");
- }
- void afficherDerriere() {
- struct noeud *ptr = dernier;
- printf("\n[ ");
- while(ptr != NULL) {
- printf("(%d,%d) ",ptr->id,ptr->donnees);
- ptr = ptr ->precedent;
- }
- }
- void insererPremier(int id, int donnees) {
- struct noeud *lien = (struct noeud*) malloc(sizeof(struct noeud));
- lien->id = id;
- lien->donnees = donnees;
- if(premier == NULL) {
- dernier = lien;
- } else {
- premier->precedent = lien;
- }
- lien->suivant = premier;
- premier = lien;
- }
- void insererDernier(int id, int donnees) {
- struct noeud *lien = (struct noeud*) malloc(sizeof(struct noeud));
- lien->id = id;
- lien->donnees = donnees;
- if(premier == NULL) {
- dernier = lien;
- } else {
- dernier->suivant = lien;
- lien->precedent = dernier;
- }
- dernier = lien;
- }
- struct noeud* supprimerPremier() {
- struct noeud *tempLien = premier;
- if(premier->suivant == NULL){
- dernier = NULL;
- } else {
- premier->suivant->precedent = NULL;
- }
- premier = premier->suivant;
- return tempLien;
- }
- struct noeud* supprimerDernier() {
- struct noeud *tempLien = dernier;
- if(premier->suivant == NULL) {
- premier = NULL;
- } else {
- dernier->precedent->suivant = NULL;
- }
- dernier = dernier->precedent;
- return tempLien;
- }
- struct noeud* supprimer(int id) {
- struct noeud* actuel = premier;
- struct noeud* precedentious = NULL;
- if(premier == NULL) {
- return NULL;
- }
- while(actuel->id != id) {
- if(actuel->suivant == NULL) {
- return NULL;
- } else {
- precedentious = actuel;
- actuel = actuel->suivant;
- }
- }
- if(actuel == premier) {
- premier = premier->suivant;
- } else {
- actuel->precedent->suivant = actuel->suivant;
- }
- if(actuel == dernier) {
- dernier = actuel->precedent;
- } else {
- actuel->suivant->precedent = actuel->precedent;
- }
- return actuel;
- }
- int insererApres(int id, int nouvId, int donnees) {
- struct noeud *actuel = premier;
- if(premier == NULL) {
- return 0;
- }
- while(actuel->id != id) {
- if(actuel->suivant == NULL) {
- return 0;
- }
- else {
- actuel = actuel->suivant;
- }
- }
- struct noeud *nouvLien = (struct noeud*) malloc(sizeof(struct noeud));
- nouvLien->id = nouvId;
- nouvLien->donnees = donnees;
- if(actuel == dernier) {
- nouvLien->suivant = NULL;
- dernier = nouvLien;
- } else {
- nouvLien->suivant = actuel->suivant;
- actuel->suivant->precedent = nouvLien;
- }
- nouvLien->precedent = actuel;
- actuel->suivant = nouvLien;
- return 1;
- }
- void main() {
- insererPremier(1,10);
- insererPremier(2,20);
- insererPremier(3,30);
- insererPremier(4,1);
- insererPremier(5,40);
- insererPremier(6,56);
- printf("\nListe (premier au dernier) : ");
- afficherAvant();
- printf("\n");
- printf("\nListe (dernier au premier) : ");
- afficherDerriere();
- printf("\nListe, apres suppression du premier element : ");
- supprimerPremier();
- afficherAvant();
- printf("\nListe, apres suppression du dernier element : ");
- supprimerDernier();
- afficherAvant();
- printf("\nListe, apres insertion apres l'id 4: ");
- insererApres(4,7, 13);
- afficherAvant();
- printf("\nListe, apres suppression de l'id 4 : ");
- supprimer(4);
- afficherAvant();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement