Queue mit Fließkommazahlen



  • achso und ptr->erst gibt es nicht...

    und sowas geht auch nicht
    printf("Die erste Zahl in der Queue ist die %f.",ptr->erst);

    eher
    printf("Die erste Zahl in der Queue ist die %f.",ptr->Fliesskommazahl);



  • aber das machst am besten alles nochmal neu...

    lg lolo



  • 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 = lifo

    naja nächstes mal weiß ichs hoffentlich 🙂


Anmelden zum Antworten