!!! HILFE!!!! Wie programmiert man eine Queue????
-
Hallöchen,
hoffe mir kann jemand helfen.haben nächste wochen klausur und das hauptthema in c ist das programmieren einer queue.
haben als beispiel nur einen stack bekommen und sollen daraus einen ringpuffer machen.
kann mir jemand sagen wie das geht??? bittte!!!wenn ja, kann das stack.c programm gerne dann für nähere info´s schicken.
Tausend Dank
chrissi
-
du brauchst noch nen zweiten pointer oder indexzähler. wenn einer am ende angekommen ist, setzt du ihn wieder auf 0. wenn beide gleich sind, ist die queue voll, ausser am anfang
-
justsweetchis schrieb:
haben nächste wochen klausur und das hauptthema in c ist das programmieren einer queue.
Dann poste bitte das nächste mal im richtigen Forum, hier geht es um .NET und nicht um C.
-
Ne Queue ist eigentlich sehr einfach und mit ner verketteten Liste, oder einem Stack kann man sie sehr leicht implementieren, hier mal nen Beispiel (müsstest nur statt ner Liste deinen Stack benutzen):
/***************************************************************************** * * * ------------------------------- queue.h -------------------------------- * * * *****************************************************************************/ #ifndef QUEUE_H #define QUEUE_H #include <stdlib.h> #include "list.h" /***************************************************************************** * * * Implement queues as linked lists. * * * *****************************************************************************/ typedef List Queue; /***************************************************************************** * * * --------------------------- Public Interface --------------------------- * * * *****************************************************************************/ #define queue_init list_init #define queue_destroy list_destroy int queue_enqueue(Queue *queue, const void *data); int queue_dequeue(Queue *queue, void **data); #define queue_peek(queue) ((queue)->head == NULL ? NULL : (queue)->head->data) #define queue_size list_size #endif
/***************************************************************************** * * * ------------------------------- queue.c -------------------------------- * * * *****************************************************************************/ #include <stdlib.h> #include "list.h" #include "queue.h" /***************************************************************************** * * * ----------------------------- queue_enqueue ---------------------------- * * * *****************************************************************************/ int queue_enqueue(Queue *queue, const void *data) { /***************************************************************************** * * * Enqueue the data. * * * *****************************************************************************/ return list_ins_next(queue, list_tail(queue), data); } /***************************************************************************** * * * ----------------------------- queue_dequeue ---------------------------- * * * *****************************************************************************/ int queue_dequeue(Queue *queue, void **data) { /***************************************************************************** * * * Dequeue the data. * * * *****************************************************************************/ return list_rem_next(queue, NULL, data); }
/***************************************************************************** * * * -------------------------------- list.h -------------------------------- * * * *****************************************************************************/ #ifndef LIST_H #define LIST_H #include <stdlib.h> /***************************************************************************** * * * Define a structure for linked list elements. * * * *****************************************************************************/ typedef struct ListElmt_ { void *data; struct ListElmt_ *next; } ListElmt; /***************************************************************************** * * * Define a structure for linked lists. * * * *****************************************************************************/ typedef struct List_ { int size; int (*match)(const void *key1, const void *key2); void (*destroy)(void *data); ListElmt *head; ListElmt *tail; } List; /***************************************************************************** * * * --------------------------- Public Interface --------------------------- * * * *****************************************************************************/ void list_init(List *list, void (*destroy)(void *data)); void list_destroy(List *list); int list_ins_next(List *list, ListElmt *element, const void *data); int list_rem_next(List *list, ListElmt *element, void **data); #define list_size(list) ((list)->size) #define list_head(list) ((list)->head) #define list_tail(list) ((list)->tail) #define list_is_head(list, element) ((element) == (list)->head ? 1 : 0) #define list_is_tail(element) ((element)->next == NULL ? 1 : 0) #define list_data(element) ((element)->data) #define list_next(element) ((element)->next) #endif
Die list.c gibts aber nicht du sollst ja schließlich noch was lernen
-
vielen Dank für die prompte Hilfe.
jetzt schau ich mal, dass ich das alles zum laufen bekomme.
naja hab ja noch paar tage zeit.vielen dank noch mal.