So I spend a lot of my time at my computer, it’s a fact of life as a computer science PhD student. However, while I may have a vim window open 90% of the time, more often than not there will be latex or matlab code in that vim window. Sometimes, if I get one of those rare lulls in deadlines, there may even be Ruby or Haskell code from when I’m learning or prototyping.
This, however, has made me incredibly lazy. I do no low level programming, know very limited assembler, and get spoiled rotten by higher level languages. How much work does
my_hash["key"] = value do for me? Well, a lot.
To address this, I’m refreshing myself of my C knowledge and building basic abstract types. But, I’m doing it in a way which would make the most academically minded coder weep with glee in its abstraction and cleanliness – although possibly at the expense of speed. But, I’m an academic, I only need to be aware of speed, while making sure my code is clear enough for people to read and hopefully learn.
So far, I’ve blasted through stacks, queues, linked lists, and binary trees. There are still some utility functions to build with regards to the trees, but I’m engineering them to use function pointers and void * memory in order to not tie my data structures to types.
Currently the code is on GitHub and will be built up as I add more data structures. Hopefully I have time for tries, ropes, prefix trees, graphs, and example code of how to use them. Search algorithms and other classics are hopefully going in, with the aim to make a library not for performance, but for clarity and aid in teaching.
Feel free to email me suggestions and requests for algorithms.