62
AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri

AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

  • Upload
    leduong

  • View
    221

  • Download
    0

Embed Size (px)

Citation preview

Page 1: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

AULA 14ESTRUTURA DE DADOS

Matriz esparsa

Norton T. Roman & Luciano A. Digiampietri

Page 2: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz

Uma matriz bidimensional é um conjunto deelementos (ou tabela) composta por m linhas e ncolunas.

- Em computação utilizamos matrizes pararepresentar diferentes tipos de dados (dadosnuméricos, imagens, etc.)

Page 3: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz

Uma matriz bidimensional é um conjunto deelementos (ou tabela) composta por m linhas e ncolunas.

- Em computação utilizamos matrizes pararepresentar diferentes tipos de dados (dadosnuméricos, imagens, etc.)

Page 4: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsa

É uma matriz na qual a grande maioria de seuselementos possui um valor padrão (por exemplozero) ou são nulos ou faltantes.

- Por exemplo, uma matriz que representa ocontorno de uma imagem em preto e branco- Seria um desperdício gastar m x n posições dememória sendo que apenas uma pequena parcelados elementos tem valor diferente de zero

Page 5: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsaÉ uma matriz na qual a grande maioria de seuselementos possui um valor padrão (por exemplozero) ou são nulos ou faltantes.

- Por exemplo, uma matriz que representa ocontorno de uma imagem em preto e branco- Seria um desperdício gastar m x n posições dememória sendo que apenas uma pequena parcelados elementos tem valor diferente de zero

Page 6: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsaÉ uma matriz na qual a grande maioria de seuselementos possui um valor padrão (por exemplozero) ou são nulos ou faltantes.

- Por exemplo, uma matriz que representa ocontorno de uma imagem em preto e branco

- Seria um desperdício gastar m x n posições dememória sendo que apenas uma pequena parcelados elementos tem valor diferente de zero

Page 7: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsaÉ uma matriz na qual a grande maioria de seuselementos possui um valor padrão (por exemplozero) ou são nulos ou faltantes.

- Por exemplo, uma matriz que representa ocontorno de uma imagem em preto e branco- Seria um desperdício gastar m x n posições dememória sendo que apenas uma pequena parcelados elementos tem valor diferente de zero

Page 8: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsa

Para evitar o desperdício de memória (eeventualmente de processamento) criamos umaestrutura específica para gerenciar matrizesesparsas.

- Só serão alocados elementos com valordiferente de zero e alguma estrutura adicional decontrole.

Page 9: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsa

Para evitar o desperdício de memória (eeventualmente de processamento) criamos umaestrutura específica para gerenciar matrizesesparsas.

- Só serão alocados elementos com valordiferente de zero e alguma estrutura adicional decontrole.

Page 10: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsa - implementação

Cada linha da matriz será representada por umalista ligada que só conterá elementos com valoresdiferentes de zero;Teremos um arranjo de listas ligadas.

Page 11: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsa - implementação

Cada linha da matriz será representada por umalista ligada que só conterá elementos com valoresdiferentes de zero;

Teremos um arranjo de listas ligadas.

Page 12: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsa - implementação

Cada linha da matriz será representada por umalista ligada que só conterá elementos com valoresdiferentes de zero;Teremos um arranjo de listas ligadas.

Page 13: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsa - implementação

Temos uma matriz com muitos zeros.

Page 14: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsa - implementação

Queremos armazenar apenas os valores diferentes de zero.

Page 15: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsa - implementação

Queremos armazenar apenas os valores diferentes de zero.

Page 16: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsa - implementação

Criaremos listas de elementos diferentes de zero.

Page 17: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Matriz esparsa - implementação

Cada elemento apontará para seu vizinho e saberá sua coluna.

Page 18: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Modelagem

#include <stdio.h>

#include <malloc.h>

typedef struct tempNo {

float valor;

int coluna;

struct tempNo* prox;

} NO;

typedef NO* PONT;

typedef struct {

PONT* A;

int linhas;

int colunas;

} MATRIZ;

Page 19: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Modelagem

#include <stdio.h>

#include <malloc.h>

typedef struct tempNo {

float valor;

int coluna;

struct tempNo* prox;

} NO;

typedef NO* PONT;

typedef struct {

PONT* A;

int linhas;

int colunas;

} MATRIZ;

Page 20: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Modelagem

#include <stdio.h>

#include <malloc.h>

