

Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Implementação da biblioteca de matriz esparsa
Tipologia: Notas de estudo
1 / 2
Esta página não é visível na pré-visualização
Não perca as partes importantes!


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]); }