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.