You are on page 1of 45

Estruturas de Dados

Marcelo B. Tenorio

Estrutura de Dados - IED-001

Contedo

Introduo Listas lineares Recursividade Listas encadeadas Listas generalizadas

Espalhamento
Estrutura de Dados - IED-001 2

Introduo

Abstrao de Dados Objetivos das Estruturas de Dados

Estrutura de Dados - IED-001

Listas lineares

Fundamentos Tipos

Pilha Fila

Estrutura de Dados - IED-001

Pilha

Tipo de lista linear em que todas as operaes de insero e remoo so realizadas numa mesma extremidade, denominada topo. LIFO (Last-in / First-out)

Ilustrao
Estrutura de Dados - IED-001 5

Pilha

Aplicaes

Anlise de expresses e sintaxe

Compiladores

Calculadoras

Notao Polonesa (pre, in e posfixa)

Estrutura de Dados - IED-001

Pilha

3 operaes bsicas:

Consulta: acessa o elemento posicionado no topo; Empilha: insere um novo elemento no topo; Desempilha: remove um elemento do topo.

3 operaes essenciais:

Inicializa: inicializa a pilha no estado vazia; EstaVazia: verifica se a pilha est vazia; EstaCheia: verifica se a pilha est cheia;
Estrutura de Dados - IED-001 7

Implementao de Pilha

Organizao dos Dados Inicializao Verificando limites

Obtendo o elemento do topo


Empilhando um elemento

Desempilhando um elemento
Estrutura de Dados - IED-001 8

Fila

Uma fila um tipo de lista linear em que as inseres so realizadas num extremo (fim), ficando as remoes restritas ao outro (incio). FIFO (First-In / First-Out)

Ilustrao
Estrutura de Dados - IED-001 9

Fila

Queue = Fila 2 operaes bsicas:


Enfileira Desenfileira

Aplicaes

Estrutura de Dados - IED-001

10

Implementao de Fila

Organizao dos dados Inicializao Verificando limites Enfileirando um elemento

Desenfileirando um elemento

Estrutura de Dados - IED-001

11

Recursividade

Algoritmo recursivo: Para resolver um problema divide-o em subproblemas mais simples, cujas solues requerem a aplicao dele mesmo.

Estrutura de Dados - IED-001

12

Recursividade

Soluo trivial: dada por definio; isto , no necessita da recurso para ser obtida. Esta parte do problema resolvida pelo conjunto de comandos C. Soluo geral: parte do problema que em essncia igual ao problema original, sendo porm menor. A soluo, neste caso, pode ser obtida por uma chamada recursiva.
Estrutura de Dados - IED-001 13

Recursividade

Exemplo: Fatorial

{ dada por definio } Soluo trivial: 0! = 1; { requer aplicao da rotina para (n-1)! } Soluo geral: n! = n * (n-1)!
Estrutura de Dados - IED-001 14

Recursividade
Fatorial: Soluo recursiva

Estrutura de Dados - IED-001

15

Recursividade
Fatorial: Soluo iterativa

Estrutura de Dados - IED-001

16

Recursividade - Ilustrao
0 1 2 3 4 4 3 4 2 3 4 1 2 3 4

fat(4)

fat(3)

fat(2)

fat(1)

fat(0)

Estrutura de Dados - IED-001

17

Alocao esttica de memria

Vetores: na declarao da varivel que se define o tamanho que a mesma ir ocupar na memria e este valor no pode ser alterado em tempo de execuo. Vantagem

Agilidade no acesso aos valores. (ndices) Desperdcio de memria.


Estrutura de Dados - IED-001 18

Desvantagem

Alocao dinmica de memria

Pode-se alterar em tempo de execuo o espao ocupado pelas variveis na memria. Aplica-se quando no se sabe o quanto ser necessrio de memria para a soluo dos problemas.

Vantagem

Poupa memria. No h acesso aos valores por ndice.


Estrutura de Dados - IED-001 19

Desvantagens

Ponteiros
int main(void) { char x = 'Z', y = 'K'; char *px, *py; px = &x; py = &y; cout << Endereco de px: << &px << \n; cout << Endereco de py: << &py << \n; printf("Conteudo de px: %p \n", px); printf("Conteudo de py: %p \n", py); cout << Conteudo para onde px aponta: << *px << \n; cout << Conteudo para onde py aponta: << *py << \n; }
Estrutura de Dados - IED-001 20

Ponteiros

Estrutura de Dados - IED-001

21

Ponteiro para acessar Vetor


