I have written in machine code, assembly, and basic. All of them allow spaghetti code. C is more structured and avoids those nasty jumps going all over the place. C was a tough nut for me to crack in the beginning and I probably will never be very proficient with it. I know enough to get by (at least for my simple projects). I don't know what linked lists or binary trees are so library creations will have to wait for quite awhile.
Well, Google is your friend...
The basics about those (linked lists, binary trees) are programming basics, independent from a programming language, just the implementation might depend on the language, some make it easier to work with those than others...
My first program language was Fortran using punched cards in the early 70's
Well, that would have been FORTRAN back then...
Unfortunately, now-a-days I'm not quite as thorough letting the compiler/linker tell me about most of my errors. I always try to maximize warnings as they can also help find a lot of my errors. Having said that I checked the Pellas C warnings level I'm using. It was -W1. I changed it to -W2. I've a lot of work to do.
That is certainly a good way to go. Warnings are there for a reason, though it can be at time a bit hard to understand what
exactly a warning is about. Lazy C programmers might go the other way reducing the warning level, so they don't get "bugged" that much. And then spending more time "debugging"...
Ralf