Bonjour,

Je veux réaliser une liste itérative en C (je débute en C). Voici la structure LISTE:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
/* Type LISTE*/
typedef struct
{
	int capacite;
	int rang;
	char* tableau;
} LISTE;
Voici maintenant l'interface des fonctions qui traitent une LISTE:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* Interface */
LISTE creer(int);
void detruire(LISTE*);
int nbElements(LISTE);
int capacite(LISTE);
short estVide(LISTE);
short estPleine(LISTE);
char* consulter(LISTE,int);
int supprimer(LISTE,int);
int supprimerPremier(LISTE,char*);
int supprimerTous(LISTE,char);
int modifier(LISTE,int,char*);
int insererFin(LISTE,char*);
int inserer(LISTE,int,char*);
Ma première question concerne la fonction creer:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* Créer une liste vide, d'une capacité initiale de ci places;
   retourne NULL si la création a échouée. */
LISTE creer(int ci)
{
	LISTE liste;
 
	/* Le premier élément de la liste sera de rang 0 */
	liste.rang = 0;
 
	/* Allocation du tableau des éléments */
	liste.tableau = (char*)malloc(sizeof(char) * ci);
 
	/* Test de création de la liste */
	if(liste.tableau)
	{
		liste.capacite = ci;
		return liste;
	}
 
	return liste;
}
Je ne sais pas comment faire pour retourner NULL quand la création a échouée. J'ai essayé:
return (LISTE)NULL;
return (LISTE)0;
return NULL;
return 0;
et rien ne marche. (j'utilise stdio.h pour NULL)

Autre question, ma fonction detruire est-elle correcte ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
/* Détruit la liste et la fait pointer sur NULL */
void detruire(LISTE* liste)
{
	/* Libération de l'espace mémoire */
	if(liste -> tableau)
		free(liste -> tableau);
 
	/* liste pointe sur NULL */
	liste = NULL;
}
Enfin, comment compter le nombre d'éléments dans une telle liste ?
Faut-il réserver un champ nbelements dans la structure ou faut-il parcourir le tableau des éléments avec un pointeur (je voulais suivre cette deuxième méthode mais je suis bloqué) ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
/* Retourne le nombre d'éléments contenus dans la liste */
int nbElements(LISTE liste)
{
	auto int nb = 0;
	auto int* p;
 
	p = liste.tableau;
 
	???
}
a+