Type
Preg = ^Reg;
Lista = Preg;
Reg = record
linha: 1..nl;
coluna: 1..nc;
valor: TipoElemento;
PL,PC: Preg; { pont p/ prox registro }
end;
vetorCol = array[1..nl] of Lista;
vetorLin = array[1..nc] of Lista; var L: vetorLin; C: vetorCol;
Como consequência desses operacões, alguns elementos podem deixar de ser nulos, enquanto que outros podem se tornar nulos.
Por exemplo, ao se somar -4 a coluna 5 do exemplo temos:

Esse exemplo ilustra que, quando um elemento a(i,j) deve ser eliminado, ele deve ser eliminado, de fato, de duas listas: L[i] e L[j]. O mesmo ocorre quando um elemento deve ser inserido. No algoritmo abaixo, essas operações são feitas por operações inserir e eliminar de matrizes esparsas.
Procedure Soma_col (Var L:vetorLin; Var C:vetorCol; col,lin,j: INTEGER, k: TipoElemento);
Var p: Lista;
begin
p := C[j];
for i := 1 to lin do
if p = nil then inserir(i,j,k,L,C,col,lin)
else
begin
if p^.linha <> i then { valor era nulo}
inserir(i,j,k,L,C,col,lin) {insere antes de p}
else
begin
p^.valor := p^.valor + k;
if p^.valor = 0 then
begin
p := p^.pl;
eliminar(i,j,L,C,col,lin);
end
else p := p^.pl;
end;
end;
end;
-> Fazer os algoritmos de inserir e eliminar
-> Re-fazer a definição do tipo para Matrizes esparsas de forma que ele fique adequado
para uma implementação de um TAD Matrizes esparsas. Sugestão: adicionar a definção. um registro que
armazene o vetor de linhas, o vetor de colunas (L e C), o número atual de linhas da
matriz, e o número atual de colunas da matriz. Re-fazer inserir, eliminar, e Soma_col
diante das novas modificações no tipo.
-> Extrair um TAD Matrizes esparsas. Não esquecer de definir operações para inicializar
o TAD, definindo número de linhas e colunas para a matriz.