It's hard to imagine actually needing to implement a heap. Standard libraries for pretty much any language will provide one, almost certainly superior in quality to any handroll. And yes, I agree it's best to go this route and not shy away from concepts just because they may be new to you. A heap is a useful abstraction; embracing it will simplify your program (and your reasoning about it) in the long run.
+1.
The actual usage of advanced data structures, particularly in java, are abstracted among a set of collection classes. They're all convertible between one another and use almost the exact same syntax. I think python does something similar. When at all possible, use standard libraries!
As for the timing- From a conceptual point of view, it might be better to implement equitable discrete timing. That is, all actions take 1 turn and every monster (and player) takes 1 turn.
Then you just take 1 turn for the player, iterate through your monsters and give them each a turn to do something, then poll the player for an action. If you REALLY want 'haste' or 'slow' or timing effects, you can apply that in the update function of a given entity-- add an extra update call or skip every other update call respectively. Missiles can similarly be simplified by describing how many tiles they cover per turn.
Additionally... you can just run updates for each monster and log each tile that is interacted with- you can easily track collisions (esp if you store positions prior to update) in a computationally minimal way.
Some people like to get into physical simulations and initiative timings and what not, but you really don't need to mess with that. The player will rarely experience the work you put into that. A turn-based game, strictly speaking, doesn't ever need to use the timer in the logic component of a game-loop.
Bind your game logic to the User-Interface. What information is relevant in the UI is all the player should care about. Similarly, it's all the coder should bother implementing. If your work doesn't reflect onto the UI in a way that informs the player to make decisions, then whatever you're doing is irrelevant.