Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- typedef struct cell{
- int valeur;
- struct cell *suivant;
- } cellule;
- typedef cellule* liste;
- liste saisieListe(void) {
- /* rend l'adresse de début de la liste saisie */
- liste li=NULL, precedent, actuel ;
- int val, erreur ;
- printf("\n\n\n\n\n");
- do {
- printf("\n\t prochaine valeur ? (un caractère pour finir) : ");
- erreur=scanf("%d",&val) ;
- if(erreur<=0) break ; /* scanf() rend le nombre de variables lues sans
- erreur */
- actuel=(liste)malloc(sizeof(cellule)) ;
- actuel->valeur=val ;
- if(li==NULL) li=actuel ;
- else
- precedent->suivant=actuel ;
- precedent=actuel ;
- } while (1) ;
- actuel->suivant=NULL ;
- return(li) ;
- }
- void afficheListe(liste li) {
- liste li1=li;
- printf("\n\n\n\n\t affichage de la liste li : ");
- for(li1=li;li1!=NULL;li1=li1->suivant){
- printf(" %d",li1->valeur);
- }
- getchar();
- }
- int LongueurListeIt(liste li) {
- int n=0 ;
- while(li!=NULL) {
- n++ ;
- li=li->suivant ;
- }
- return(n) ;
- }
- int NbOccIt(liste li, int val) {
- int nb=0 ;
- while(li!=NULL) {
- if (li->valeur==val)
- nb++ ;
- li=li->suivant ;
- }
- return(nb) ;
- }
- void insertionPremier(liste *li, int val) {
- liste nouv ;
- nouv=(liste)malloc(sizeof(cellule));
- nouv->valeur=val ;
- nouv->suivant=*li ;
- *li=nouv ;
- }
- void insertionMilieu(liste li, int val) {
- liste nouv ;
- nouv=(liste)malloc(sizeof(cellule));
- nouv->valeur=val ;
- nouv->suivant=li->suivant ;
- li->suivant=nouv ;
- }
- liste chercherPrecedent(liste li, liste suiv) {
- /* rendre l'adresse NULL si on pas trouvé */
- while(li->suivant!=suiv && li!=NULL)
- li=li->suivant ;
- return(li) ;
- }
- liste chercherIndice(liste li, int i) {
- /* rend l'adresse du(i+1)-ième, NULL si liste trop courte */
- int j ;
- for(j=0 ;j<i && li!=NULL ;j++)
- li=li->suivant ;
- return(li) ;
- }
- liste chercherElement(liste li, int val) {
- /* rend l'adresse, NULL si on n'a pas trouvé */
- while(li!=NULL && li->valeur!=val)
- li=li->suivant ;
- return(li) ;
- }
- void supprimerSuivant(liste precedent) {
- liste supp ;
- if(precedent==NULL || precedent->suivant==NULL) {
- puts("\n\n\n\n\t\t rien a supprimer!");
- return;
- }
- supp=precedent->suivant;
- precedent->suivant=supp->suivant;
- free(supp);
- }
- void supprimerPremier(liste *li) {
- liste supp ;
- if(*li==NULL) {
- puts("\n\n\n\n\t\t rien a supprimer!");
- return;
- }
- supp=*li;
- *li=(*li)->suivant ;
- free(supp);
- }
- void supprimerTout(liste li) {
- liste supp ;
- while(li !=NULL) {
- supp=li->suivant;
- free(li) ;
- li=supp;
- }
- }
- int main() {
- liste li;
- int val, n, k, choix;
- li=saisieListe();
- afficheListe(li);
- do {
- printf("---------------------------------\n");
- printf("1 Pour saisir une nouvelle liste ....... \n");
- printf("2 Pour afficher la liste saisie ....... \n");
- printf("3 Pour calculer la longueur ....... \n");
- printf("4 Pour calculer le nombre d'occ. ....... \n");
- printf("5 Pour inserer au debut ....... \n");
- printf("6 Pour inserer au milieu ....... \n");
- printf("7 Pour supprimer au debut ....... \n");
- printf("8 Pour supprimer au milieu ....... \n");
- printf("9 Pour quitter le programme ....... \n");
- printf("0 Donner votre choix s.v.p. .......:");
- scanf("%d",&choix);
- switch(choix) {
- case 1 : {
- li=saisieListe();
- afficheListe(li);
- break;
- }
- case 2 : {
- afficheListe(li);
- break;
- }
- case 3 : {
- k=LongueurListeIt(li);
- printf("\n\n\n\n\t\t la longueur est %d\n",k);
- getchar();
- break;
- }
- case 4 : {
- printf("\t\t val ? ");
- scanf("%d",&val) ;
- n=NbOccIt(li,val);
- printf("\n\n\n\n") ;
- printf("\t\t le nombre d'occurence de %d est %d\n",val,n);
- getchar();
- break;
- }
- case 5 : {
- printf("\n\n\n\n\t\t valeur a inserer au debut ? ");
- scanf("%d",&val) ;
- insertionPremier(&li,val);
- afficheListe(li);
- break;
- }
- case 6 : {
- printf("\n\n\n\n\t\t valeur a inserer au milieu ? ");
- scanf("%d",&val) ;
- insertionMilieu(li,val);
- afficheListe(li);
- break;
- }
- case 7 : {
- supprimerPremier(&li);
- afficheListe(li);
- break;
- }
- case 8 : {
- supprimerSuivant(li->suivant);
- afficheListe(li);
- break;
- }
- default : break;
- }
- }while(choix);
- supprimerTout(li);
- afficheListe(li);
- getchar();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment