Académique Documents
Professionnel Documents
Culture Documents
Algoritmos e Estrutura
de Dados II
Professor: Marcelo Santos Linder
E-mail: marcelo.linder@univasf.edu.br
Ementa
Árvores B, grafos e tabelas de hash:
alocação estática e dinâmica e algoritmos
de inserção, remoção e consulta.
Armazenamento em disco com uso de
índices. Métodos de classificação.
Introdução à complexidade de algoritmos,
com análise de complexidade no tempo e
no espaço.
2
Objetivos Gerais
3
Objetivos Específicos
Apresentar os diversos tipos de modelos abstratos ou
estruturas de dados e seus algoritmos;
Entender as estruturas de dados como modelos
matemáticos cuja escolha é dependente do contexto no
qual ela será utilizada;
Apresentar o conceito da estrutura de dados árvore e
as operações de inserção, remoção e busca;
Apresentar o conceito da estrutura de dados grafo e as
operações de inserção, remoção e busca;
Apresentar a estrutura Tabela de hash e as operações
de alocação estática e dinâmica juntamente com as
operações de inserção, remoção e consulta.
Apresentar a forma de armazenamento em disco por
meio do uso de índices.
Apresentar os métodos de classificação na sua relação
4 com as operações de busca, ou seja, o rearranjo como
Objetivos Específicos
uma forma de tornar mais eficiente a operação de busca
dos dados.
Fazer perceber que rearranjar os elementos de uma
estrutura de dados pode proporcionar aos alunos uma
melhor compreensão das relações internas que possam
existir entre os dados.
Fazer perceber que reorganizar é especialmente útil
para que sejam alcançadas soluções para um dado
problema.
Fazer perceber que reorganizar os elementos de uma
estrutura de dados muitas vezes podem ajudar a
encontrar uma solução para um problema, o que lhes
permite ver novas informações destacando uma
informação que anteriormente não era visualizada.
Fazer perceber que o rearranjo pode ser utilizado para
5 demonstrar conceitos.
Metodologia
Recursos
7
Bibliografia
Bibliografia Básica:
AARON M.T.; LANGSAM, Y.; MOSHA, J.A. Estruturas de Dados
Usando C. Pearson Education, 2005.
CORMEN T.H.; LEISERSON C.E.; RIVEST, R.L. Algoritmos -
Teoria e Prática. Elsevier, 2002.
SEDGEWICK, R. Algorithms in C. 3ª ed. Pearson Education, 1998.
ZIVIANI, N. Projeto de Algoritmos - com implementação em Pascal
e C. Cengage Learning, 1992.
Bibliografia Complementar:
DOUGLAS D.; MOONEY, A; RANDALL J.S. Course in
mathematical modeling. Mathematical Association of America,
1999.
STUART, J. Cálculo. 4 ª ed. Cengage Learning, 2005. vol. 1.
SAYÃO, L.F. Modelos teóricos em ciência da informação:
abstração e método científico. Ciência e Informação, 2001.
Bibliografia Auxiliar:
DROZDEK A. Estrutura de Dados e Algoritmos em C++. Cengage
8 Learning, 2009.
Informações Gerais
Material de apoio
Os slides utilizados em aula, descrição de trabalhos, datas de
avaliações e demais informações referentes à disciplina encontram-
se na página www.univasf.edu.br/~marcelo.linder
9
Breve Revisão
10
Programa
11
Estruturas de Dados
14
Tipos Abstratos de Dados
15
Listas, Pilhas e Filas
Visando recordá-los dos pontos principais e
estabelecer um elo entre as disciplinas,
faremos agora um overview dos tópicos
vistos na disciplina Algoritmos e Estrutura de
Dados I através um conjunto de exercícios.
O que é uma lista?
Uma lista é uma seqüência de zero ou mais
elementos, cada um deles sendo um valor
primitivo (átomo ou nodo) ou composto. Em
outras palavras, a estrutura de lista
representa a ordem linear entre os
elementos. Listas podem ser homogêneas ou
heterogêneas, lineares ou não lineares.
16
Listas, Pilhas e Filas
Cite algumas operação primitivas
necessárias a uma implementação de uma
lista:
-criar uma nova lista;
-verificar se a lista é vazia;
-acessar o k-ésimo elemento;
-inserir um elemento como k-ésimo da lista;
-remover o k-ésimo elemento;
-etc.
17
Listas, Pilhas e Filas
No que tange a gerência de memória como
uma lista pode ser implementada?
Com relação a gerência de memória uma lista
pode ser implementada de forma seqüencial ou
encadeada.
Utilizando a alocação encadeada uma lista
pode ser implementada de algumas formas,
cite-as:
-simplesmente encadeada;
- com nó de cabeçalho;
-circular;
-duplamente encadeada;
-etc.
18
Disciplinas de acesso
21
Listas, Pilhas e Filas
Especifique uma forma simples e eficiente
de armazenar em memória uma fila.
Podemos utilizar uma lista simplesmente
encadeada com um nó de cabeçalho (descritor)
contendo um ponteiro para o primeiro elemento
e outro para o último elemento da fila.
INICIO FIM
... λ
22
Desta forma, utilizando a linguagem C,
defina o TAD FILA_ENC (de valores inteiros).
typedef struct nodo
{
int inf;
struct nodo * next;
}NODO;
typedef struct
{
NODO *INICIO;
NODO *FIM;
}DESCRITOR;
typedef DESCRITOR * FILA_ENC;
void cria_fila (FILA_ENC *);
int eh_vazia (FILA_ENC);
void ins (FILA_ENC, int);
int cons (FILA_ENC);
void ret (FILA_ENC);
23 int cons_ret (FILA_ENC);
Listas, Pilhas e Filas
Implemente a operação de inserção de um
novo elemento no TAD FILA_ENC.
X
• v •
INICIO FIM
• v •
F
INICIO • • FIM
INICIO • • FIM
v •
Novo v •
Nodo 1
26
void ins (FILA_ENC f, int v)
{
NODO *novo;
novo = (NODO *) malloc (sizeof(NODO));
if (!novo)
{
printf ("\nERRO! Memoria insuficiente!\n");
exit (1);
}
novo->inf = v;
novo->next = NULL;
if (eh_vazia(f))
f->INICIO=novo;
else
f->FIM->next=novo;
27 f->FIM=novo; }
Listas, Pilhas e Filas
Implemente a operação de retirada de um
elemento no TAD FILA_ENC.
X
• •
INICIO FIM
• •
INICIO • • FIM F
X X
• INICIO • • FIM
aux Nodo 1
30
void ret (FILA_ENC f)
{
if (eh_vazia(f))
{
printf ("\nERRO! Retirada em fila vazia!\n");
exit (3);
}
else
{
NODO *aux=f->INICIO;
f->INICIO=f->INICIO->next;
if (!f->INICIO)
f->FIM=NULL;
31 free (aux); } }
Listas, Pilhas e Filas
Defina uma pilha.
Uma pilha é uma lista com restrições de
acesso, onde todas as operações só podem ser
aplicadas sobre uma das extremidades da lista,
denominada topo da pilha.
Com isso estabelece-se o critério LIFO (last in,
first out), que indica que o último item que entra é
o primeiro a sair.
O modelo intuitivo para isto é o de uma pilha de
pratos, ou livros, etc, na qual só se pode
visualizar (consultar) o último empilhado e este é
o único que pode ser retirado. E também
qualquer novo empilhamento (inserção) se fará
sobre o último da pilha.
32
Listas, Pilhas e Filas
33
Listas, Pilhas e Filas
Uma pilha pode ser armazenada em uma
lista simplesmente encadeada, sem perda de
eficiência. Por exemplo:
P
... λ
35
typedef struct nodo
{
int inf;
struct nodo * next;
}NODO;
typedef NODO * PILHA_ENC;
void cria_pilha (PILHA_ENC *);
int eh_vazia (PILHA_ENC);
void push (PILHA_ENC *, int);
int top (PILHA_ENC);
void pop (PILHA_ENC *);
36
int top_pop (PILHA_ENC *);
Árvores
Qual a carência das pilhas e filas?
Estas são de difícil utilização para a
representação hierárquica de elementos.
Devido a…
Serem limitadas a apenas uma dimensão.
Visando eliminar esta limitação foi criado o
conceito de árvore.
Uma definição recursiva para árvore é:
1. Uma estrutura vazia é uma árvore.
2. Se t1, …, tk são árvores disjuntas, então a
estrutura cuja raiz tem como suas filhas as
raízes de t1, …, tk também é uma árvore.
3. Somente estruturas geradas pelas regras 1 e 2
37são árvores.
Árvores
Exemplo de árvore
38