existe-t-il une implémentation de la structure de données de la file d'attente qui "vient" avec c ou devrai-je développer le ma part (ceci est pour un projet d'école, je dois donc utiliser quelque chose qui existe dans l'installation Standard GCC ou doit en mettre en œuvre une par moi-même!) p>
Qu'en est-il des autres structures de données générales telles que des listes liées, des piles, etc. p>
8 Réponses :
Vous devez mettre en œuvre votre propre. C a très peu de choses en termes de structures de données et vous oblige à recourir à des astuces arguelles pour mettre en œuvre des types de données abstraits: voir un article intitulé "Types incomplets comme abstractions" Si vous pouvez le trouver, ou voir comment les principes sont appliqués, disons, Fichier Bignum.H de Polarssl . C ++ d'autre part est censé vous permettre de faire à peu près tout ce que vous pouvez faire en C et de vous donner des moyens de mettre en œuvre des structures de données abstraites. P>
... et C ++ a un type de file d'attente dans la STL dans tous les cas.
Vous devez mettre en œuvre vos propres structures de données, mais il existe de nombreuses bibliothèques de structure de données. P>
Vous pouvez utiliser un tuyau nommé . C'est une structure de données FIFO et fait partie de la norme POSIX. Si tout votre besoin est en cours sur le dos et retirez du front, cela fonctionnera. Vous devrez garder une trace des limites des messages à la main, peut-être que le premier élément soit le nombre d'octets dans le prochain message. P>
Cela serait lent et non portable, ainsi que pour une compréhension des appels de système Unix pour la déboguer.
@larsmans: Je pense cependant qu'il s'agit d'une réponse équitable compte tenu des balises de questions.
Essayez ceci. Unix est livré avec plusieurs types de listes liées - vous pouvez utiliser l'une d'entre elles pour créer d'autres structures éventuellement basées sur la liste telles qu'une pile.
man queue
+1, avec la remarque que ce n'est pas une interface standard. Linux, BSD et je pense que Mac OS X fournit cependant.
Pas techniquement la bonne réponse, mais c'est définitivement hella utile ^ _ ^
pas standard non exacé, mais de nombreux systèmes ont Voir le Documentation ici . P> BSD / sys / file d'attente.h code> et BSD / sys / arbor.h code> qui sont des bibliothèques macro-basées sur la macro. P >
Utilisez BSB LIB. sys / file d'attente.h et sys / arbre.h avoir des implémentations de diverses listes et arbres. P>
non. Mais voici une implémentation très simple:
typedef struct node {
int val;
struct node *next;
} node_t;
void enqueue(node_t **head, int val) {
node_t *new_node = malloc(sizeof(node_t));
if (!new_node) return;
new_node->val = val;
new_node->next = *head;
*head = new_node;
}
int dequeue(node_t **head) {
node_t *current, *prev = NULL;
int retval = -1;
if (*head == NULL) return -1;
current = *head;
while (current->next != NULL) {
prev = current;
current = current->next;
}
retval = current->val;
free(current);
if (prev)
prev->next = NULL;
else
*head = NULL;
return retval;
}
Glib (à ne pas être confondu avec GLIBC) implémente de nombreuses structures de données communes, y compris les files d'attente à double extrémité. Contrairement à FreeBSD's Macro-Wheices , GQUUES de GLIB est basé sur des fonctions qui peuvent être plus faciles à déboguer et à taper vérifier . p>
https://developer.gnome.org/glib /Stables/glib-Double-und-Quuesues.html P>
Stackoverflow.com/questions/1819416/... < / a> stackoverflow.com/questions/14001652/...