What is the difference between structural and functional testing?

Structural testing is a "white box" testing and it is based on the algorithm or code.
Functional testing is a "black box" (behavioral) testing where the tester verifies the functional specification.