Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1270 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1566868
sousou_y87
Posté le 29-05-2007 à 18:35:11  profilanswer
 

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

mood
Publicité
Posté le 29-05-2007 à 18:35:11  profilanswer
 

n°1566880
Joel F
Real men use unique_ptr
Posté le 29-05-2007 à 18:46:31  profilanswer
 

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

n°1566954
boulgakov
Posté le 29-05-2007 à 22:00:56  profilanswer
 

Joel F a écrit :

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


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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
liste chnainée avec 2 pointeur sur le premier et le dernier elementEncore une question sur les pointeurs
question sur les pointeurs de fonctionsquestion sur les pointeurs
[VBA / access] Effacer valeur zone de txt en fct valeur zone de listeManipuler un simple fichier texte ?!
Chercher une chaîne de caractères dans une listefonction recherche de plusieurs éléments
Plus de sujets relatifs à : liste simple avec 2 pointeurs sur le premier et le dernier elements


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR