#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef struct nodeElement nodeElement;
typedef struct arcElement
{
nodeElement *sommet;
struct arcElement *suivant;
}*arc , arcElement;
typedef struct nodeElement
{
int val_sommet;
arcElement *voisin = NULL;
struct nodeElement *next;
}*node, nodeElement;
node head = NULL;
node new_node();
bool isEmpty(node n);
void insert(int value);
void insert_arc(int sommet_1, int sommet_2);
node search(int sommet);
void display_node(node n);
node clear(node n);
int main(){
insert(3); // permet d'inserer des elements
insert(6);
insert(4);
insert(2);
insert(7);
insert(9);
display_node(head); // permet d'efficher les elements
insert_arc(3,6);
head = clear(head); // permet de vider le graphe
display_node(head); // permet d'efficher les elements
}
/************************************************************************
*******************/
// Fonction pour creer un node vide
node new_node(){
return NULL;
}
/************************************************************************
*******************/
// Fonction pour tester si le node est vide ou pas
bool isEmpty(node n){
return n == NULL;
}
/************************************************************************
*******************/
// Fonction pour inserer des elements(node)
void insert(int value){
node ptr = (node) malloc(sizeof(node*)); // Allocation memoire
node ptr1;
if(isEmpty(ptr)) // Test pour voir si l'allocation s'est bien passée
{
cout<<"Erreur lors de l'allocation\n";
return;
}
ptr->val_sommet = value; // initialisation du node
ptr->next = NULL;
if(isEmpty(head)) // on verifie si le node head n'est pas vide
head = ptr; // si il est vide alors le node qui est creer sera le
premier element du graphe
else{ // sinon on cherche le dernier element du graphe et on y ajoute
le node
ptr1 = head;
while(ptr1->next != NULL)
ptr1 = ptr1->next;
ptr1->next = ptr;
}
}
/************************************************************************
*******************/
// Fonction pour inserer un arc ou une arrete
void insert_arc(int sommet_1, int sommet_2){
node ptr = search(sommet_1); // on cherche le sommet 1 d'abord
node ptr1;
if(ptr){ // si le sommet 1 existe alors on cherche le sommet 2...car
un arc est formé par un ou plusieurs sommets
ptr1 = search(sommet_2);
if(ptr1){ // si le sommet 2 existe alors on creer l'arc entre le
sommet 1 et 2
arc arrete = (arc) malloc(sizeof(arc));
arrete->sommet = ptr;
arrete->suivant = ptr1->voisin;
ptr1->voisin = arrete;
}
}
}
/************************************************************************
*******************/
// Fonction de recherche
node search(int sommet){
while(head){
if(head->val_sommet == sommet){
break;
}
head = head->next;
}
return head;
}
/************************************************************************
*******************/
// Fonction d'affichage
void display_node(node n){
if(isEmpty(n)){
cout<<"Le graph es vide\n";
return;
}
cout<<n->val_sommet<<"\t";
display_node(n->next);
}
/************************************************************************
*******************/
/* Fonction de liberation de la memoire car on a eu a faire de
l'allocation dynamique,
donc il faut liberer la memoiren en supprimant tout les elements creer*/
node clear(node n){
node ptr = NULL;
while(n){
ptr = n->next;
free(n);
n = ptr;
}
return n;
}