Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Library for the Basic Data Structures, such as Queue, in C

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?

like image 237
Léo Léopold Hertz 준영 Avatar asked Jul 23 '09 17:07

Léo Léopold Hertz 준영


People also ask

Is there a library for queue in C?

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.

What library is queue in?

Queue in C++ Standard Template Library (STL)

What is Library in data structure?

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.

Is there a stack library in C?

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.


1 Answers

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);
}
like image 187
Andrew Y Avatar answered Oct 21 '22 08:10

Andrew Y