typedef struct tempNo {

float valor;

int coluna;

struct tempNo* prox;

} NO;

typedef NO* PONT;

typedef struct {

PONT* A;

int linhas;

int colunas;

} MATRIZ;

Page 21: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Modelagem

#include <stdio.h>

#include <malloc.h>

typedef struct tempNo {

float valor;

int coluna;

struct tempNo* prox;

} NO;

typedef NO* PONT;

typedef struct {

PONT* A;

int linhas;

int colunas;

} MATRIZ;

Page 22: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Modelagem

Page 23: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Modelagem

Page 24: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Funções de gerenciamento

Implementaremos funções para:Inicializar a matriz (“new matriz[m][n]”)Atribuir um valor (matriz[x ][y ] = valor )Acessar valor (valor = matriz[x ][y ])

Page 25: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Inicialização

Para inicializar nossa matriz esparsa, nósprecisamos:

Acertar o valor dos campos linhas e colunas (istoé, a ordem da matriz passada pelo usuário).Precisamos também criar o arranjo de listasligadas e iniciar cada posição do arranjo com ovalor NULL (indicando que cada lista está vazia).

Page 26: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Inicialização

Para inicializar nossa matriz esparsa, nósprecisamos:

Acertar o valor dos campos linhas e colunas (istoé, a ordem da matriz passada pelo usuário).

Precisamos também criar o arranjo de listasligadas e iniciar cada posição do arranjo com ovalor NULL (indicando que cada lista está vazia).

Page 27: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Inicialização

Para inicializar nossa matriz esparsa, nósprecisamos:

Acertar o valor dos campos linhas e colunas (istoé, a ordem da matriz passada pelo usuário).Precisamos também criar o arranjo de listasligadas e iniciar cada posição do arranjo com ovalor NULL (indicando que cada lista está vazia).

Page 28: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Inicializaçãovoid inicializarMatriz(MATRIZ* m, int lin, int col) {

int i;

m->linhas = lin;

m->colunas = col;

m->A = (PONT*) malloc(lin*sizeof(PONT));

for (i=0;i<lin;i++) m->A[i] = NULL;

}

Page 29: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Inicializaçãovoid inicializarMatriz(MATRIZ* m, int lin, int col) {

int i;

m->linhas = lin;

m->colunas = col;

m->A = (PONT*) malloc(lin*sizeof(PONT));

for (i=0;i<lin;i++) m->A[i] = NULL;

}

Page 30: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Inicializaçãovoid inicializarMatriz(MATRIZ* m, int lin, int col) {

int i;

m->linhas = lin;

m->colunas = col;

m->A = (PONT*) malloc(lin*sizeof(PONT));

for (i=0;i<lin;i++) m->A[i] = NULL;

}

Page 31: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Inicializaçãovoid inicializarMatriz(MATRIZ* m, int lin, int col) {

int i;

m->linhas = lin;

m->colunas = col;

m->A = (PONT*) malloc(lin*sizeof(PONT));

for (i=0;i<lin;i++) m->A[i] = NULL;

}

Page 32: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Inicializaçãovoid inicializarMatriz(MATRIZ* m, int lin, int col) {

int i;

m->linhas = lin;

m->colunas = col;

m->A = (PONT*) malloc(lin*sizeof(PONT));

for (i=0;i<lin;i++) m->A[i] = NULL;

}

Page 33: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valorO usuário nos passa: o endereço da matriz, a linha,a coluna e o valor a ser colocado na respectivaposição da matriz:

Se não houver nenhum nó na posição e o valor for diferentede zero temos que inserir um novo nó na respectiva listaligada.Se já existir um nó na posição e o valor for diferente de zerotemos que substituir o valor do nó.Se já existir um nó na posição e o valor for igual a zerotemos que excluir o nó de sua lista.

Page 34: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valorO usuário nos passa: o endereço da matriz, a linha,a coluna e o valor a ser colocado na respectivaposição da matriz:

Se não houver nenhum nó na posição e o valor for diferentede zero temos que inserir um novo nó na respectiva listaligada.

Se já existir um nó na posição e o valor for diferente de zerotemos que substituir o valor do nó.Se já existir um nó na posição e o valor for igual a zerotemos que excluir o nó de sua lista.

Page 35: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valorO usuário nos passa: o endereço da matriz, a linha,a coluna e o valor a ser colocado na respectivaposição da matriz:

