As some of you may know already, I've been trying to re-teach myself through the data structures component of C++. I'm currently in the chapter of 'Pointers' and eventually want to make my way through finish learning hash-tables/trees/sort algorithms. Could someone give me a sort of "First learn this, then this, then that, and then this" guide? I'm currently going through the chapters sequentially in my book but was wondering if anyone had any better suggestions?

I'm also trying to get all this done by mid next week. I can put in as much time as possible everyday and so the hours I have per day is not necessarily a concern. Please help me out! I want to be a great coder someday :)

Thank you!

Recommended Answers

All 7 Replies

I don't know if this will help you, but check out thenewboston tutorials.
thenewboston.org

This is a poorly made list, but I was (am) in a hurry.
0.a. Arrays
0.b. Pointers as arrays
0.c. Pointers to Pointers
0.d. Pointers to Pointers as Arrays of Arrays
(I learned Pointers by using Iceman's C rewrites of Denthor's VGA trainers.)
1. Stacks as arrays
2. Double-Ended Queues (Deques) as arrays
3.a. Single-Linked Lists in Java
3.b. Single-Linked Lists in C++
3.c. Single-Linked Lists in C
4.a. Double-Linked Lists in Java
4.b. Double-Linked Lists in C++
4.c. Double-Linked Lists in C
4.d. Double-Linked Lists as Stacks
4.e. Double-Linked Lists as Deques
6. Searching in Linked Lists
5.a. Trees
5.b. Walking Trees
6.a. Graphs / Networks
6.b. Walking Graphs (Breadth first, Depth first, A*)
7. Binary Search Trees
8. Hashing functions
9. Hash Tables

This is a poorly made list, but I was (am) in a hurry.
0.a. Arrays
0.b. Pointers as arrays
0.c. Pointers to Pointers
0.d. Pointers to Pointers as Arrays of Arrays
(I learned Pointers by using Iceman's C rewrites of Denthor's VGA trainers.)
1. Stacks as arrays
2. Double-Ended Queues (Deques) as arrays
3.a. Single-Linked Lists in Java
3.b. Single-Linked Lists in C++
3.c. Single-Linked Lists in C
4.a. Double-Linked Lists in Java
4.b. Double-Linked Lists in C++
4.c. Double-Linked Lists in C
4.d. Double-Linked Lists as Stacks
4.e. Double-Linked Lists as Deques
6. Searching in Linked Lists
5.a. Trees
5.b. Walking Trees
6.a. Graphs / Networks
6.b. Walking Graphs (Breadth first, Depth first, A*)
7. Binary Search Trees
8. Hashing functions
9. Hash Tables

The book that I'm going through doesn't really go over pointers to pointers and so I'm not sure exactly how I would learn that. What I'm REALLY concerned about are the core data structures required for Software Developers. I have an interview set-up for next Thursday and would like to learn/practice the core concepts they ask, which primarily include (but not restricted to): algorithms, binary search trees, hash tables/functions, Big-O-Notations, and linked lists. My book goes over all of these except for hash tables/functions. Where can I learn more about hash tables/functions and what are the pre-requisites for learning these? I'm coding in C++ by the way.

Thanks!

http://en.wikipedia.org/wiki/Hashing_function

A good hash function to get started learning is the Java string hashing function.
http://www.ibm.com/developerworks/java/library/j-jtp05273/index.html
Effectively, it's
Start with 1.
While there are more items
Multiply current hash by 31.
Add the next item.
Loop

Multiplies by 31 can be shortened into shift left by 5, subtract original.

After that try CRC
http://en.wikipedia.org/wiki/Computation_of_CRC

Then get into the good stuff.
http://en.wikipedia.org/wiki/HMAC
http://en.wikipedia.org/wiki/MD5
http://en.wikipedia.org/wiki/SHA-1
http://en.wikipedia.org/wiki/SHA-2

This is not an exhaustive list.

Also, you need to get into multiple thread/process programs.
This leads to fun things, in order of fun:
1. Creating Processes (briefly)
2. Threads (and getting values back from threads)
3. Mutexes
4. Semaphores
5. Thread-safe functions
6. Rewriting algorithms as multi-threaded
7. Processes and shared memory
8. Pipes
9. Race Conditions

Happy^H^H^H^H^H Sane Coding.

Thank you all so much for the helpful links/information! I really do appreciate everyone's input. Another reason why Daniweb is such a great community.

When you get to threadding and that area consider looking at boost, its a c++ library that provides os independant threadding and control structures( support for, windows, and *nix, i think more but i havent looked extensively ) .It is supported on may architectures from desktop (x86/64) to arm-cortexA8 and power-pc and various other processors so knowing it may come in handy if you ever end up in an embedded / specialist system development role. Altough some companies use thier own in house OS abstraction functions.

Plus the best piece of advice i can offer is google,... google things and get comfortable reading online documentation, pick a subject, say mutexes, and read documentation about them from lots of providers: windows, Qt, boost, posix ( largely used on linux ). You will see allot in common but get used to how different people present the data and getting used to being able to quickly find the information. No programmer can know everything they will need to do so parsing documentation becomes a very important skill.

One other good practise at all stages of your carear is to try to design things as best you can up front withut touching/writing any code, then impliment your design, and afterwards take time to reflect on just how close your design of the classses / modules was the the implimentation. See what things you didnt expect , where you got caught out or whatever and also try to spot areas where a common class / function could be used to reduce your work in your next project. As you progress and learn about things like polymorphism, templates, operator overloading and other more advanced tasty c++ goodies could have made life easier for you.

I hope some of this at least can be helpful to you.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.