liste simple avec 2 pointeurs sur le premier et le dernier elements

liste simple avec 2 pointeurs sur le premier et le dernier elements - C++ - Programmation

Marsh Posté le 29-05-2007 à 18:35:11    

salut..SVP j'ai besoin de votre aide...j'arrive pas à executer ce programme..malgré que la compilation est correcte
struct liste  
{int val;
struct liste *suiv;
};
typedef struct liste LISTE ;
struct pointeur
{LISTE *first;
LISTE *last;};
typedef struct pointeur POINTEUR;
POINTEUR *temp;
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
enum commande {en_tete=1,en_queue=2,milieu=3,supprimer=4,affichage1=5,liberation=6}c;
 
/////////////////////////////////////////////////////////////////////////
LISTE *recherche_element(POINTEUR *temp,int v)
{LISTE *r;
 r=temp->first;
 for( ;r&&((r->val)!=v);r=r->suiv);
 return(r);
}
 
////////////////////////////////////////////////////////////////////////////
int lecture()
{int v;
  printf("     donner une valeur\n" );
  scanf("%d",&v);
 
return(v);
}
///////////////////////////////////////////////////////////////////////
POINTEUR *ceer_liste ()//c'est une insertion en queue
{POINTEUR *temp;LISTE *prev,*p;
int valeur;
temp->first=NULL;
temp->last=NULL;
while ( (valeur=lecture())!= 0)
{
  p=(LISTE*)malloc (sizeof (LISTE));
  p->val=valeur;
  p->suiv=NULL;
  if (!temp->first)
   { temp->first =p;
   temp->last=p;}
  else
    prev->suiv=p;
  prev =p;
  temp->last=prev;
}  
return(temp);
}
//////////////////////////////////////////////
POINTEUR* inserer_en_tete(POINTEUR *temp)
{
LISTE  *d;
int tete;
  do
   {printf("donner la valeur a ajouter au premier element\n" );
     scanf("%d",&tete);}
  while(tete==0);
d=(LISTE*)malloc (sizeof(LISTE));
d->val=tete;
d->suiv = temp->first;
temp->first=d;
return (temp);        
}    
 
//**********************************************************
void affichage(POINTEUR *temp)
{LISTE *q;
  q=temp->first;
  while (q)
   {printf("%d\t",q->val);
     q=q->suiv;
   }
 
}
////////////////////////////////////////////////////////////////////////
void liberer_une_liste(POINTEUR *temp)
{LISTE *p,*t;
 for (p=temp->first;p;)
  {
  t=p->suiv;
  free(p);
  p=t;
  }
  free(temp->last);
}
 
////////////////////////////////////////////////////////////////////////
 
LISTE *recherche_precedent(POINTEUR *temp, LISTE *p)
{LISTE *rp;
 rp=temp->first;
 for ( ;rp&&((rp->suiv)!=p);rp=rp->suiv);
 return(rp);
}
//////////////////////////////////////////////////////////////////////////
int suppression_element(POINTEUR *temp)
{LISTE *p,*pp;
 int v;
 if ((v=lecture())!=0)
    if(!(p=recherche_element(temp,v)))
       {printf("\n\nl'element n'éxiste pas\n" );
  return(0);}
   else
    {
       if(p==(temp->first))
   temp->first=p->suiv;
  else
    { if (p==(temp->last))
                 { pp=recherche_precedent(temp,p);
         temp->last=pp; }
              else
        {pp=recherche_precedent(temp,p);
         pp->suiv=p->suiv;
         }}
    free(p);
    return(1);
    } return(1);
 }
