Programme 1:
#include <stdio.h>
#include <stdlib.h>
typedef struct objet {int inf;char sentinel; struct objet *suiv;} tplace;
tplace *tete,*ptr;
int i,n;
int main(){
printf(" Nbr elem : ");
scanf("%d",&n);
if(n>0){
tete=malloc(sizeof(tplace));
if(tete){
printf(" elem 1: ");
scanf("%d",&(tete->inf));
tete->sentinel='@';
tete->suiv=NULL;
}else{printf(" memoire insuf, arret!"); return 1;}
};
ptr=tete;
for(i=1;i<n;i++){
ptr->suiv=malloc(sizeof(tplace));
if(ptr->suiv){
ptr=ptr->suiv;
printf(" elem %d: ",i+1);
scanf("%d",&(ptr->inf));
ptr->sentinel='@';
ptr->suiv=NULL;
}else{printf(" memoire insuf, arret!"); return 1;}
}
printf("tete:");
while(tete!=0){
ptr=tete;
tete=tete->suiv;
printf("[%d]-->",ptr->inf);
ptr->suiv=0;
free(ptr);
ptr=0;
}
printf("<NUL>");
return 0;
}
Programme 2:
#include <stdio.h>
#include <stdlib.h>
typedef struct objet {int inf;char sentinel;struct objet *suiv;} tPlace;
int creatList(tPlace **,int),
affichLiberList(tPlace *);
tPlace *tete,*ptr;
int n;
int main()
{
printf(" Nbr d'elements a creer : ");
scanf("%d",&n);
creatList(&tete,n);
affichLiberList(tete);
tete=NULL;
return 0;
}
//Affichage et liberation;
int affichLiberList(tPlace *tete){
printf("tete:");
while(tete){
ptr=tete;
tete=tete->suiv;
printf("[%d]-->",ptr->inf);
ptr->suiv=0;
free(ptr);
ptr=0;
}
printf("<NUL>");
return 0;
}
//creation
int creatList(tPlace **tete,int n){
int i;
if(n>0){
*tete=malloc(sizeof(tPlace));
if(*tete){
printf(" elem 1: ");
scanf("%d",&((*tete)->inf));
(*tete)->sentinel='@';
(*tete)->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return 1;}
}
ptr=*tete;
for(i=1;i<n;i++){
ptr1=ptr->suiv=malloc(sizeof(tPlace));
if(ptr->suiv){
ptr=ptr->suiv;
printf(" elem %d: ",i+1);
scanf("%d",&(ptr->inf));
ptr->sentinel='@';
ptr->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return 1;}
}
return 0;
}
Programme 3:
int creatList(tPlace **,int),
affichList(tPlace *),
inserWrong(tPlace *,int val,int pos);
tPlace *tete; int n,val,pos;
int main(){
printf(" Nbr d'elements a creer : ");
scanf("%d",&n);
printf(" Val a inserer : ");
scanf("%d",&val);
printf(" Position : ");
scanf("%d",&pos);
creatList(&tete,n);
inserWrong(tete,val,pos);
affichList(tete);
tete=NULL;
return 0;
}
int inserWrong(tPlace *tete,int val,int pos){
tPlace *ptr,*ptr1,*ptrVal; int comp=1;
while(tete && (comp<pos)){
ptr=tete;
tete=tete->suiv;
comp++;
}
ptrVal=(tPlace *)malloc(sizeof(tPlace));
if(ptrVal){
ptrVal->inf=val;
ptrVal->sentinel='@';
ptr->suiv=ptrVal;
ptrVal->suiv=tete;
}else{printf("L'insertion a echouee, memoire insuf"); return 1;}
return 0;
}
//Affichage
int affichList(tPlace *tete){
//A definir
}
//creation
int creatList(tPlace **tete,int n){
//voir programme 2
}
Programme 4: creatList() evitant int**
(de toute façon vous devez maitriser int** car des fois incontournable)
#include <stdio.h>
#include <stdlib.h>
typedef struct objet {int inf;char sentinel;struct objet *suiv;} tPlace;
int affichList(tPlace *);
tPlace *creatList(tPlace *,int);
tPlace *tete; int n,val,pos;
int main(){
printf(" Nbr d'elements a creer : ");
scanf("%d",&n);
tete=creatList(tete,n);
affichList(tete);
tete=NULL;
return 0;
}
int affichList(tPlace *tete){
//a definir
}
//creation
tPlace *creatList(tPlace *tete,int n){
tPlace *ptr; int i;
tete=0;
if(n>0){
tete=malloc(sizeof(tPlace));
if(tete){
printf(" elem 1: ");
scanf("%d",&(tete->inf));
tete->sentinel='@';
tete->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return NULL;}
}
ptr=tete;
for(i=1;i<n;i++){
ptr->suiv=malloc(sizeof(tPlace));
if(ptr->suiv){
ptr=ptr->suiv;
printf(" elem %d: ",i+1);
scanf("%d",&(ptr->inf));
ptr->sentinel='@';
ptr->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return NULL;}
}
return tete;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct objet {int inf;char sentinel; struct objet *suiv;} tplace;
tplace *tete,*ptr;
int i,n;
int main(){
printf(" Nbr elem : ");
scanf("%d",&n);
if(n>0){
tete=malloc(sizeof(tplace));
if(tete){
printf(" elem 1: ");
scanf("%d",&(tete->inf));
tete->sentinel='@';
tete->suiv=NULL;
}else{printf(" memoire insuf, arret!"); return 1;}
};
ptr=tete;
for(i=1;i<n;i++){
ptr->suiv=malloc(sizeof(tplace));
if(ptr->suiv){
ptr=ptr->suiv;
printf(" elem %d: ",i+1);
scanf("%d",&(ptr->inf));
ptr->sentinel='@';
ptr->suiv=NULL;
}else{printf(" memoire insuf, arret!"); return 1;}
}
printf("tete:");
while(tete!=0){
ptr=tete;
tete=tete->suiv;
printf("[%d]-->",ptr->inf);
ptr->suiv=0;
free(ptr);
ptr=0;
}
printf("<NUL>");
return 0;
}
Programme 2:
#include <stdio.h>
#include <stdlib.h>
typedef struct objet {int inf;char sentinel;struct objet *suiv;} tPlace;
int creatList(tPlace **,int),
affichLiberList(tPlace *);
tPlace *tete,*ptr;
int n;
int main()
{
printf(" Nbr d'elements a creer : ");
scanf("%d",&n);
creatList(&tete,n);
affichLiberList(tete);
tete=NULL;
return 0;
}
//Affichage et liberation;
int affichLiberList(tPlace *tete){
printf("tete:");
while(tete){
ptr=tete;
tete=tete->suiv;
printf("[%d]-->",ptr->inf);
ptr->suiv=0;
free(ptr);
ptr=0;
}
printf("<NUL>");
return 0;
}
//creation
int creatList(tPlace **tete,int n){
int i;
if(n>0){
*tete=malloc(sizeof(tPlace));
if(*tete){
printf(" elem 1: ");
scanf("%d",&((*tete)->inf));
(*tete)->sentinel='@';
(*tete)->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return 1;}
}
ptr=*tete;
for(i=1;i<n;i++){
ptr1=ptr->suiv=malloc(sizeof(tPlace));
if(ptr->suiv){
ptr=ptr->suiv;
printf(" elem %d: ",i+1);
scanf("%d",&(ptr->inf));
ptr->sentinel='@';
ptr->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return 1;}
}
return 0;
}
Programme 3:
int creatList(tPlace **,int),
affichList(tPlace *),
inserWrong(tPlace *,int val,int pos);
tPlace *tete; int n,val,pos;
int main(){
printf(" Nbr d'elements a creer : ");
scanf("%d",&n);
printf(" Val a inserer : ");
scanf("%d",&val);
printf(" Position : ");
scanf("%d",&pos);
creatList(&tete,n);
inserWrong(tete,val,pos);
affichList(tete);
tete=NULL;
return 0;
}
int inserWrong(tPlace *tete,int val,int pos){
tPlace *ptr,*ptr1,*ptrVal; int comp=1;
while(tete && (comp<pos)){
ptr=tete;
tete=tete->suiv;
comp++;
}
ptrVal=(tPlace *)malloc(sizeof(tPlace));
if(ptrVal){
ptrVal->inf=val;
ptrVal->sentinel='@';
ptr->suiv=ptrVal;
ptrVal->suiv=tete;
}else{printf("L'insertion a echouee, memoire insuf"); return 1;}
return 0;
}
//Affichage
int affichList(tPlace *tete){
//A definir
}
//creation
int creatList(tPlace **tete,int n){
//voir programme 2
}
Programme 4: creatList() evitant int**
(de toute façon vous devez maitriser int** car des fois incontournable)
#include <stdio.h>
#include <stdlib.h>
typedef struct objet {int inf;char sentinel;struct objet *suiv;} tPlace;
int affichList(tPlace *);
tPlace *creatList(tPlace *,int);
tPlace *tete; int n,val,pos;
int main(){
printf(" Nbr d'elements a creer : ");
scanf("%d",&n);
tete=creatList(tete,n);
affichList(tete);
tete=NULL;
return 0;
}
int affichList(tPlace *tete){
//a definir
}
//creation
tPlace *creatList(tPlace *tete,int n){
tPlace *ptr; int i;
tete=0;
if(n>0){
tete=malloc(sizeof(tPlace));
if(tete){
printf(" elem 1: ");
scanf("%d",&(tete->inf));
tete->sentinel='@';
tete->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return NULL;}
}
ptr=tete;
for(i=1;i<n;i++){
ptr->suiv=malloc(sizeof(tPlace));
if(ptr->suiv){
ptr=ptr->suiv;
printf(" elem %d: ",i+1);
scanf("%d",&(ptr->inf));
ptr->sentinel='@';
ptr->suiv=NULL;
}
else{printf(" memoire insuf, arret!"); return NULL;}
}
return tete;
}
J’ai écrit une nouvelle fonction creatList (appelée creatList2), qui évite l’utilisation de pointeurs doubles en ne prenant qu’un seul argument (le nombre d’éléments dans la liste que nous souhaitons créer), et en renvoyant un pointeur vers la tête.
ReplyDeleteOn peut l’utiliser ainsi :
tPlace *tete;
int n;
/* ... */
tete = creatList2(n);
S’il y a des problèmes, elle renvoie NULL, alors nous pourrions utiliser vérifier que tout va bien en utiliser if (tete) { /* ... */ }.
Voici le code.
Programme 3: insertion + affichage & liberation. (RAW version, plus facile a copier-coller).
ReplyDelete