Cześć, rzadko się ostatnio udzielam ale chciałbym poprosić wyjadaczy o radę.
Chce zaimplementować kolejkę FIFO (w C), dla której będzie możliwość usuwania elementów z jej środka. Jak najłatwiej się za to zabrać?
Mam następujące pomysły:
1. Deklaruję zwykłą tablicę x elementową, oraz zmienną informującą o ilości zapisanych danych. Dodawanie kolejnych elementów jest trywialne, problem pojawia się gdy chcę usunąć element ze środka. Mogę po prostu zmniejszyć licznik danych o 1 a następnie:
a) przesuwać dane w tablicy począwszy od usuniętego elementu a skończywszy na ostatniej danej w kolejce,
b) zastosować fcje memcpy - i zrealizować przy jej użyciu przesunięcie w tablicy danych o 1 w lewo
2. Stosuje funkcje malloc oraz free i robię kolejkę książkową dla struktury
typedef struct QueeElement_Tag
{
uint16 message;
QueeElement_T * head;
QueeElement_T * tail;
} QueeElement_T;
Do tego jestem niechętnie nastawiony, nie bardzo lubię zabawy z alokacją pamięci na AVRkach.
3. Jakieś wasze proste i sprawdzone propozycje?
Z góry bardzo serdecznie dziękuję za pomoc.
Chce zaimplementować kolejkę FIFO (w C), dla której będzie możliwość usuwania elementów z jej środka. Jak najłatwiej się za to zabrać?
Mam następujące pomysły:
1. Deklaruję zwykłą tablicę x elementową, oraz zmienną informującą o ilości zapisanych danych. Dodawanie kolejnych elementów jest trywialne, problem pojawia się gdy chcę usunąć element ze środka. Mogę po prostu zmniejszyć licznik danych o 1 a następnie:
a) przesuwać dane w tablicy począwszy od usuniętego elementu a skończywszy na ostatniej danej w kolejce,
b) zastosować fcje memcpy - i zrealizować przy jej użyciu przesunięcie w tablicy danych o 1 w lewo
2. Stosuje funkcje malloc oraz free i robię kolejkę książkową dla struktury
typedef struct QueeElement_Tag
{
uint16 message;
QueeElement_T * head;
QueeElement_T * tail;
} QueeElement_T;
Do tego jestem niechętnie nastawiony, nie bardzo lubię zabawy z alokacją pamięci na AVRkach.
3. Jakieś wasze proste i sprawdzone propozycje?
Z góry bardzo serdecznie dziękuję za pomoc.