Se não houver nenhum nó na posição e o valor for diferentede zero temos que inserir um novo nó na respectiva listaligada.Se já existir um nó na posição e o valor for diferente de zerotemos que substituir o valor do nó.

Se já existir um nó na posição e o valor for igual a zerotemos que excluir o nó de sua lista.

Page 36: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valorO usuário nos passa: o endereço da matriz, a linha,a coluna e o valor a ser colocado na respectivaposição da matriz:

Se não houver nenhum nó na posição e o valor for diferentede zero temos que inserir um novo nó na respectiva listaligada.Se já existir um nó na posição e o valor for diferente de zerotemos que substituir o valor do nó.Se já existir um nó na posição e o valor for igual a zerotemos que excluir o nó de sua lista.

Page 37: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - buscabool AtribuiMatriz(MATRIZ* m,int lin, int col,

float val) {

if (lin<0 || lin >= m->linhas ||

col<0 || col >= m->colunas) return false;

PONT ant = NULL;

PONT atual = m->A[lin];

while (atual != NULL && atual->coluna<col) {

ant = atual;

atual = atual->prox;

}

Page 38: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - buscabool AtribuiMatriz(MATRIZ* m,int lin, int col,

float val) {

if (lin<0 || lin >= m->linhas ||

col<0 || col >= m->colunas) return false;

PONT ant = NULL;

PONT atual = m->A[lin];

while (atual != NULL && atual->coluna<col) {

ant = atual;

atual = atual->prox;

}

Page 39: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - buscabool AtribuiMatriz(MATRIZ* m,int lin, int col,

float val) {

if (lin<0 || lin >= m->linhas ||

col<0 || col >= m->colunas) return false;

PONT ant = NULL;

PONT atual = m->A[lin];

while (atual != NULL && atual->coluna<col) {

ant = atual;

atual = atual->prox;

}

Page 40: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - buscabool AtribuiMatriz(MATRIZ* m,int lin, int col,

float val) {

if (lin<0 || lin >= m->linhas ||

col<0 || col >= m->colunas) return false;

PONT ant = NULL;

PONT atual = m->A[lin];

while (atual != NULL && atual->coluna<col) {

ant = atual;

atual = atual->prox;

}

Page 41: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - nó existe

if (atual != NULL && atual->coluna == col) {

if (val == 0) {

if (ant==NULL) m->A[lin] = atual->prox;

else ant->prox = atual->prox;

free(atual);

}

else atual->valor = val;

}

Page 42: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - nó existe

if (atual != NULL && atual->coluna == col) {

if (val == 0) {

if (ant==NULL) m->A[lin] = atual->prox;

else ant->prox = atual->prox;

free(atual);

}

else atual->valor = val;

}

Page 43: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - nó existe

if (atual != NULL && atual->coluna == col) {

if (val == 0) {

if (ant==NULL) m->A[lin] = atual->prox;

else ant->prox = atual->prox;

free(atual);

}

else atual->valor = val;

}

Page 44: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - nó existe

if (atual != NULL && atual->coluna == col) {

if (val == 0) {

if (ant==NULL) m->A[lin] = atual->prox;

else ant->prox = atual->prox;

free(atual);

}

else atual->valor = val;

}

Page 45: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - nó existe

if (atual != NULL && atual->coluna == col) {

if (val == 0) {

if (ant==NULL) m->A[lin] = atual->prox;

else ant->prox = atual->prox;

free(atual);

}

else atual->valor = val;

}

Page 46: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - nó existe

if (atual != NULL && atual->coluna == col) {

if (val == 0) {

if (ant==NULL) m->A[lin] = atual->prox;

else ant->prox = atual->prox;

free(atual);

}

else atual->valor = val;

}

Page 47: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - nó não existeelse if (val != 0) {

PONT novo = (PONT) malloc(sizeof(NO));

novo->coluna = col;

novo->valor = val;

novo->prox = atual;

if (ant == NULL) m->A[lin] = novo;

else ant->prox = novo;

}

return true;

}

Page 48: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - nó não existeelse if (val != 0) {

PONT novo = (PONT) malloc(sizeof(NO));

novo->coluna = col;

novo->valor = val;

novo->prox = atual;

if (ant == NULL) m->A[lin] = novo;

else ant->prox = novo;

}

return true;

}

Page 49: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - nó não existeelse if (val != 0) {

PONT novo = (PONT) malloc(sizeof(NO));

novo->coluna = col;

novo->valor = val;

novo->prox = atual;

if (ant == NULL) m->A[lin] = novo;

else ant->prox = novo;

}

return true;

}

Page 50: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - nó não existeelse if (val != 0) {

PONT novo = (PONT) malloc(sizeof(NO));

novo->coluna = col;

novo->valor = val;

novo->prox = atual;

if (ant == NULL) m->A[lin] = novo;

else ant->prox = novo;

}

return true;

}