int main (void) { int vetor [2]; int *v; // ponteiro para inteiro v = vetor; v[0] = 123; v[1] = 456; cout << "vetor[0] = " << vetor[0] << endl; cout << "vetor[1] = " << vetor[1] << endl; }
Estrutura de Dados - IED-001 22

#define MAX 10 int main (void){ int vetor [MAX], i, *v; cout << "Digite um valor para ser gravado no\n"; cout << "indice\tEndereco de Memoria\n"; for (i=0; i<MAX; i++) { printf ("[%i]\t%p\t\t-> ", i, (v+i)); cin >> vetor[i]; } v = &vetor[0]; system ("cls"); cout << "Os valores gravados no vetor foram:\n"; for (i=0; i<MAX; i++) { printf("vetor[%i], ponteiro (%p) = %i\n", i, (v+i), *(v+i)); } Estrutura de Dados - IED-001 system ("pause"); }

Ponteiro para acessar Vetor

23

Listas encadeadas

Lista linear X Lista encadeada

Endereamento de memria

Ponteiros

Estrutura de Dados - IED-001

24

Listas encadeadas - Fila

Organizao dos dados Inserindo um elemento

Removendo um elemento
Principal (main)

Estrutura de Dados - IED-001

25

Listas generalizadas

rvores como lista generalizada


a
d

l
Estrutura de Dados - IED-001

m
26

Lista generalizada - rvore


Coleo finita de ns Caractersticas:

Raiz

a c

Subrvore
h l m

Grau: quantidade de subrvores


O n a tem grau 3. O n d tem grau 2.


Estrutura de Dados - IED-001 27

Lista generalizada - rvore

N de grau 0 uma folha. Ns Pai e filhos.


Filhos do n b so: e, f e g O n h o pai de l e m

Altura de uma rvore


O mximo dos nveis de todos os seus ns. Altura desta rvore exemplo: 4

Estrutura de Dados - IED-001

28

rvore Binria
T e

Estrutura de Dados - IED-001

29

rvore Binria (Estrutura)


struct no { no *esq; int valor; no *dir; }; main() { no *T = NULL; }

Estrutura de Dados - IED-001

30

rvore Binria - Inserir


void insere(no **T, int X) { if (*T == NULL) { *T = new(no); (*T)->valor = X; (*T)->esq = NULL; (*T)->dir = NULL; } else if (X < (*T)->valor) insere(&(*T)->esq, X); else insere(&(*T)->dir, X); Estrutura de Dados - IED-001 }

31

rvore Binria - Procurar


no *busca(no *T, int X) { if (T == NULL) return NULL; else if (X == T->valor) return T; else if (X < T->valor) return busca(T->esq, X); else return busca(T->dir, X); }

Estrutura de Dados - IED-001

32

rvore Binria Retornar o maior


no *retornaMaior(no **T) { no *P; if ((*T)->dir == NULL) { P = *T; *T = (*T)->esq; return P; } else return retornaMaior(&(*T)->dir); }
Estrutura de Dados - IED-001

33

void remove(no **T, int X) { no *P;

rvore Binria Remover

if (*T == NULL) return; // elemento nao encontrado if (X == (*T)->valor) { // elemento encontrado P = *T; if ((*T)->esq == NULL) *T = (*T)->dir; // nao tem filho esquerdo else if ((*T)->dir == NULL) *T = (*T)->esq; // nao tem filho direito else { // tem ambos os filhos P = retornaMaior(&(*T)->esq); (*T)->valor = P->valor; } delete P; } else if (X < (*T)->valor) remove(&(*T)->esq, X); // procura na subarvore esquerda else remove(&(*T)->dir, X); // procura na subarvore direta }
Estrutura de Dados - IED-001 34

rvore Binria Exibir em ordem


void EmOrdem(no *T) { if (T != NULL) { EmOrdem(T->esq); cout << T->valor << ", "; EmOrdem(T->dir); } }
Estrutura de Dados - IED-001 35

rvore Binria Exibir em Pr Ordem


void PreOrdem(no *T) { if (T != NULL) { cout << T->valor << ", "; PreOrdem(T->esq); PreOrdem(T->dir); } }
Estrutura de Dados - IED-001 36

rvore Binria Exibir em Ps Ordem


void PosOrdem(no *T) { if (T != NULL) { PosOrdem(T->esq); PosOrdem(T->dir); cout << T->valor << ", "; } }
Estrutura de Dados - IED-001 37

Excluir todos os ns
void excluirArvore (no **T) { if (*T != NULL) { excluirArvore(&(*T)->esq); excluirArvore(&(*T)->dir); delete *T; *T = NULL; } }
Estrutura de Dados - IED-001 38

Espalhamento (disperso ou hashing)

Principal caracterstica:

Maior agilidade na recuperao do dado.

H uma funo que mapeia o valor a ser armazenado e a posio de armazenamento.

Funo hashing

Estrutura de Dados - IED-001

39

Espalhamento Reduo do espao de busca


Beatriz Denis Jos Sandra Ana Euardo Maria Paula

k = Maria

Beatriz Denis Jos Sandra


k = Maria f(k) = 2 Ana Euardo Maria

Paula
Estrutura de Dados - IED-001 40

Tabela de espalhamento
(ou tabela de disperso ou tabela hashing)

Funes de espalhamento

Resto da diviso inteira (ilustrao) Meio do Quadrado Mtodo da Dobra Mtodo da Multiplicao Hashing Universal

Estrutura de Dados - IED-001

41

Implementao - Espalhamento

Principal (main) Inicializao

Funo Hash
Inserir Recuperar
Estrutura de Dados - IED-001 42

Coliso
(espalhamento)

A coliso ocorre quando um valor deve ser armazenado numa posio j ocupada. Mtodos para tratamento:

Endereamento Aberto

Linear probing Quadrtic probing

Endereamento Fechado

Lista encadeada
Estrutura de Dados - IED-001 43

Implementao - Espalhamento
-

Tratamento de coliso linear

Tratamento de coliso quadrtico


Tratamento de coliso lista encadeada

Estrutura de Dados - IED-001

44

Referncias
PEREIRA, Silvio do Lago. Estruturas de Dados Fundamentais. Conceitos e Aplicaes. 11 Edio. So Paulo: rica, 2008. CORMEN, Thomas H.; LEISERSON, Charles E.; RIVEST, Ronald L.; STEIN, Clifford. Algoritmos: teoria e prtica. Rio de Janeiro: Elsevier, 2002. ZIVIANI, Nivio. Projeto de algoritmos : com implementaes em Pascal e C. 2 edio. So Paulo: Thomson Learning, 2007. PREISS, Bruno R. Estrutura de dados e algoritmos: padres de projetos orientados a objeto com Java.
Estrutura de Dados - IED-001 45

You might also like