/////////////////////////////////////////////////////////////////////////////
LISTE *dernier_element(POINTEUR *temp)
{LISTE *de;
de=temp->first;
for( ;de &&(de->suiv);de=de->suiv);
return(de);
}
/////////////////////////////////////////////////////////////////////////////
LISTE *recherche_precedent_valeur(POINTEUR *temp,int v)
{LISTE *rpv;
 rpv=temp->first;
 for( ;rpv&&((rpv->val)<v);rpv=rpv->suiv);
 return(rpv);
}
//////////////////////////////////////////////////////////////////////////////
void inserer_milieu(POINTEUR *temp)
{LISTE *nouv,*p,*pp,*dernier;int v;
if ((v=lecture())!=0)
{ nouv=(LISTE*)malloc(sizeof(LISTE));
 nouv->val=v;
 if (p=recherche_precedent_valeur (temp,v))
   { if(p==temp->first)
       {nouv->suiv=temp->first;
 temp->first=nouv;
       }
     else
          { if(p==temp->last)
             {nouv->suiv=NULL;
             pp->suiv=nouv;
         temp->last=nouv;}
 else
              {pp=recherche_precedent(temp,p);
      pp->suiv=nouv; /*nouv->suiv=p;*/
      nouv->suiv=p;/*p=nouv*/
              }
   }
   }
 
}
}
///////////////////////////////////////////////////////////////////////////////
void insertion_fin(POINTEUR *temp)
{LISTE *dernier,*d;int v;
if ((v=lecture())!=0)
{ dernier=temp->last;
 d=(LISTE*)malloc(sizeof(LISTE));
 d->val=v;
 d->suiv=NULL;
 dernier->suiv=d;
 temp->last=d;
}
}
//////////////////////////////////////////////////////////////////////////////////
 main()
{LISTE *first,*last,*r;LISTE **first1;
POINTEUR *temp;
int v,q;
 
printf("  *************************************************************\n" );
printf("  *                           programmation                   *\n" );
printf("  *************************************************************\n\n\n\n\n\n " );
printf("           ----------creation de liste chainee simple------------\n\n\n\n\n\n" );
temp=ceer_liste ();
*first1=first;
do
  {    
    printf("\n\n1/ Ajout d'un élément au début\n \n" );                    
    printf("2/ Ajout d'un élément à la fin\n\n" );
    printf("3/ Ajout d'un élément au milieu\n\n" );
    printf("4/ Suppression d'un élément\n\n " );
    printf("5/ affichage\n\n" );
    printf("6/ Libe ration de la liste\n\n" );
    printf("7/ quitter\n\n\n\n" );
    printf("         Entrer une comande\n" );
    scanf("%d",&q);
    if((q>=1)||(q<=6))
   {
      c=(enum commande)q;
       
                 switch(c)
                       {
               case en_tete:
       
                  temp=inserer_en_tete(temp);
                                        *first1=first;
                     
                      break;
                       
                       
                        case en_queue:
     
                    insertion_fin(temp);
                                      *first1=first;
                  break;
                   
                   
                        case milieu:
     inserer_milieu(temp);
                                       *first1=first;
                   break;
                   
                   
                     
   case supprimer:
 
     
                    suppression_element(temp);
          *first1=first;
                       break;
                       
      case affichage1:
         
     
      affichage(temp);  
     break;
                     
      case liberation:  
       
             liberer_une_liste(temp);
     break;                          
   }    
  }            
      else
      printf("** ** taper un numero entre 1 et 6 ** **\n\n" );  
        }
while(q!=7);
 
printf("\n\n\n\n\n\n\n\n   ****************************************************************************\n" );
printf("   *                   appuier sur une touche pour quitter                     *\n" );
printf("   ****************************************************************************\n\n\n\n " );
 getch();
 }
 
 
/////////////////////
heeeeelp please

Reply

Marsh Posté le 29-05-2007 à 18:35:11   

Reply

Marsh Posté le 29-05-2007 à 18:46:31    

balise code merci
ensuite, regarde mon avatar et la section merci :o

Reply

Marsh Posté le 29-05-2007 à 22:00:56    

Joel F a écrit :

balise code merci
ensuite, regarde mon avatar et la section merci :o


 
 :lol: , l'avatar du type blasé.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed