Guest User

Untitled

a guest
Apr 27th, 2013
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.58 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4.  
  5. typedef struct cell{
  6.     int valeur;
  7.     struct cell *suivant;
  8. } cellule;
  9.  
  10. typedef cellule* liste;
  11.  
  12. liste saisieListe(void) {
  13.     /* rend l'adresse de début de la liste saisie */
  14.     liste li=NULL, precedent, actuel ;
  15.     int val, erreur ;
  16.     printf("\n\n\n\n\n");
  17.     do {
  18.         printf("\n\t prochaine valeur ? (un caractère pour finir) : ");
  19.         erreur=scanf("%d",&val) ;
  20.         if(erreur<=0) break ; /* scanf() rend le nombre de variables lues sans
  21.                      erreur */
  22.         actuel=(liste)malloc(sizeof(cellule)) ;
  23.  
  24.         actuel->valeur=val ;
  25.         if(li==NULL) li=actuel ;
  26.         else
  27.             precedent->suivant=actuel ;
  28.         precedent=actuel ;
  29.     } while (1) ;
  30.     actuel->suivant=NULL ;
  31.     return(li) ;
  32. }
  33. void afficheListe(liste li) {
  34.     liste li1=li;
  35.     printf("\n\n\n\n\t affichage de la liste li : ");
  36.     for(li1=li;li1!=NULL;li1=li1->suivant){
  37.         printf(" %d",li1->valeur);
  38.     }
  39.      getchar();
  40. }
  41. int LongueurListeIt(liste li) {
  42.     int n=0 ;
  43.     while(li!=NULL) {
  44.         n++ ;
  45.         li=li->suivant ;
  46.     }
  47.     return(n) ;
  48. }
  49. int NbOccIt(liste li, int val) {
  50.     int nb=0 ;
  51.     while(li!=NULL) {
  52.         if (li->valeur==val)
  53.             nb++ ;
  54.         li=li->suivant ;
  55.     }
  56.     return(nb) ;
  57. }
  58. void insertionPremier(liste *li, int val) {
  59.     liste nouv ;
  60.     nouv=(liste)malloc(sizeof(cellule));
  61.     nouv->valeur=val ;
  62.     nouv->suivant=*li ;
  63.     *li=nouv ;
  64. }
  65. void insertionMilieu(liste li, int val) {
  66.     liste nouv ;
  67.     nouv=(liste)malloc(sizeof(cellule));
  68.     nouv->valeur=val ;
  69.     nouv->suivant=li->suivant ;
  70.     li->suivant=nouv ;
  71. }
  72. liste chercherPrecedent(liste li, liste suiv) {
  73.     /* rendre l'adresse NULL si on pas trouvé */
  74.     while(li->suivant!=suiv && li!=NULL)
  75.         li=li->suivant ;
  76.     return(li) ;
  77. }
  78. liste chercherIndice(liste li, int i) {
  79.     /* rend l'adresse du(i+1)-ième, NULL si liste trop courte */
  80.     int j ;
  81.     for(j=0 ;j<i && li!=NULL ;j++)
  82.         li=li->suivant ;
  83.     return(li) ;
  84. }
  85. liste chercherElement(liste li, int val) {
  86.     /* rend l'adresse, NULL si on n'a pas trouvé */
  87.     while(li!=NULL && li->valeur!=val)
  88.         li=li->suivant ;
  89.     return(li) ;
  90. }
  91. void supprimerSuivant(liste precedent) {
  92.     liste supp ;
  93.     if(precedent==NULL || precedent->suivant==NULL) {
  94.         puts("\n\n\n\n\t\t rien a supprimer!");
  95.         return;
  96.     }
  97.     supp=precedent->suivant;
  98.     precedent->suivant=supp->suivant;
  99.     free(supp);
  100. }
  101. void supprimerPremier(liste *li) {
  102.     liste supp ;
  103.     if(*li==NULL) {
  104.         puts("\n\n\n\n\t\t rien a supprimer!");
  105.         return;
  106.     }
  107.     supp=*li;
  108.     *li=(*li)->suivant ;
  109.     free(supp);
  110. }
  111. void supprimerTout(liste li) {
  112.     liste supp ;
  113.     while(li !=NULL) {
  114.         supp=li->suivant;
  115.         free(li) ;
  116.         li=supp;
  117.     }
  118. }
  119. int main() {
  120.     liste li;
  121.     int val, n, k, choix;
  122.  
  123.     li=saisieListe();
  124.  
  125.     afficheListe(li);
  126.     do {
  127.  
  128.  
  129.         printf("---------------------------------\n");
  130.         printf("1 Pour saisir une nouvelle liste ....... \n");
  131.         printf("2 Pour afficher la liste saisie ....... \n");
  132.         printf("3 Pour calculer la longueur ....... \n");
  133.         printf("4 Pour calculer le nombre d'occ. ....... \n");
  134.         printf("5 Pour inserer au debut ....... \n");
  135.         printf("6 Pour inserer au milieu ....... \n");
  136.         printf("7 Pour supprimer au debut ....... \n");
  137.         printf("8 Pour supprimer au milieu ....... \n");
  138.         printf("9 Pour quitter le programme ....... \n");
  139.         printf("0 Donner votre choix s.v.p. .......:");
  140.         scanf("%d",&choix);
  141.         switch(choix) {
  142.             case 1 : {
  143.  
  144.                      li=saisieListe();
  145.                      afficheListe(li);
  146.                      break;
  147.                  }
  148.             case 2 : {
  149.  
  150.                      afficheListe(li);
  151.                      break;
  152.                  }
  153.             case 3 : {
  154.  
  155.                      k=LongueurListeIt(li);
  156.                      printf("\n\n\n\n\t\t la longueur est %d\n",k);
  157.                      getchar();
  158.                      break;
  159.                  }
  160.             case 4 : {
  161.  
  162.                      printf("\t\t val ? ");
  163.                      scanf("%d",&val) ;
  164.                      n=NbOccIt(li,val);
  165.                      printf("\n\n\n\n") ;
  166.                      printf("\t\t le nombre d'occurence de %d est %d\n",val,n);
  167.                      getchar();
  168.                      break;
  169.                  }
  170.             case 5 : {
  171.  
  172.                      printf("\n\n\n\n\t\t valeur a inserer au debut ? ");
  173.                      scanf("%d",&val) ;
  174.                      insertionPremier(&li,val);
  175.                      afficheListe(li);
  176.                      break;
  177.                  }
  178.             case 6 : {
  179.  
  180.                      printf("\n\n\n\n\t\t valeur a inserer au milieu ? ");
  181.                      scanf("%d",&val) ;
  182.                      insertionMilieu(li,val);
  183.                      afficheListe(li);
  184.                      break;
  185.                  }
  186.             case 7 : {
  187.  
  188.                      supprimerPremier(&li);
  189.                      afficheListe(li);
  190.                      break;
  191.                  }
  192.             case 8 : {
  193.  
  194.                      supprimerSuivant(li->suivant);
  195.                      afficheListe(li);
  196.                      break;
  197.                  }
  198.             default : break;
  199.         }
  200.     }while(choix);
  201.     supprimerTout(li);
  202.     afficheListe(li);
  203.     getchar();
  204.     return 0;
  205. }
Advertisement
Add Comment
Please, Sign In to add comment