(So ... which takes longer, writing the data structure you want, as we all did then, or searching for the perfect library, as some people do now?)
EDIT: awk(1) had built-in hash tables, and dates from 1977. Note that generic hashing becomes much more useful after D-space gets larger than 16-64k! (14-16 bits of address)
The whole thing was perhaps 200 lines of straightforward code. If you don't need to carry around support for all the third-prime-numbered-Tuesday-of-the-month scenarios that general purpose libraries have to, you end up with code you can understand fully and don't have to spend time reasoning about complexity that doesn't exist.
Whenever I write an allocation I try to write a free after it, then fill in the code in between.
Use of static analysers and sanitisers helps too.
Like some people enjoy making all their hand tools from scratch in their workshop, there's a craft and discipline to follow and a satisfaction in doing things well, I enjoy the craft of and discipline C for the same reason.
https://github.com/webd90kb/webd/tree/master/codes/c_project...
https://github.com/webd90kb/webd/tree/master/codes/scripts/e...