Votre avis sur ce code... [C - listes chainées] - Programmation
Marsh Posté le 17-02-2002 à 20:15:12
Il faudrait que tu nous dises le but exact de l?exercice parce que sinon on peut pas te dire si on peut faire mieux !!!
Par contre j?ai un TP avec un DEQUE :
#include <stdio.h>
#include<stdlib.h>
typedef struct chain_deque
{
struct chain_deque *precedent;
int entier;
struct chain_deque *suivant;
} chainon;
typedef struct deque
{
struct chain_deque *tete;
struct chain_deque *queue;
} ptr;
void ajoute_tete(struct deque* d,int nombre)
{
struct chain_deque* ptr_c;
ptr_c=(chainon*)malloc(sizeof(chainon));
if (d->tete!=NULL)
{
d->tete->precedent=ptr_c;
}
if (d->queue==NULL)
{
d->queue=ptr_c;
}
ptr_c->entier=nombre;
ptr_c->precedent=NULL;
ptr_c->suivant=d->tete;
d->tete=ptr_c;
}
void ajoute_queue(struct deque* d,int nombre)
{
struct chain_deque* ptr_c;
ptr_c=(chainon*)malloc(sizeof(chainon));
if (d->queue!=NULL)
{
d->queue->suivant=ptr_c;
}
if (d->tete==NULL)
{
d->tete=ptr_c;
}
ptr_c->entier=nombre;
ptr_c->precedent=d->queue;
ptr_c->suivant=NULL;
d->queue=ptr_c;
}
void supprim_tete(struct deque* d)
{
struct chain_deque* ptr_c;
ptr_c=d->tete
d->tete=d->tete->suivant;
free(ptr_c);
}
Marsh Posté le 17-02-2002 à 21:19:07
Ben si c'est pour faire une liste chainée sans but précis, moi je rajouterais un pointeur vers l'élement précédent...Ca peut toujours servir...
Marsh Posté le 17-02-2002 à 21:33:29
en fait le but c'est de crée une pile representant une expression parenthésé puis de calculer l'expression...
et en fait j'y arrive pas
Marsh Posté le 17-02-2002 à 23:47:23
tu as fait une jolie liste , mais pourquoi ?
tu as dit que tu avais besoin d'une pile , non ?
le plus simple pour la pile c ca :
typedef struct{
int sommet;
Element *tab=NULL;
int taille=0;
}Pile;
Marsh Posté le 18-02-2002 à 00:16:37
flo850 a écrit a écrit : typedef struct{ int sommet; Element *tab=NULL; int taille=0; }Pile; |
C'est clair que les listes chaînées, ça va 5 minutes, et un bon gros tableau est souvent plus clair.
N'oublie pas de réallouer la taille par gros morceaux, pas à chaque fois.
Marsh Posté le 17-02-2002 à 18:46:04
Est ce que sa vous semble correcte ? Ya t'il pas mieux à faire ?
Merci
typedef struct cellule
{
void *info;
char codeinfo;
struct cellule *suivant;
} CELL;
CELL *Creation_Cellule(void *info, int code)
{
CELL *pcell=(CELL *) malloc(sizeof(CELL));
if (!pcell)
pb_mem();
else
{
pcell->codeinfo=code;
pcell->info=info;
pcell->suivant=NULL;
}
return pcell;
}
void Empilage (CELL **ptete, CELL *nouv)
{
// les nouveaux s'insèrent en tête
if (*ptete == NULL)
{
*ptete=nouv;
}
else
{
nouv->suivant=*ptete;
*ptete=nouv;
}
}
CELL* Depilage (CELL **ptete)
{
//On enlève le dernier arrivé
CELL *ptr=*ptete;
if (*ptete)
*ptete= (*ptete)->suivant;
return ptr;
}
[jfdsdjhfuetppo]--Message édité par vincedetroy--[/jfdsdjhfuetppo]