Learning the A* algorithm, right from beginning can be very confusing. If you haven't used/programmed similar algorithm. What helps to understand this kind of algorithms is to actually USE the algorithms, but do not program it our implement it, rather draw it with pen and paper. E.g. draw some points and connect these points with lines. Then add some numbers to the lines, they will be the distances or the actual costs, which are needed to travel from one node to the other. Then select a start node and a finish node. Try to find the shortest path between start and finish node. Write down the paths and your thought progress in a format like: Start at Node 1 go 25 to Node 2 and so until you reached your goal. Then think on strategies, e.g. on how to select the shortest path, a simple method would be to only use the shortest distance which is available, if you do so you may end up at the start or taking loops, then you may think of something like, i do not want to visit nodes again i have already visited and so on. Think of more different methods to improve your path, e.g. look a step a head and calculate the minimum distance for two steps. If you think you have found a good strategy to do so you have created some kind of heuristic.
Then try to implement the stuff you have created with the help of your favourite programming language, you should come close to the solution of the a* algorithms.
Learning by doing is always the best method but to know what you are doing, you should at least have a little knowledge about what you are doing.
Also as far as the different complex data types are concerned, they are basically derived from more simpler ones. E.g. a queue is a list where you always read the first element and store items at the end. A map is more or less something like a dictionary, where you have a key, e.g. a string and an attached value to the key. This value could be a string as well, if you may think in localization you could have one map for every language. In this case the key may be only a simple string e.g. BTN_FIGHT_TEXT and the value would then hold the string "Fight" for the english version... At least for this basic knowledge books are very good, because they explain this stuff in detail they also allow you to peak at them if you are uncertain. As far as the knowledge on the handling goes the best thing is to just use these data structures.