Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


c - matriz - esparsa, Notas de estudo de Engenharia Telemática

Implementação da biblioteca de matriz esparsa

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 30/11/2010

samuel-santos-22
samuel-santos-22 🇧🇷

4.6

(41)

262 documentos

1 / 2

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
1
Disciplina: Estrutura de Dados I
Professor: Alex Sandro C. Rego
MATRIZES ESPARSAS
Definição da Estrutura de Dados
// Numero maximo de nós da lista
#define MAX 10
// Definição do tipo do elemento da matriz esparsa
typedef int telem;
// Definicao do tipo “Matriz Esparsa”
typedef telem* tme[MAX];
Inicializar a matriz
void inicializa( tme m ) {
int i;
for (i=0; i<MAX; i++)
m[i] = NULL; // Inicializa todas as posições com NULL
}
Verificar se uma matriz esparsa está vazia
int vazia (tme m) {
int i;
for (i=0; i<MAX; i++)
if (m[i] != NULL)
return 0; // Matriz não vazia
return 1; // Matriz vazia
}
Verificar se uma matriz esparsa está cheia
int cheia (tme m) {
int i;
for (i=0; i<MAX; i++)
if (m[i] == NULL)
return 0; // Matriz não cheia
return 1; // Matriz cheia
}
Obter a quantidade de elementos ocupados da matriz esparsa
int tamanho( tlista lst) {
int i, cont=0;
for (i=0; i<MAX; i++)
if (m[i] != NULL)
cont++;
return cont;
}
Inserção de um elemento na matriz esparsa
int inserir (tme m, int pos, telem valor) {
if (pos<1 || pos>MAX)
return 0; // Erro - Inserção fora dos limites da matriz
if (m[pos-1] != NULL)
return 0; // Erro - posição já ocupada
pf2

Pré-visualização parcial do texto

Baixe c - matriz - esparsa e outras Notas de estudo em PDF para Engenharia Telemática, somente na Docsity!

Disciplina: Estrutura de Dados I

Professor: Alex Sandro C. Rego

MATRIZES ESPARSAS

Definição da Estrutura de Dados // Numero maximo de nós da lista #define MAX 10

// Definição do tipo do elemento da matriz esparsa typedef int telem;

// Definicao do tipo “Matriz Esparsa” typedef telem* tme[MAX];

Inicializar a matriz void inicializa( tme m ) { int i; for (i=0; i<MAX; i++) m[i] = NULL; // Inicializa todas as posições com NULL }

Verificar se uma matriz esparsa está vazia int vazia (tme m) { int i; for (i=0; i<MAX; i++) if (m[i] != NULL) return 0; // Matriz não vazia return 1; // Matriz vazia }

Verificar se uma matriz esparsa está cheia int cheia (tme m) { int i; for (i=0; i<MAX; i++) if (m[i] == NULL) return 0; // Matriz não cheia return 1; // Matriz cheia }

Obter a quantidade de elementos ocupados da matriz esparsa int tamanho( tlista lst) { int i, cont=0; for (i=0; i<MAX; i++) if (m[i] != NULL) cont++; return cont; }

Inserção de um elemento na matriz esparsa int inserir (tme m, int pos, telem valor) { if (pos<1 || pos>MAX) return 0; // Erro - Inserção fora dos limites da matriz

if (m[pos-1] != NULL) return 0; // Erro - posição já ocupada

// Aloca memória para o elemento que será inserido na matriz m[pos-1] = (telem*) malloc(sizeof(telem)); if (m[pos-1] == NULL) return 0; // Erro - memória insuficiente

*m[pos-1] = valor; return 1; // Inserção bem sucedida }

Remoção de um elemento da matriz esparsa int remover (tme m, int pos, telem *valor) { if (pos<1 || pos>MAX) return 0; // Erro - Remoção fora dos limites da matriz

if (m[pos-1] == NULL) return 0; // Erro - posição não ocupada

// Armazena uma cópia do elemento que será removido *valor = *m[pos-1];

// Libera a memória ocupada pelo dado removido free(m[pos-1]); m[pos-1] = NULL; return 1; // Remoção bem-sucedida }

Exibindo os elementos da matriz void imprimir (tme m) { int i; for (i=0; i<MAX; i++) if (m[i] != NULL) printf("%d\n", *m[i]); }