Example #1
0
liste supprimen(int n,liste l){
	int i;
	liste p=l;
	liste a=NULL;
	if(!l) return l;
	if(!l->suiv || n==1 ) return supprimer_tete(l);
	if(n==1) return supprimer_tete(l);
	for(i=0; i<n-2 && (p->suiv)->suiv ; i++, p=p->suiv);

	a=p->suiv;

	if(!((p->suiv)->suiv)){ 
		free(p->suiv);
		p->suiv=NULL;
		return l;
		}
	p->suiv=(p->suiv)->suiv;
	free(a);
	return l;
}
Example #2
0
int main(void)
{
    int choix ;
    int nb ;
    

    Liste ma_liste ;

    init(); // initialisations (des structures de donnees utilisees pour la
            // gestion de la memoire) 
    ma_liste = creer_liste_vide() ; 
    menu();    
    choix = lire_entier() ;
    while (choix != 0)
    {
        switch(choix)
        {
            case 1 : 
                   ma_liste = creer_liste_vide() ; 
                   break;
            case 2 : 
                   afficher_chaine("nombre a inserer ? ");
                   nb = lire_entier();
                   ma_liste = inserer_tete(ma_liste, nb);
                   break ;
            case 3 : 
                   afficher_chaine("nombre a rechercher ? ");
                   nb = lire_entier();
                   if(rechercher(ma_liste, nb) !=0)
                        afficher_chaine (" present!\n");
                   else 
                        afficher_chaine(" absent!\n");
                   break;
            case 4 : 
                   afficher_liste(ma_liste);
                   break ;
            case 5:
                   afficher_liste_inverse(ma_liste);
                   break ;
            case 6: ma_liste = supprimer_tete(ma_liste); 
                   break ;
            case 7: ma_liste = supprimer_queue(ma_liste);
                   break ;
         }
         menu();
         choix = lire_entier() ;
    }

    


return(0);
}
Example #3
0
File algo_fileACM(Sommet * tab_sommet, Arc * tab_arc,
		  int len_tab_sommet, int len_tab_arc,
		  int num_depart, float *cout)
{

	File fileACM = NULL;
	Liste C = NULL;

	Liste liste_sommet_atteint = NULL;

	Sommet d = tab_sommet[num_depart];

	/*
	   DEBUT ALGO PRIM
	 */

	Sommet *smt;
	for (smt = tab_sommet; smt < tab_sommet + len_tab_sommet; smt++) {
		smt->PPC = FLT_MAX;
		smt->arrive_par = NULL;
	}

	d.PPC = 0;
	d.arrive_par = NULL;

	C = ajout_tri(&d, C);
	liste_sommet_atteint = ajouter_queue(&d, liste_sommet_atteint, sizeof(Sommet));

	while (!est_vide_liste(C)) {

		Sommet sommet_ppc_min;
		Liste liste_sommet_adjacent = NULL;
		Liste liste_arc_sortant = NULL;
		Arc *a;
		Liste ll;

		/*on récupère le sommet de plus petit PPC et son coût */
		/*Comme la liste est triée, c'est le premier élément de C */
		sommet_ppc_min = *(Sommet *) C->val;

		/*supprimer j de C */
		C = supprimer_tete(C);

		/*si j n'est pas d */
		if (sommet_ppc_min.numero != d.numero) {
			*cout += sommet_ppc_min.PPC;
			fileACM = enfiler(fileACM, sommet_ppc_min.arrive_par, sizeof(Arc));
			liste_sommet_atteint = ajouter_queue(&sommet_ppc_min, liste_sommet_atteint, sizeof(Sommet));
		}

		/* on récupère les adjacents */
		for (a = tab_arc; a < tab_arc + len_tab_arc; a++) {
			if (a->sommet_depart == sommet_ppc_min.numero) {
				liste_sommet_adjacent = ajouter_queue(&tab_sommet[a->sommet_arrive], liste_sommet_adjacent, sizeof(Sommet));
			
				liste_arc_sortant = ajouter_queue(a, liste_arc_sortant, sizeof(Arc));
			}
		}

		sommet_ppc_min.voisins = liste_arc_sortant;

		// printf("Sommet: %s\n", sommet_ppc_min.nom);

		for (ll = liste_arc_sortant; !est_vide_liste(ll); ll = ll->suiv) {

			a = (Arc *) ll->val;

			if ((tab_sommet[a->sommet_arrive]).PPC > a->cout) { 

				tab_sommet[a->sommet_arrive].PPC = a->cout;
				tab_sommet[a->sommet_arrive].arrive_par = a;

				if (recherche_elt_liste(liste_sommet_atteint, &tab_sommet[a->sommet_arrive]) != 1) {
					if (recherche_elt_liste(C, &tab_sommet[a->sommet_arrive]) != 1) {
						C = ajout_tri(&tab_sommet[a->sommet_arrive], C);
					} else {

						Liste L = C;
						Liste l;
						C = NULL;
						for (l = L; !est_vide_liste(l); l = l->suiv ) {
							C = ajout_tri(&tab_sommet[((Sommet*) l->val)->numero], C);
						}
					}
				}
			}

		}
	}

	printf("Cout de l'acm: %f\n", *cout);

	/* FIN ALGO PRIM */

	return fileACM;
}