Skip to content
← Back to Community
C Everything - A 'C' based generic data structure and algorithms library
Profile icon
jar3m

I've been working on creating a C++ STL style generic data structures and algorithm library using C. Although it is a work in progress, I think it is in a good state for you people to check it out and share your ideas and share your feedback.

INFO

  • This is a C repository containing a curated set of data structures and algorithm.website
  • The data structures are implemented keeping them Generic and Abstract.
  • Genericness: Since in C any data structure is completely type dependent, we've tried to achieve a genric data structure that supports any standard data types (int, char, float, etc..) and user defined data types (struct user {})
    • The means by which we achieved a data structure by storing the pointer to the data (standard or user defined) rather the data itself
    • Given below is a snippet of code explaining the same,
// Link list node definition typdef void* t_gen; //< Generic data pointer typedef struct llnode { t_gen data; //< Pointer to the data to be stored in link list struct llnode *nxt; //< Pointer to next node in list struct llnode *prv; //< Pointer to prev node in list } t_llnode;
  • Abstractness: The operations/procedures for each data structure is abstracted to the user by using function pointers, thus creating a psuedo class like structure
t_linklist *l; t_dparams dp; // Data type specific operations to be given to data structure init_data_params(&dp, eSTRING); // Create a string XOR link list l = create_link_list("STRING XORLL",eXOR_LINKLIST, &dp); // Add elements to linklist l->add(l, "Hello"); l->add(l, "World"); // print linklist l->print(l); // Destroy linklist l->destroy(l);

LIST OF DATA STRUCTURES

ALGORITHMS

  • Searching

    • Linear Search
    • Binary Search
  • Sorting

    • Insertion Sort
    • Selection Sort
    • Bubble Sort
    • Quick Sort
    • Merge Sort
    • Heap Sort
  • Graph Algorithms

    • Dijkstra's Shortest Path
    • Bellman Ford Shortest Path
    • Prim's Minimum Spanning Tree
    • Kruskal's Minimum Spanning Tree

Code Documentation

CONFIGURE

Create a folder called bin inder the following directories ds/, common/ and test/

Def.make change flags

BUILD

$ make clean; make all

TEST

Test case are as defined in test/src/test.c

RUN

$ ./foo.out

Voters
Profile icon
thelonecodist
Profile icon
jar3m
Comments
hotnewtop
Profile icon
thelonecodist

This is impressive. Not many people program in C-family languages here, and I give kudos to your effort!

Profile icon
jar3m

@thelonecodist Thanks. The reason I shared the code on here was because I was hoping to get some feedback on the making this library more robust and generic. I wasn't aware that replit contains a non 'C' crowd. Anywhoo, cheers mate!

Profile icon
thelonecodist

@jar3m Yup, most people program in scripting languages here like JS, Python, or some Ruby. I wish more people could focus on C/C++ here. For now, I'm one of the few who do so just to learn lower-level programming. I remember making a simple "parser" here in C for some custom data format.