\documentclass[11pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[brazil]{babel}
\usepackage{pifont}
\setlength{\textheight}{8.5in}
\setlength{\textwidth}{6.5in}
\setlength{\evensidemargin}{0pt}
\setlength{\oddsidemargin}{0pt}
\setlength{\topmargin}{-30pt}
\input{epsf}

\begin{document}
\noindent
{\footnotesize {\sc MAC--IME--USP}} \hfill {\footnotesize {\sc Carlos Eduardo Ferreira}}

\vspace{-1mm}
\hfill {\footnotesize {\sc Sala 297A Tel.: 818 6140}}

\vspace{-1mm}
\hfill {\footnotesize {\sc e-mail} cef@ime.usp.br}

\vspace{1cm}

\begin{center}
{\large\bf MAC 323 -- Estruturas de Dados}
\end{center}

\begin{center}
Terceira Lista de Exerc\'\i cios (30 pontos) -- Entrega: 3 de abril
\end{center}

\begin{enumerate}
\item (6+6 pontos) \\
a. Escreva um método {\tt Quebra} da classe lista duplamente ligada circular com cabeça
de lista, que recebe uma célula Q da lista e devolve uma lista duplamente ligada circular
com cabeça de lista com os elementos a partir de Q, como mostrado na figura
abaixo.  
$$ \epsffile{l3f1.eps} $$

b. Fa\c ca o mesmo exerc\'\i cio, considerando uma lista circular
ligada com cabe\c ca de lista. 

\item (4 pontos) \\
Escreva um algoritmo que recebe uma lista linear duplamente ligada e inverte
essa lista, alterando somente os campos dos apontadores e sem usar estruturas
auxiliares.  

\item (2+6+4+8 pontos) \\
Considere a implementa\c c\~ao de matrizes esparsas vista em sala de aula. \\
a. Escreva um método que imprime a 
matriz no formato convencional (por linha, completando os zeros). \\
b. Escreva um método que recebe uma matriz esparsa $B$
e devolve a soma $A + B$. \\
c. Escreva um método que devolve a 
transposta da matriz. \\
d. Escreva uma rotina que recebe dois \'\i ndices $i$ e $j$ e 
troca os elementos da linha $i$ com os da linha $j$. Tome cuidado para que, 
ap\'os a troca, as listas circulares das colunas continuem ordenadas por linha. 

\end{enumerate}
\end{document}
