En bra site du kan kolla in är
http://rosettacode.org
Där har du en stor mängd olika lösningar på en mängd olika språk du kan kolla in.
Söker du på queue så hittar du förutom en förklaring på vad det är så ger de ett förslag till en sådan på 78 olika programmeringsspråk bl.a i C osv.
Kan vara lite svårnavigerad så titta in genom Google på deras underkategorier.
https://www.google.se/?gws_rd=ssl#q=rosetta+code
Är en guldgruva om du vill lära dig olika algoritmer och se kodförslag i olika språk.
Detta är deras "huvudsida" med +800 olika problem med lösningar.
https://rosettacode.org/wiki/Category:Programming_Tasks
Grafteori kan du ju fördjupa dig i hur mycket som helst.
Implementeringen är ju inom t.ex logistik, gatuplanering mm.
Du kan ju börja läsa lite här så får du en basal kunskap om det.
http://www.tutorialspoint.com/graph_theory/index.htm
En bok om algoritmer på väldigt hög teoretisk nivå som sig bör är:
The Algorithm Design Manual av Steven S. Skiena
Finns att hämta ner gratis på nätet som pdf såg jag vilket är väldigt trevligt.
739 sidor råfakta och tar upp allt det du frågat om på djupet.
Räkna med 6 månader till ett års studerande av den, långt mer om du försöker skriva program som behandlar varje område den täcker, men efter du gått igenom den vet du rätt väl vilka algoritmer du behöver använda och varför om du stöter på problem och har efter detta en gedigen grund att stå på.
En annan bok jag kan rekommendera är:
Fundamentals of Computer Programming With C#
av Nakov (m.fl)
Den tar upp allt det du frågar om och mycket mer och ger kodexempel.
Förvisso är den skriven för C# men kan du C lär du dig mycket fort C#.
C# är ett objektorienterat språk men är enklare än C++ imho.
I boken har du även en mängd övningar du kan göra med hintar och lösningsförslag finns att ladda hem. Tar upp de områden du undrar över i vissa fall skriver de egna lösningar för att belysa hur grundidén ser ut för att senare övergå till de implementerade lösningar som finns i existerande bibliotek.
Även den finns gratis att ladda ner på nätet.
Edit: Ett litet tips jag kan ge dig är att lär dig en databas som mysql i alla fall på den mest elementära nivån. Sedan gör du en liten enkel databas, behöver inte vara något märkvärdigt två-tre kolumner, lösningsbeskrivning, språk och en med koden som innehåller en beskrivning över smarta kodlösningar du hittat. Ett interface till databasen för windows i C#, VB, C++ eller något annat programspråk skriver du ihop på mindre än 5-10 minuter.
Då har du all din kod samlat på ett ställe och behöver inte leta ihjäl dig över var du nu hade skrivit den smarta lösningen någonstans och på vilken dator/hårddisk du sparat den på.