Problem: to find the right data structure for the queue:
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
int main(int argc, const char *argv[])
{
Queue q;
ch ='A';
for (int k = 0; int k < 4; int k++) {
q.addQ(ch);
ch++;
q.addQ(ch);
ch=q.front();
q.removeQ();
}
return 0;
}
I tried to compile it, but the Queue is undeclared:
$ gcc -o Qu_1 -g q_queue.c
q_queue.c: In function 'main':
q_queue.c:8: error: 'Queue' undeclared (first use in this function)
Question: What is the library for the basic data structures such as the queue in the example?
C is not an object-oriented language, and it doesn't have standard libraries for things like queues. For C++, look for the std::queue. You can, of course, make queue-like structure in C, but you'll wind up doing a lot of the work yourself. See the answer below about the TAILQ_ macros.
Queue in C++ Standard Template Library (STL)
It is a collection of Java interfaces and classes that implement fundamental data structures and algorithms, such as: sequences, trees, priority queues, search trees, hash tables. sorting and searching algorithms.
The pop and return external functions are provided with the argument stack library. The pop external functions are described below according to the data type of the value that each pops from the argument stack. The return external functions are described in Return functions for C.
This looks like a good candidate for the TAILQ_* ?
#include <sys/queue.h>
"man queue" will give more details - there are simple lists, tail queues and circular queues there. Those are the macros that you'd need to bolt on your own structures, not classes of course.
The code for your scenario will look something like this (I should have made the add_to_queue return some code to check for error, and avoid global vars too, but hopefully I would be forgiven in this example):
#include <stdio.h>
#include <stdlib.h>
#include <sys/queue.h>
TAILQ_HEAD(tailhead, entry) head;
struct entry {
char c;
TAILQ_ENTRY(entry) entries;
};
void add_to_queue(char ch) {
struct entry *elem;
elem = malloc(sizeof(struct entry));
if (elem) {
elem->c = ch;
}
TAILQ_INSERT_HEAD(&head, elem, entries);
}
int main(int argc, char *argv[]) {
char ch = 'A';
int i;
struct entry *elem;
TAILQ_INIT(&head);
for (i=0; i<4; i++) {
add_to_queue(ch);
ch++;
add_to_queue(ch);
elem = head.tqh_first;
TAILQ_REMOVE(&head, head.tqh_first, entries);
free(elem);
}
exit(0);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With