A table of contents is produced with the \tableofcontents command. You put the command right where you want the table of contents to go; LaTeX does the rest for you. Entries are taken from the Sectioning commands.
\tableofcontents produces a heading, but it does not automatically start a new page. If you want a new page after the table of contents, include a \newpage command after the \tableofcontents command.
There are similar commands \listoffigures and \listoftables for producing a list of figures and a list of tables, respectively. Everything works exactly the same as for the table of contents.
NOTE: Information for these tables and lists are placed in an auxiliary file and you may have to run latex twice to get it to come out correctly. If you want a any of these items to be generated, you can not have the \nofiles command in your document as that would suppress writing of the auxiliary files. See also