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.
André de Freitas SmairaHenrique Musseli CezarJosé 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.
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“.
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.
#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);
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.
/* 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;
/* 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);