Ajouter des éléments en queue de liste chainee
Dans mon main, j'ai une chaine de caractère. Je veux mettre tous mes nombres dans la queue et tous les opérateurs dans la pile.
Pour la pile tout est ok, il n'y à aucun problème. Pour la queue ca se complique, a un moment j'arrive à avoir tous les nombres quand j'appelle cette fonction, ca les affiche sans problème ==>
Ca c'est ok et ca m'affiche bien ceci :
2
53
8
472
98
788
Je veux envoyer chacun de ces éléments grace a la fonction put_queue et ensuite afficher ma liste chainee en queue grace a la fonction view_queue mais ca ne m'affiche que des caractères spéciaux ... bizarre ... quelqu'un a t - il une solution svp ?
Voici le code en entier ==>
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
#include <stdlib.h>
struct pile
{
char valeur;
struct pile *new;
};
struct queue
{
char *donnee;
struct queue *suivant;
};
int put_queue(struct queue **p_file, char *donnee) // met des éléments dans la queue
{
struct queue *p_nouveau = malloc(sizeof *p_nouveau);
if (p_nouveau != NULL)
{
p_nouveau->suivant = NULL;
p_nouveau->donnee = donnee;
if (*p_file == NULL)
{
*p_file = p_nouveau;
}
else
{
struct queue *p_tmp = *p_file;
while (p_tmp->suivant != NULL)
{
p_tmp = p_tmp->suivant;
}
p_tmp->suivant = p_nouveau;
}
}
return (0);
}
int put_pile(struct pile **p_list, char valeur) // met des éléments dans la pile
{
struct pile *new;
new = malloc(sizeof(*new));
if (new == NULL)
return (1);
new->valeur = valeur;
new->new = *p_list;
*p_list = new;
return (0);
}
void view_queue(struct queue *p) // affiche la queue
{
while (p != NULL)
{
puts(p->donnee);
putchar('\n');
p = p->suivant;
}
}
void view_pile(struct pile *p) // affiche la pile
{
while (p != NULL)
{
puts(p);
putchar('\n');
p = p->new;
}
}
int stock(char *src) // des que j'ai un nombre, je le met dans la queue et dès que j'ai un opérateur je le met dans la pile
{
struct pile *p_list;
struct queue *q_list;
char *number;
char *operator;
int i;
int j;
number = malloc(sizeof((number) + 1));
p_list = NULL;
q_list = NULL;
i = 0;
j = 0;
while (src[i])
{
if (src[i] >= '0' && src[i] <= '9')
{
while (src[i] >= '0' && src[i] <= '9')
{
number[j] = src[i];
j++;
i++;
number[j] = '\0';
}
puts(number);
putchar('\n');
put_queue(&q_list, number);
}
else if (src[i] == '*' || src[i] == '+' || src[i] == '-' || src[i] == '/' || src[i] == '%')
{
put_pile(&p_list, src[i]);
i++;
}
else
{
while (j >= 0)
{
number[j] = '\0';
j--;
}
i++;
j = 0;
}
}
view_pile(p_list);
view_queue(q_list);
return (0);
}
int main(int arg, char **argv)
{
char test[] = "2 * 53 + 8 - 472 + 98 - 788";
stock(test);
return (0);
} |