1. A method of programming a nonvolatile memory cell, comprising: providing a nonvolatile memory cell comprising a diode in series with at least one metal oxide; applying a first forward bias to change a resistivity state of the metal oxide from a first state to a second state; applying a second forward bias to change a resistivity state of the metal oxide from a second state to a third state; and applying a third forward bias to change a resistivity state of the metal oxide from a third state to a fourth state; wherein the fourth resistivity state is higher than the third resistivity state, the third resistivity state is lower than the second resistivity state, and the second resistivity state is lower than the first resistivity state.