Liste chainée - langage C

Fermé
haktarus - Modifié par haktarus le 20/01/2017 à 01:11
 haktarus - 20 janv. 2017 à 23:53
Bonsoir, j'ai un problème tout simple, que je n'arrive pas à résoudre.
Je souhaiterais créer une fonction permettant de retourner le contenu de ma liste chainée à un rang donné en paramètre. Comme lorsque l'on fait tab[i] avec un tableau.

Merci de votre aide,



3 réponses

yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
20 janv. 2017 à 07:02
Bonjour, je pense que tu dois simplement parcourir la liste et t’arrêter quand tu es arrivé au rang donné en paramètre.
0
Mais je sais pas comment faire
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > Haktarus
20 janv. 2017 à 10:05
Montre-nous ce que tu as déjà réalisé.
0
typedef struct element element;
struct element
{
int val;
struct element *nxt;
};

typedef element* llist;


llist add(llist liste, int valeur)

{
element* nouvelElement = malloc(sizeof(element));
nouvelElement->val = valeur;
nouvelElement->nxt = NULL;
if(liste == NULL)
{
return nouvelElement;
}
else
{
element* temp=liste;
while(temp->nxt != NULL)

{
temp = temp->nxt;
}
temp->nxt = nouvelElement;
return liste;
}
}

int size(llist liste)
{
if(liste == NULL)
return 0;
return size(liste->nxt)+1;

}

void disp(llist liste)
{
element *tmp = liste;
while(tmp != NULL)
{
printf("%d ", tmp->val);
tmp = tmp->nxt;
}
}
0
je sais comment faire mais je ne sais pas quelle sont les différents fonctions à utiliser pour le faire.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
Modifié par yg_be le 20/01/2017 à 18:53
bonsoir, pour cet exercice, dois-tu utiliser uniquement ces différentes fonctions, ou peux-tu écrire des fonctions supplémentaires?
peux-tu nous montrer ton programme colorisé et indenté?
peux-tu nous expliquer comment tu penses faire, sans choisir les fonctions à utiliser?
peux-tu déjà déclarer ta fonction, son type et ses paramètres?
j'avais suggéré de parcourir la liste et t’arrêter quand tu es arrivé au rang donné en paramètre. reconnais-tu dans le code que tu as partagé les instructions pour parcourir la liste? est-ce toi qui a écrit ce code?
0
Je peux rajouter autant de fonction que je veux. Ce n'est pas moi qui ai écrit le code. Mais serais-tu me donner une fonction à partir de ca?
L'idée de parcourir la liste jusqu'à i est la bonne mais je sais pas le faire. Je connais ces variables et cette partie du langage c.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
Modifié par yg_be le 20/01/2017 à 19:59
pourquoi veux-tu réaliser cela? n'est-ce pas mieux que tu apprennes en le faisant toi-même? à quoi cela sert si c'est quelqu’un d'autre qui le fait?
as-tu décidé que faire si la liste est vide ou trop courte?
0
Si la liste est trop courte ou vide je pense retourner NULL ou bien un message d'erreur disant trop court...
Toutefois pour le programme que je suis entrain de réaliser actuellement, je sais que je dépasserais pas la taille de la liste. Je suis entrain de réaliser un solveur du compte est bon.
Mais je bloque vraiment pour cette partie qui est cruciale, je pourrais essayer de comprendre plus tard, car je dois le finir avant ce soir.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
20 janv. 2017 à 20:15
bravo, beau projet!
0
J'ai quasiment fini le projet mais j'ai utilisé des tableaux mais selon les nombre utilisés je dépasse ou alors c'est trop lent à calculer. Dû coups avec des listes j'ai trouve une façon de le faire mais j'arrive pas à afficher une valeur de la liste a un rang i
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
20 janv. 2017 à 20:27
peux-tu montrer comment tu vas utiliser cette fonction, peux-tu donner un exemple de ton code, de la déclaration de la liste, du remplissage de ta liste?
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
20 janv. 2017 à 22:28
ceci?
int nthvalue(llist liste, int rang) 
{ 
if(liste == NULL  || rang <= 0 ) 
	return NULL; 
else 
	if (rang==1)
		return liste.valeur;
	else
		return nthvalue(liste->nxt,rang-1);
} 
0
Merci, mais lorsque je compile il y a l'erreur suivante :
serie1.c:61:15: error: request for member ‘valeur’ in something not a structure or union
return liste.valeur;
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
20 janv. 2017 à 23:47
int nthvalue(llist liste, int rang) 
{ 
if(liste == NULL  || rang <= 0 ) 
	return NULL; 
else 
	if (rang==1)
		return liste->valeur;
	else
		return nthvalue(liste->nxt,rang-1);
}
0
merci ca marche nickel, juste la variable que j'avais défini n'est pas valeur mais val.
Merci en tout cas, bonne soirée
0