André de Freitas Smaira Henrique Musseli Cezar José T. da Silva Junior.

9
André de Freitas Smaira Henrique Musseli Cezar José T. da Silva Junior

Transcript of André de Freitas Smaira Henrique Musseli Cezar José T. da Silva Junior.

Page 1: André de Freitas Smaira Henrique Musseli Cezar José T. da Silva Junior.

André de Freitas SmairaHenrique Musseli CezarJosé T. da Silva Junior

Page 2: André de Freitas Smaira Henrique Musseli Cezar José T. da Silva Junior.

Para introduzir o conceito de mapas precisamos abordar inicialmente o conceito de coleções.

Uma coleção é uma estrutura de dados que permite armazenar vários objetos;

A coleção é, em si, um objeto também:- Um objeto de agregação.

As operações que podem ser feitas em coleções variam mas normalmente incluem:◦ - Adição de elementos;◦ - Remoção de elementos;◦ - Acesso aos elementos;◦ - Pesquisa de elementos;◦ - Indagar sobre atributos.

Page 3: André de Freitas Smaira Henrique Musseli Cezar José T. da Silva Junior.

Um mapa armazena pares (chave, valor) chamados itens:◦ - Chaves e valores podem ser de qualquer tipo;◦ - Elemento e Valor são sinônimos.

A chave é utilizada para achar um elemento rapidamente:- Estruturas especiais são usadas para que a pesquisa seja

rápida.

Diz-se portanto que um mapa "mapeia chaves para valores“.

O Mapa pode ser mantido ordenado ou não (com respeito às chaves).

Normalmente implementada como "Tabela Hash" ou "Árvore“.

Page 4: André de Freitas Smaira Henrique Musseli Cezar José T. da Silva Junior.

As operações mais importantes de uma coleção do tipo Conjunto são:◦ - Adição de elementos:

Adicionar um item no mapa (fornecendo chave e valor).◦ - Remoção de elementos:

Remover um item com chave dada.◦ - Acesso aos elementos:

Iterar sobre os itens.◦ - Pesquisa de elementos:

Descobrir se um elemento com chave dada está na coleção.◦ - Indagar sobre atributos:

Obter o número de elementos.

Observe que o acesso à coleção sempre é feita conhecendo a chave.

Page 5: André de Freitas Smaira Henrique Musseli Cezar José T. da Silva Junior.

#include "arvbin.h"

/* Estruturas */ typedef struct Mapa{ Tree *T; }mapa;

/* Funções */ mapa *definemap(void); tipo_elem *searchm(char *id, mapa *M); bool insertm(tipo_elem e, mapa *M); bool replacem(tipo_elem e, mapa *M); tipo_elem *removem(char *id, mapa *M);

void deleteMap(mapa *M); void printM(mapa *M);

Page 6: André de Freitas Smaira Henrique Musseli Cezar José T. da Silva Junior.

Para o desenvolvimento desse mapa, foi utilizada uma Árvore Binária de Busca (ABB).

A árvore binária (árvore de busca binária ou árvore de pesquisa binária) é uma estrutura de dados onde todos os nós são valores, todos nós à esquerda contêm uma sub-árvore com as chaves menores ao nó raiz da sub-árvore e todos os nós da sub-árvore à direita contêm somente chaves maiores ao nó raiz. (Esta é a forma padrão, podendo serem invertidas as sub-árvores, dependendo da aplicação). Os valores são relevantes na árvore de busca binária. O objetivo desta árvore é estruturar os dados de forma flexível, permitindo pesquisa binária.

Page 7: André de Freitas Smaira Henrique Musseli Cezar José T. da Silva Junior.

/* Estruturas */ typedef struct elem{ char key[30]; char *str/*, key[30]*/; }tipo_elem;

typedef struct no{ struct no *lig_parent, *lig_leftChild, *lig_rightChild; tipo_elem content; }node;

typedef struct arvore{ node *root; int nelem; }Tree;

Page 8: André de Freitas Smaira Henrique Musseli Cezar José T. da Silva Junior.

/* Funções */ Tree *define(void); int sizeA(Tree *T); int isEmpty(Tree *T); node *root(Tree *T); node *parent(node *c); int isInternal(node *c); int isExternal(node *c); int isRoot(node *c); node *leftChild(node *c); node *rightChild(node *c); node *sibiling(node *c); void swap(node *c, node *d); void replace(node *c, tipo_elem e); tipo_elem elem(node *v); node *search(Tree *T, char *k, node *v); node *insert(Tree *T, tipo_elem x); tipo_elem removenode(Tree *T, char *k); node *expandExternal(node *v); node *removeAboveExternal(Tree *T, node *v); node *encontreSubstituto(node *v); void printA(Tree *A, node *n); void deleteArv(Tree *T, node *c);

Page 9: André de Freitas Smaira Henrique Musseli Cezar José T. da Silva Junior.