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

  FORUM HardWare.fr
  Programmation
  C

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

 

Sujet(s) à lire :
    - Visual C++
 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1566864
sousou_y87
Posté le 29-05-2007 à 18:32:56  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:32:56  profilanswer
 

n°1566946
matafan
Posté le 29-05-2007 à 21:03:23  profilanswer
 

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.

n°1566958
Trap D
Posté le 29-05-2007 à 22:10:30  profilanswer
 

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


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

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

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

 

Sujets relatifs
pointeur sur fonction membre / switch case[VBA / access] Effacer valeur zone de txt en fct valeur zone de liste
Chercher une chaîne de caractères dans une listeAdd-in Visual Studio 2005 liste webcontrols
Liste Chainée [DS niveau premiere année ingé]in array) Comment limiter une liste de newsletter aux numéros publiés?
[debutant] pointeurVisual Basic : copier le contenu d'une liste dans un tableau
Charger une liste à partir d'un fichiertester si un element d'un ArrayList est nul sans lever de null pointer
Plus de sujets relatifs à : liste chnainée avec 2 pointeur sur le premier et le dernier element


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