Verification of Quantum Programs and Algorithms