Queue mit Fließkommazahlen
-
ich war mal so nett und hab das für dich übernommen auch wenns nicht das gelbe vom ei ist und ;fricky sicher nicht gefällt
#include <stdio.h> #include <stdlib.h> typedef struct _fifoNode{ float value; struct _fifoNode *next; }fifoNode; typedef struct _fifo{ fifoNode *first; fifoNode *last; }fifo; int push(fifo *stack,float data){ fifoNode *n = malloc(sizeof(fifoNode)); if(n!=NULL){ n->next = NULL; n->value = data; if(stack->last==NULL){ stack->last = stack->first = n; }else{ stack->last->next = n; stack->last = n; } return 1; } printf("buffer overrun"); return 0; } float pop(fifo *stack){ fifoNode *n = stack->first; float ret = 0; if(n!=NULL){ stack->first = n->next; if(stack->first == NULL) stack->last = NULL; ret = n->value; free(n); }else{ printf("buffer underrun"); } return ret; } int main(void) { fifo stack; stack.first = NULL; stack.last = NULL; push(&stack,1.0); push(&stack,2.0); push(&stack,3.0); push(&stack,4.0); printf("%f\n",pop(&stack)); printf("%f\n",pop(&stack)); printf("%f\n",pop(&stack)); printf("%f\n",pop(&stack)); printf("%f\n",pop(&stack)); push(&stack,1.0); push(&stack,2.0); push(&stack,3.0); push(&stack,4.0); printf("%f\n",pop(&stack)); printf("%f\n",pop(&stack)); printf("%f\n",pop(&stack)); printf("%f\n",pop(&stack)); printf("%f\n",pop(&stack)); return 0; }
-
noobLolo schrieb:
...und ;fricky sicher nicht gefällt
hihi, was mir nicht gefällt ist: du schreibst 'stack' und 'fifo', dabei ist ein stack doch eigentlich ein 'lifo' *fg* und eigentlich hast du eine queue aus verketteten listen gebaut.
aber wenigstens castest du 'malloc' nicht und testest sogar auf 0. *daumen_hoch*
-
Vielen Dank für deinen Einsatz nooblolo.
Leider ist nur die Struktur, die ich hatte, mit:struct Queue{};
struct Queueelement{};
struct Queue q;void enqueue(struct Queue *q, float z);
float dequeue(struct Queue *q);
float front(struct Queue q);schon vorgegeben.
Ich verzweifle einfach an der Aufgabe.MfG
Neuerneuneu
-
Neuerneuneu schrieb:
Leider ist nur die Struktur, die ich hatte, mit:
...
schon vorgegeben.dann nimm doch noobLolos code und tausch' einfach die bezeichner aus.
-
Das wäre einen Versuch Wert.
Nur weiß ich nich genau, wo nooblolo:
struct Queue q;
benutzt.Außerdem zeigt mir der Compiler hier:
int push(fifo *stack,float data){ fifoNode *n = malloc(sizeof(fifoNode));
einen Fehler an: invalid conversion from `void*' to `fifoNode*'.
MfG
Neuerneuneu
-
Neuerneuneu schrieb:
Nur weiß ich nich genau, wo nooblolo:
struct Queue q;
benutzt.das macht er am anfang der main:
int main(void) { fifo stack; // <--- Queue q ...
Neuerneuneu schrieb:
...einen Fehler an: invalid conversion from `void*' to `fifoNode*'.
du benutzt wahrscheinlich einen c++-compiler, das typsystem von C++ hat hier eine leicht hirnrissige einschränkung. benenn deinen code in .C um, dann sollte deine IDE den C-compiler anwerfen.
-
;fricky schrieb:
du schreibst 'stack' und 'fifo', dabei ist ein stack doch eigentlich ein 'lifo'
das hatte ich irgendwie falsch in erinnerung dachte ein stack kann entweder fifo oder lifo sein
Neuerneuneu schrieb:
Außerdem zeigt mir der Compiler hier: ... invalid conversion from `void*' to `fifoNode*'.
du quälst meinen code aber nicht durch nen c++ compiler oder?
-
Sry war mein Fehler.
Jetzt funktionierts!!!!
Vielen Dank Jungs, habt mir echt sehr geholfen!
Guten Rutsch!^^MfG
Neuerneuneu
-
noobLolo schrieb:
;fricky schrieb:
du schreibst 'stack' und 'fifo', dabei ist ein stack doch eigentlich ein 'lifo'
das hatte ich irgendwie falsch in erinnerung dachte ein stack kann entweder fifo oder lifo sein
mir sind nur stacks bekannt, die das zuletzt 'gepushte' element als erstes wieder ausspucken. 'fifo-stacks' kenne ich nicht, aber vielleicht solltest mal besser die informatiker hier fragen.
-
;fricky schrieb:
'fifo-stacks' kenne ich nicht
ja wikipedia hat mich auch schon eines besseren belehrt
scheint so als wär
queue = fifo
stack = lifonaja nächstes mal weiß ichs hoffentlich