2016-10-29 1 views
-4

Ich habe gerade angefangen in C für die Schule zu programmieren. Ich werde gebeten, ein Programm zu machen, das eine FIFO-Struktur verwendet, um mathematische Probleme zu lösen. Ich habe den folgenden Code im Internet für einen FIFO, ich weiß einfach nicht, wie man es benutzt. Ich habe viele Dinge ausprobiert und kann nichts Nützliches im Internet finden oder vielleicht, dass ich einfach nicht das Richtige für die Forschung kenne, aber könntest du mir bitte helfen? Vielen Dank!Wie verwenden Sie eine Typedef-Struktur für einen FIFO?

#include <stdio.h> 
#include <stdlib.h> 

typedef struct pile 
{ 
    int donnee; 
    struct pile *precedent; 
} Pile; 

void pile_push(Pile **p_pile, int donnee) 
{ 
     Pile *p_nouveau = malloc(sizeof *p_nouveau); 
     if (p_nouveau != NULL) 
     { 
       p_nouveau->donnee = donnee; 
       p_nouveau->precedent = *p_pile; 
       *p_pile = p_nouveau; 
     } 
} 

int pile_pop(Pile **p_pile) 
{ 
    int ret = -1; 
    if (p_pile != NULL) 
    { 
     Pile *temporaire = (*p_pile)->precedent; 
     ret = (*p_pile)->donnee; 
     free(*p_pile), *p_pile = NULL; 
     *p_pile = temporaire; 
    } 
    return ret; 
} 

void pile_clear(Pile **p_pile) 
{ 
    while (*p_pile != NULL) 
    { 
     pile_pop(p_pile); 
    } 
} 

Ich habe versucht, dies zu tun:

int main() 
{ 
    int return_val; 
    Pile pile; 
    pile_push(Pile, 5); 
    return_val = pile_pop(Pile); 
    printf(return_val); 
} 

und bekam diesen Fehler:

expected expression before 'Pile' 
too few arguments to function 'pile_push' 
+1

was ist Ihre genaue Frage mon ami? –

+1

Wenn Sie den Code nicht verstehen, wie wissen Sie, dass es sogar tun wird, was Sie wollen? Zufallscode aus dem Internet zu nehmen, den man nicht einmal zu verstehen beginnen kann, ist keine gute Idee. Besser, Dinge von den ersten Prinzipien zu lernen. Wie auch immer, "typedef struct for a fifo" macht nicht wirklich viel Sinn. Was genau hältst du von einer "Fifo-Struktur" (es ist nicht klar, was deine Absicht ist)? – kaylum

+1

Versuchen Sie, den Begriff "Warteschlange" nachzuschlagen; das verwendet eine FIFO-Disziplin. Es gibt auch Stacks (LIFO oder "last in, first out") und Dequeues (Double-ended queues), die Stack- und Queue-Funktionalität kombinieren. –

Antwort

1

Sie gemischt haben Pile und pile auf, die das Problem mit der ersten Warnung. Die Funktionen erwarten einen Zeiger auf einen Zeiger auf einen Stapel. Das heißt: Sie aktualisieren den Wert eines Zeigers, so dass ihnen ein Verweis auf einen Zeiger übergeben werden muss. Ihre Verwendung von printf ist ebenfalls falsch.

int main() 
{ 
    int return_val; 
    Pile *pile = NULL; 
    pile_push(&pile,5); 
    return_val = pile_pop(&pile); 
    printf("return_val is: %d\n",return_val); 
} 
Verwandte Themen