liste chnainée avec 2 pointeur sur le premier et le dernier element

liste chnainée avec 2 pointeur sur le premier et le dernier element - C - Programmation

Marsh Posté le 29-05-2007 à 18:32:56    

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:32:56   

Reply

Marsh Posté le 29-05-2007 à 21:03:23    

Si tu veux de l'aide faudra que tu fasses des efforts pour présenter ton problème plus clairement. Déjà met ton code dans des balises cpp. Ensuite explique quel est ton problème.

Reply

Marsh Posté le 29-05-2007 à 22:10:30    

Double post.
http://forum.hardware.fr/hfr/Progr [...] 4885_1.htm


Message édité par Trap D le 29-05-2007 à 22:11:54
Reply

Sujets relatifs:

Leave a Replay

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