Page 51: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - nó não existeelse if (val != 0) {

PONT novo = (PONT) malloc(sizeof(NO));

novo->coluna = col;

novo->valor = val;

novo->prox = atual;

if (ant == NULL) m->A[lin] = novo;

else ant->prox = novo;

}

return true;

}

Page 52: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - nó não existeelse if (val != 0) {

PONT novo = (PONT) malloc(sizeof(NO));

novo->coluna = col;

novo->valor = val;

novo->prox = atual;

if (ant == NULL) m->A[lin] = novo;

else ant->prox = novo;

}

return true;

}

Page 53: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Atribuir valor - nó não existeelse if (val != 0) {

PONT novo = (PONT) malloc(sizeof(NO));

novo->coluna = col;

novo->valor = val;

novo->prox = atual;

if (ant == NULL) m->A[lin] = novo;

else ant->prox = novo;

}

return true;

}

Page 54: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Acessar valor

O usuário nos passa: o endereço da matriz, a linhae a coluna e a função deve retornar o valor darespectiva posição:

Se não houver um nó na posição então retornar zero;Caso contrário, retornar o valor do nó.

Page 55: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Acessar valor

O usuário nos passa: o endereço da matriz, a linhae a coluna e a função deve retornar o valor darespectiva posição:

Se não houver um nó na posição então retornar zero;

Caso contrário, retornar o valor do nó.

Page 56: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Acessar valor

O usuário nos passa: o endereço da matriz, a linhae a coluna e a função deve retornar o valor darespectiva posição:

Se não houver um nó na posição então retornar zero;Caso contrário, retornar o valor do nó.

Page 57: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Acessar valorfloat ValorMatriz(MATRIZ* m, int lin, int col) {

if (lin<0 || lin>=m->linhas || col<0 ||

col >= m->colunas) return 0;

PONT atual = m->A[lin];

while (atual != NULL && atual->coluna < col)

atual = atual->prox;

if (atual !=NULL && atual->coluna == col)

return atual->valor;

return 0;

}

Page 58: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Acessar valorfloat ValorMatriz(MATRIZ* m, int lin, int col) {

if (lin<0 || lin>=m->linhas || col<0 ||

col >= m->colunas) return 0;

PONT atual = m->A[lin];

while (atual != NULL && atual->coluna < col)

atual = atual->prox;

if (atual !=NULL && atual->coluna == col)

return atual->valor;

return 0;

}

Page 59: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Acessar valorfloat ValorMatriz(MATRIZ* m, int lin, int col) {

if (lin<0 || lin>=m->linhas || col<0 ||

col >= m->colunas) return 0;

PONT atual = m->A[lin];

while (atual != NULL && atual->coluna < col)

atual = atual->prox;

if (atual !=NULL && atual->coluna == col)

return atual->valor;

return 0;

}

Page 60: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Acessar valorfloat ValorMatriz(MATRIZ* m, int lin, int col) {

if (lin<0 || lin>=m->linhas || col<0 ||

col >= m->colunas) return 0;

PONT atual = m->A[lin];

while (atual != NULL && atual->coluna < col)

atual = atual->prox;

if (atual !=NULL && atual->coluna == col)

return atual->valor;

return 0;

}

Page 61: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

Acessar valorfloat ValorMatriz(MATRIZ* m, int lin, int col) {

if (lin<0 || lin>=m->linhas || col<0 ||

col >= m->colunas) return 0;

PONT atual = m->A[lin];

while (atual != NULL && atual->coluna < col)

atual = atual->prox;

if (atual !=NULL && atual->coluna == col)

return atual->valor;

return 0;

}

Page 62: AULA 14 ESTRUTURA DE DADOS - Matriz esparsa · AULA 14 ESTRUTURA DE DADOS Matriz esparsa Norton T. Roman & Luciano A. Digiampietri. Matriz Umamatriz bidimensionalé um conjunto de

AULA 14ESTRUTURA DE DADOS

Matriz esparsa

Norton T. Roman & Luciano A. Digiampietri