Both of these examples are commonly used because they both have their advantages and drawbacks, mainly on the programming side of things.
- Easy to program, positions can be stored in tile-coordinates as integers and/or in world coordinates.
- Easy for the player to understand
- Fairly easy math
- Very restricted in movement positions
- Diagonal movement is a pain to implement and takes much more processing time, depending on implementation ofc.
- Low path quality
- Extremely intuitive (aka click here and the "character" moves exactly there)
- More natural looking
- Very computationally heavy
- Often requires a pre-generated map and a separate navigation map with valid positions.
- Hard to implement
- Takes a large amount of RAM
- Many duplicate edges
Note that you can get around some, but not all, of the limitations of both of these methods. You can reduce the amount of stored and loaded edges in the free-movement situation at the expense of the perfection of the paths, or can even create a navigation grid rather than a mesh, saving having to store all possible paths. You can also improve the tile-based maps by post-processing them, making them look a little more natural.
Amit Patel, one of the users here on StackExchange has a website where he has many of these additions and optimizations in a tutorial/blog kind of style. One of the best for the question that you are asking is here: http://theory.stanford.edu/~amitp/GameProgramming/MapRepresentations.html