TP_NA08 - Computação UFCG

Propaganda
DSC/CCT/UFCG
rangel}@dsc.ufcg.edu.br
Prof.: José Eustáquio Rangel de Queiroz
[email protected]
[email protected]
Carga Horária: 60 horas
DSC/CCT/UFCG

Estruturas de Dados em C I
Objetivos
as estruturas de dados
em C e seus respectivos
 Apresentar
usuais
algoritmos
 Introduzir
rangel}@dsc.ufcg.edu.br
conceitos
relativos
estruturas de dados apresentadas
às
2
DSC/CCT/UFCG

Estruturas de Dados em C II
Representação de Dados em um Sistema
Computacional
 Modelo (objetos matemáticos) adotado
para o problema (objetos do mundo
real)
 Conjunto de operações
definidas no
modelo
rangel}@dsc.ufcg.edu.br
 Modo
de
armazenamento
(representação) dos objetos matemáticos
 Algoritmos usados para a execução das
operações sobre os objetos matemáticos
3
Estruturas de Dados em C
III
DSC/CCT/UFCG

Estruturação de Dados
 Organização de conjuntos de dados

Facilidade de
processamento
armazenamento
e/ou

Facilidade de resolução de problemas
rangel}@dsc.ufcg.edu.br
 Identificação
e desenvolvimento de
entidades e operações matemáticas úteis
para a resolução de diferentes classes de
problemas
4
DSC/CCT/UFCG

Estruturas de Dados em C
IV
Exemplos de
Elementares
Estruturas
de
Dados
 Vetores e Matrizes
int a0, a1, a2, a3;
 /* Mais adequado: int a[4] */
 Structs
rangel}@dsc.ufcg.edu.br
int x, y, z;
 /* Mais adequado: struct {int x,y,z;}
Ponto3D;*/
5
DSC/CCT/UFCG

Estruturas de Dados em C V
Estruturas de Dados mais Complexas
 Pilhas
 Filas
 Listas
 Árvores
 Funções de Escrutínio (Hashing)
rangel}@dsc.ufcg.edu.br
 Grafos
6
DSC/CCT/UFCG

Estruturas de Dados em C
VI
Estruturas de Dados – Conceitos I
 Tipos de Dados
 Estruturas de Dados
rangel}@dsc.ufcg.edu.br
 Tipos Abstratos de Dados
7
Estruturas de Dados em C
VII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos II
 Tipo de Dados

Conjunto de valores possíveis de serem
assumidos por uma variável e seqüência
de operações sobre tais valores
rangel}@dsc.ufcg.edu.br

Exemplo  Variável do tipo boolean
(Valores possíveis: TRUE e FALSE)
8
Estruturas de Dados em C
VIII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos III
 Estrutura de Dados
rangel}@dsc.ufcg.edu.br

Forma de representação um tipo de
dado abstrato, a qual pode conter
tipos básicos (int, real, char) e/ou
tipos estruturados (array, record) de
uma LP
9
Estruturas de Dados em C
IX
DSC/CCT/UFCG

Estruturas de Dados – Conceitos IV
rangel}@dsc.ufcg.edu.br
 Tipo Abstrato de Dados (TAD) I

Refere-se ao conceito de tipos de dados,
não levando em consideração o hardware
utilizado

Item especificado em termos
operações nele realizáveis, não
termos de sua interna
de
em
10
DSC/CCT/UFCG

Estruturas de Dados em C X
Estruturas de Dados – Conceitos V
rangel}@dsc.ufcg.edu.br
 Tipo Abstrato de Dados (TAD) II

Conjunto de valores e seqüência de
operações passíveis de execução nestes

Característica essencial  Separação
entre conceito e implementação

Implementação de um TAD  Seleção de
uma ED para representá-lo
11
Estruturas de Dados em C
XI
DSC/CCT/UFCG

Estruturas de Dados – Conceitos VI
 Tipo Abstrato de Dados (TAD) III
rangel}@dsc.ufcg.edu.br

Exemplos

Listas

Pilhas

Filas

Árvores
12
Estruturas de Dados em C
XII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos VII
 Lista Linear I
rangel}@dsc.ufcg.edu.br

E1
E2
...
En
Seqüência ordenada de elementos
E1, E2, ..., En, no sentido de sua posição
relativa 

Existem n elementos na seqüência

E1  Primeiro elemento da seqüência

En  Último elemento da seqüência

Para todo i, entre 1 e n, se i < j, então o
elemento Ei antecede o elemento Ej

Caso i = j - 1, Ei é o antecessor de Ej e
Ej é o sucessor de Ei
13
Estruturas de Dados em C
XIII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos VIII
 Lista Linear II
rangel}@dsc.ufcg.edu.br

Operações

Busca de um elemento

Inserção de um elemento

Remoção de um elemento
14
Estruturas de Dados em C
XIV
DSC/CCT/UFCG

Estruturas de Dados – Conceitos IX
 Lista Linear III
rangel}@dsc.ufcg.edu.br

Outras Operações

Alteração de um elemento na lista

Combinação de duas ou mais listas

Ordenação de elementos
15
Estruturas de Dados em C
XV
DSC/CCT/UFCG

Estruturas de Dados – Conceitos X
 Lista Linear IV
rangel}@dsc.ufcg.edu.br

Casos Particulares

Remoção e inserção
extremidades  Deque

Inserção/ Remoção
extremidade  Pilha

Inserções em uma extremidade e
remoções na extremidade oposta  Fila
em
apenas
uma
nas
única
16
Estruturas de Dados em C
XVI
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XI
 Lista Linear V

rangel}@dsc.ufcg.edu.br

Armazenamento de Elementos

Posições contíguas da memória  Lista
seqüencial

Posições aleatórias da memória 
Lista encadeada
Alocação de Memória

Estática
 Tempo de compilação

Dinâmica  Tempo de execução
17
DSC/CCT/UFCG

Estruturas de Dados em C
XVII
Exemplo 01 (1/2)
rangel}@dsc.ufcg.edu.br
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
/* Calculo da media e variancia de "d" numeros
reais */
função
calloc()
aloca
void main (void) A
memória suficiente para uma
{
int
i, d;
matriz de d objetos de tamanho
float *n;
float
float m, v;
/* Alocacao dinamica de memoria */
printf(“Entre com o número de elementos:”);
scanf ("%d", &d );
n = (float *) calloc (d, sizeof(float) );
if ( n == NULL ) {
printf("Memoria insuficiente ! \n");
exit(1);
}
18
DSC/CCT/UFCG
rangel}@dsc.ufcg.edu.br

Estruturas de Dados em C
XVIII
Exemplo 01 (2/2)
/* Leitura dos valores */
for(i = 0; i < d; i++){
printf(“Digite o valor do elemento n[%d]:”, i);
scanf("%f", &n[i]);
}
/* Calculo da media e da variancia */
m = 0.0;
v = 0.0;
for ( i = 0; i < d; i++ ) m += n[i];
m /= d;
for ( i = 0; i < d; i++ ) v += (n[i]-m)*(n[i]-m);
v /= d;
/* Liberação
da
memória
alocada
dinamicamente */
free ( n );
/* Impressao do resultado */
printf("Media = %f Variancia = %f \n", m, v);
}
19
Estruturas de Dados em C
XIX
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XIV
 Listas

Variantes
rangel}@dsc.ufcg.edu.br

Lista Estática

Seqüencial

Singularmente Encadeada

Duplamente Encadeada

Lista Dinâmica

Lista Circular
20
Estruturas de Dados em C
XX
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XV
 Lista Seqüencial I

Estabelecimento
de
regras
de
precedência entre seus elementos 
Sucessor de um elemento ocupa posição
física subseqüente àquela do elemento
considerado
rangel}@dsc.ufcg.edu.br
E1
E2
...
En
21
Estruturas de Dados em C
XXI
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XVI
 Lista Seqüencial II

Alocação Seqüencial de Memória


Representação e Acesso

rangel}@dsc.ufcg.edu.br
Localização do endereço do (j+1)-ésimo
elemento
a
uma
unidade
de
armazenamento do j-ésimo elemento
k-ésimo elemento  L[i]
22
Estruturas de Dados em C
XXII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XVII
 Lista Seqüencial III
rangel}@dsc.ufcg.edu.br

Possibilidade de definição
elemento a partir de campos
de
cada

Associação de uma chave c[k] está
associada ao nó L[k]

Condição de classificação ou ordenação
da lista por chave
Se i < j, então c[i] precede c[j]
23
Estruturas de Dados em C
XXIII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XVIII
 Lista Seqüencial III
rangel}@dsc.ufcg.edu.br

Busca em uma Lista Seqüencial

Ordenada por chaves

Não ordenada
24
Estruturas de Dados em C
XXIV
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XIX
 Lista Seqüencial IV – Busca por um item

Problema


Solução

rangel}@dsc.ufcg.edu.br
Busca pelo item i em uma lista de n
elementos
Retorno da posição do elemento na lista
(caso afirmativo) ou de n (caso negativo)
25
Estruturas de Dados em C
XXV
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XX
 Lista Seqüencial V

22

rangel}@dsc.ufcg.edu.br
22
Exemplo 02 – Busca pelo item 15
1
9
26
15
10
3
7
Exemplo 03 – Busca pelo item 5
1
9
26
15
10
3
7
26
Estruturas de Dados em C
XXVI
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXI
 Lista Seqüencial VI

Algoritmo 01
rangel}@dsc.ufcg.edu.br
/* Busca seqüencial – Algoritmo 01 */
Busca_1(item){
pos = 0;
while ( (item != L[pos]) && (pos<n) ) pos++;
return(pos);
}
27
Estruturas de Dados em C
XXVII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXII
 Lista Seqüencial VII
rangel}@dsc.ufcg.edu.br

Algoritmo 02
/* Busca seqüencial – Algoritmo 02 */
Busca_2(item){
L[n] = item;
pos = -1;
do {
pos += 1;
} while (item != L[pos])
return(pos);
}
28
Estruturas de Dados em C
XXVIII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXIII
 Lista Seqüencial VIII

Comentários sobre os Algoritmos 01 e 02

Complexidade do Pior Caso  O(n)

Execução mais rápida  Algoritmo 2
rangel}@dsc.ufcg.edu.br

Decrescimento do número de testes a
cada iteração
29
Estruturas de Dados em C
XXIX
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXIV
 Lista Seqüencial IX – Inserção de novo
item I

Problema
rangel}@dsc.ufcg.edu.br

Inserção um novo item i em uma lista
seqüencial desordenada, caso este não
exista na respectiva lista
30
Estruturas de Dados em C
XXX
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXV
 Lista Seqüencial X - Inserção de novo
item II
rangel}@dsc.ufcg.edu.br

Algoritmo 03
/* Busca seqüencial – Algoritmo 03 */
void Insercao(i, item[], *n) {
if (*n < MAX-1) {
if (Busca_2(item) == -1) {
item[*n] = i;
*n=*n+1;
}
else printf("Elemento ja existe na tabela.");
}
else puts("Lista ja cheia.");
}
31
Estruturas de Dados em C
XXXI
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXVI
 Lista Seqüencial XI – Remoção de um
item I

Problema
rangel}@dsc.ufcg.edu.br

Exclusão de um item i existente em uma
lista seqüencial desordenada contendo n
elementos
32
Estruturas de Dados em C
XXXII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXVII
 Lista Seqüencial XII - Remoção de um
item II
rangel}@dsc.ufcg.edu.br

Algoritmo 04
/* Busca seqüencial – Algoritmo 04 */
void Remocao(item, *n){
if (n != 0) {
indice = Busca_2(item);
if (indice != *n){
item = a[indice];
for (i = indice; i < *(n-1); i ++) L[i] = L[i + 1];
*n = *n -1;
} else printf(“Item não encontrado.”);
}else printf(“Lista vazia.”);
}
33
Estruturas de Dados em C
XXXIII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXVIII
 Lista
Seqüencial
Desvantagens

rangel}@dsc.ufcg.edu.br

XIII – Vantagens &
Vantagens

Acesso direto a itens da lista através de
índices

Tempo de acesso constante
Desvantagens

Movimentação de toda a lista quando da
inserção ou recuperação de um item

Pré-definição do tamanho
34
Estruturas de Dados em C
XXXIV
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXIX
 Lista Seqüencial XIV – Uso
rangel}@dsc.ufcg.edu.br

Armazenamento
reduzidas ou
(tamanho fixo)
de
quantidades
fixas de elementos
35
Estruturas de Dados em C
XXXV
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXX
rangel}@dsc.ufcg.edu.br
 Lista Estática Encadeada I

Uso
de
apontadores
para
encadeamento dos itens da lista

Indicação do nó inicial da lista feita por
apont

Representação de cada nó a partir de um
retângulo subdividido em duas partes


o
Parte 1  Dado
Parte 2  Apontador
Dado
Apontador
36
Estruturas de Dados em C
XXXVI
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXXI
 Lista Estática Encadeada II
apont
E1

En
Último nó  Apontamento para a terra

rangel}@dsc.ufcg.edu.br
E2
Indicação do fim da lista
37
Estruturas de Dados em C
XXXVII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXXII
 Lista Estática Encadeada III – Vantagens &
Desvantagens

Vantagens


Desvantagens

rangel}@dsc.ufcg.edu.br
Não necessidade de movimentação de
todos os itens no ato da inserção ou
recuperação de um item


Necessidade de definição de um tamanho
máximo
Aumento do tempo de execução
Alocação de maior espaço de memória
38
Estruturas de Dados em C
XXXVIII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXXIII
 Lista Estática Encadeada IV – Uso
rangel}@dsc.ufcg.edu.br

Armazenamento
reduzidas ou
(tamanho fixo)
de
quantidades
fixas de elementos
39
Estruturas de Dados em C
XXXIX
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXXIV
 Lista Linear com Disciplina de Acesso I

Disciplina de Acesso


Verificação da corretude das inserções,
remoções e acessos de consulta

rangel}@dsc.ufcg.edu.br
Modo (regra) de acesso aos itens de uma
lista linear
Relativa ao primeiro ou ao último item da
lista linear
40
Estruturas de Dados em C
XXXIX
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXXIV
 Lista Linear com Disciplina de Acesso I
rangel}@dsc.ufcg.edu.br

Classificação

Pilha

Fila

Deque
http://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp
41
Estruturas de Dados em C XL
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXXV
 Fila I

Definição

Lista linear na qual a inserção é feita
numa extremidade e a remoção na
extremidade oposta (First In First Out)
rangel}@dsc.ufcg.edu.br
início
início
F I L A
início
I L A
fim
I L A S
fim
fim
42
DSC/CCT/UFCG

Estruturas de Dados em C XLI
Estruturas de Dados – Conceitos XXXVI
 Fila II

Exemplo de Aplicação
rangel}@dsc.ufcg.edu.br

Buffer para comunicação assíncrona
entre equipamentos (em especial quando
um deles é mais lento do que o outro –
e.g. computador-impressora)
43
Estruturas de Dados em C
XLII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXXVII
 Fila III

Operações Associadas


rangel}@dsc.ufcg.edu.br



Criacao(F)

vazia
Insercao(x, F) 
x ao final da fila F
Vazia(F)

vazia
Primeiro(F)

início da fila F
Remocao(F)

item da fila F
Criação de uma fila F
Inserção de um item
Teste se a fila F está
Acesso ao item do
Remoção do primeiro
44
Estruturas de Dados em C
XLIII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXXVIII
 Fila IV

Exemplo 04
rangel}@dsc.ufcg.edu.br
Ação
qstore(F )
qstore(I )
qstore(L )
qstore(A )
qretrieve()
qretrieve()
qretrieve()
Conteúdo da Fila
F
F I
F I L
F I L A
I L A
L A
A
45
Estruturas de Dados em C
XLIV
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XXXIX
 Fila V

Exercício 01 - Implementação de rotinas
básicas para manipulação de dados em
uma fila I
rangel}@dsc.ufcg.edu.br

Analisar cada uma das funções listadas
no Adicional 02 (Filas e Pilhas) e utilizálas para implementar o Exemplo 04
46
Estruturas de Dados em C
XLV
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XL
 Fila VI

Exercício 02 - Implementação de rotinas
básicas para manipulação de dados em
uma fila II
rangel}@dsc.ufcg.edu.br

Analisar o código dos slides 48 a 50,
construindo, em seguida, um quadro nos
moldes do Exemplo 04 para representar o
processo de manipulação dos dados
associados
47
Estruturas de Dados em C
XLVI
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XLI
 Fila VII
rangel}@dsc.ufcg.edu.br

Algoritmo 05 (01/03)
/* Programa Principal */
main()
{
Tipo_Fila Fila;
int Valor;
clrscr();
printf("\n <Manipulacao de Dados em uma Fila>\n\n");
inicializa_fila(&Fila);
if (vazia_fila(Fila))
printf("=> Fila vazia\n");
if (insere_fila(&Fila,2))
printf("=> Valor 2 inserido na fila\n");
if (insere_fila(&Fila,4))
printf("=> Valor 4 inserido na fila\n");
48
Estruturas de Dados em C
XLVII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XLII
 Fila VIII
rangel}@dsc.ufcg.edu.br

Algoritmo 05 (02/03)
if (insere_fila(&Fila,6))
printf("=> Valor 6 inserido na fila\n");
printf("\n=> Elementos da fila... [inicio ao fim]\n");
lista_fila(Fila);
if (acha_fila(Fila,4,&Valor))
printf("=> O valor 4 foi achado na posicao %d\n",Valor);
if (!acha_fila(Fila,5,&Valor))
printf("=> O valor 5 nao foi achado na fila\n");
if (retira_fila(&Fila,&Valor))
printf("=> Valor %d retirado da fila\n",Valor);
if (retira_fila(&Fila,&Valor))
printf("=> Valor %d retirado da fila\n",Valor);
if (retira_fila(&Fila,&Valor))
printf("=> Valor %d retirado da fila\n",Valor);
49
Estruturas de Dados em C
XLVIII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XLIII
 Fila IX
rangel}@dsc.ufcg.edu.br

Algoritmo 05 (03/03)
printf("Pressione uma tecla para continuar...\n");
getch();
printf("\n=> Elementos da fila... [inicio ao fim]\n");
lista_fila(Fila);
if (vazia_fila(Fila))
printf("=> Fila vazia\n");
printf("Pressione uma tecla para encerrar o programa.\n");
getch();
}
50
Estruturas de Dados em C
XLIX
DSC/CCT/UFCG

Estruturas de Dados – Conceitos XLIV
 Fila X

Exercício 03 - Implementação de rotinas
básicas para manipulação de dados em
uma fila III
rangel}@dsc.ufcg.edu.br

Alterar o código apresentado nos slides
48 a 50, de modo a obter, ao final do
processamento, uma fila contendo

apenas o item 55

os itens 91 (início), 31, 82, 47, 16 e
29 (fim)
51
DSC/CCT/UFCG

Estruturas de Dados em C L
Estruturas de Dados – Conceitos XLV
 Pilha I

Definição

Lista na qual a inserção ou a remoção de
um item ocorre a partir de uma única
extremidade - o topo (Last In First Out)
push
pop
rangel}@dsc.ufcg.edu.br
topo
52
DSC/CCT/UFCG

Estruturas de Dados em C LI
Estruturas de Dados – Conceitos XLVI
 Pilha II

Características
rangel}@dsc.ufcg.edu.br

Estrutura P=(a(1), a(2), ..., a(n))

a(1)
 Elemento da base

a(n)
 Elemento do topo

a(i+1)  Elemento sucessor de a(i)
53
DSC/CCT/UFCG

Estruturas de Dados em C LII
Estruturas de Dados – Conceitos XLVII
 Pilha III

Operações Associadas


rangel}@dsc.ufcg.edu.br



Criacao(P)
 Criação de uma pilha
P vazia
Insercao(x, P)  Inserção de um item
x no topo da pilha P (push(x,P))
Vazia(P)
 Teste se a pilha P
está vazia
Topo(P)
 Acesso ao item do
topo da pilha P
Remocao(P)
 Remoção do item de
topo da pilha P
54
DSC/CCT/UFCG

Estruturas de Dados em C LIII
Estruturas de Dados – Conceitos XLVIII
 Pilha IV

Aplicação Típica
rangel}@dsc.ufcg.edu.br

Reordenação de um conjunto de dados,
tal que o primeiro e o último elementos
devam ter suas posições invertidas e as
posições de todos os elementos entre o
primeiro e último devam, também, ser
relativamente invertidas
55
DSC/CCT/UFCG

Estruturas de Dados em C LIV
Estruturas de Dados – Conceitos XLIX
 Pilha V

Exemplo 05 - Conversão de um número
decimal para outra base de numeração I
125
rangel}@dsc.ufcg.edu.br
2
3
41
2
3
13
1
12510 = ?3
3
4
1
3
Sentido
da leitura
1
12510 = 111223
56
DSC/CCT/UFCG

Estruturas de Dados em C LV
Estruturas de Dados – Conceitos L
 Pilha VI
rangel}@dsc.ufcg.edu.br

Exemplo 05 - Conversão de um número
decimal para outra base de numeração II
Empilhament
o
Resultado
Desempilhament Resultado
o
push(&P, 2)
2
pop(&P)
1
push(&P, 2)
2 2
pop(&P)
1 1
push(&P, 1)
2 2 1
pop(&P)
1 1 1
push(&P, 1)
2 2 1 1
pop(&P)
1 1 1 2
push(&P, 1)
2 2 1 1 1
pop(&P)
1 1 1 2 2
57
DSC/CCT/UFCG

Estruturas de Dados em C LVI
Estruturas de Dados – Conceitos LI
 Pilha VII

Exercício 04 - Implementação de rotinas
básicas para manipulação de dados em
uma pilha I
rangel}@dsc.ufcg.edu.br

Analisar cada uma das funções listadas
no Adicional 02 (Filas e Pilhas) e utilizálas para implementar o Exemplo 05
58
Estruturas de Dados em C LVII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LII
 Pilha VIII

Exercício 05 - Implementação de rotinas
básicas para manipulação de dados em
uma pilha II
rangel}@dsc.ufcg.edu.br

Analisar o código dos slides 60 e 61,
construindo, em seguida, um quadro nos
moldes do Exemplo 05 para representar o
processo de manipulação dos dados
associados
59
Estruturas de Dados em C
LVIII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LIII
 Pilha IX
rangel}@dsc.ufcg.edu.br

Algoritmo 06 (01/02)
/* Programa Principal */
void main()
{
int x,num,den, resto;
Tipo_Pilha P;
clrscr();
inicializa_pilha(&P);
printf("\nDigite um numero na base decimal: ");
scanf("%d",&num);
printf("\nO numero %d na base 10 equivale a ",num);
while( (num !=0) && (cheia_pilha(P) != 1) ) {
resto = num%2;
den = num/2;
num = den;
insere_pilha(&P,resto);
}
60
Estruturas de Dados em C
LIX
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LIV
 Pilha X

Algoritmo 06 (02/02)
rangel}@dsc.ufcg.edu.br
while(vazia_pilha(P) != 1) {
x=retira_pilha(&P);
printf("%d",x);
}
printf(" na base 2\n\n");
getch();
}
61
DSC/CCT/UFCG

Estruturas de Dados em C LX
Estruturas de Dados – Conceitos LV
 Pilha XI

Exercício 07 - Implementação de rotinas
básicas para manipulação de dados em
uma pilha III

Alterar o código apresentado nos slides
63 e 64, de modo a obter, ao final do
processamento
os números primos da seqüência
empilhada
 os itens 91 (início), 31, 82, 47, 16 e
29 (fim)
rangel}@dsc.ufcg.edu.br

62
Estruturas de Dados em C
LXI
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LVI
 Pilha XII
rangel}@dsc.ufcg.edu.br

Algoritmo 07 (01/02)
/* Programa Principal */
void main()
{
int num, x;
Tipo_Pilha P;
clrscr();
inicializa_pilha(&P);
printf("\nArmazene um numero (Encerre digitando 999): ");
scanf("%d",&num);
while( (num !=999) && (cheia_pilha(P) != 1)) {
insere_pilha(&P,num);
printf("\nArmazene um numero: ");
scanf("%d",&num);
}
63
Estruturas de Dados em C
LX
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LVII
 Pilha XIII

Algoritmo 07 (02/02)
rangel}@dsc.ufcg.edu.br
printf("\nSequencia LIFO\n");
while(vazia_pilha(P) != 1) {
x=retira_pilha(&P);
printf("%d",x);
}
printf("\n");
getch();
}
64
DSC/CCT/UFCG

Estruturas de Dados em C LXI
Estruturas de Dados – Conceitos LVIII
 Árvore I

Considerações

Lista, Fila e Pilha
ED lineares
 Cada nó contém apenas um link

rangel}@dsc.ufcg.edu.br

Árvore

ED bidimensional não
propriedades especiais
linear

Todos os nós podem conter 2 ou mais
links (nenhum, um, vários ou todos
podem estar vazios)
com
65
Estruturas de Dados em C
LXII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LIX
 Árvore II

Definição I

rangel}@dsc.ufcg.edu.br


R 
A 

Estrutura
recursiva
contendo
um
conjunto finito de itens denominados nós
(vértices ou folhas), tais que

Se T = 0 a árvore é dita vazia

Existe um nó especial r, denominado
raiz de T
V
66
Estruturas de Dados em C
LXIII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LX
 Árvore III
Definição II


Tipo particular de lista com as seguintes
propriedades
rangel}@dsc.ufcg.edu.br
13
7
3
23
Substruturas encadeadas a qualquer nó
são disjuntas

Todos os nós podem ser atingidos a
partir do nó inicial (raiz)  Navegação
por um número finito de locações
31
43 65
79 2

199
113
37
67
Estruturas de Dados em C
LXIV
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXI
 Árvore IV
rangel}@dsc.ufcg.edu.br

Terminologia I

Nó pai  Nó ao qual um nó está
diretamente ligado

Nó filho  Cada nó derivado de um nó

Nós ancestrais  Nós acima de um
dado nó, em direção a raiz

Nós descendentes  Todos os nós
abaixo de um dado nó

Nós irmãos  Nós ligados ao mesmo
pai
68
Estruturas de Dados em C
LXV
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXII
 Árvore V
rangel}@dsc.ufcg.edu.br

Terminologia II

Grau  Número de subárvores de um nó

Nó terminal (folha)  Nó sem filho ou
com grau zero

Nível  Número de arcos entre um nó e a
raiz

Altura (da árvore)  Nível mais alto
(profundidade)

Floresta
disjuntas

Conjunto
de
árvores
69
Estruturas de Dados em C
LXVI
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXIII
 Árvore VI

Aplicações Típicas
rangel}@dsc.ufcg.edu.br

Relação de hierarquia (Composição)

Organograma

Estruturação de Diretórios

Composição de um conjunto a partir de
peças elementares

Processamento
Aritméticas

Armazenamento de dados com acesso
rápido (Árvore Binária de Busca)
de
Expressões
70
Estruturas de Dados em C
LXVII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXIV
 Árvore VII

Exemplo 06 – Árvore
expressão aritmética
contendo
a
((-m)+(n+p))/(x*(y*z))
/
rangel}@dsc.ufcg.edu.br
+
*
-
+
m
n
+
p
*
x
y
z
71
Estruturas de Dados em C
LXVIII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXV
 Árvore VIII
rangel}@dsc.ufcg.edu.br

Exemplo 07 – Árvore contendo excerto
dos 2 primeiros níveis de uma partida de
Jogo da Velha
Jogador iniciante
72
Estruturas de Dados em C
LXIX
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXVI
 Árvore IX

Árvore Binária I - Definição
rangel}@dsc.ufcg.edu.br

Estrutura recursiva, composta de

Uma árvore vazia (T=0); ou

Um
elemento,
denominado
raiz,
associado
a
duas
sub-árvores,
denominadas sub-árvore esquerda e
sub-árvore direita
73
Estruturas de Dados em C
LXX
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXVII
 Árvore X
Árvore Binária II - Estrutura

A Raiz
rangel}@dsc.ufcg.edu.br
B
Sub-árvore
esquerda
Folhas H
Sub-árvore
direita
C
E
F
I
G
L
74
Estruturas de Dados em C
LXXI
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXVIII
 Árvore XI

Árvore Binária III – Exemplo de Aplicação
Redes de Comunicação de Dados
MSG1
MSG2
MSG2
MSG3
A
rangel}@dsc.ufcg.edu.br
H
C
MSG1
MSG3
MSG1
MSG
MSG2
MSG3
(Fragmentação)
D
B
G
E
F
MSG2
MSG1
MSG
MSG3
MSG2
(Ordenação &
eliminação de réplicas)
75
Estruturas de Dados em C
LXXII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXIX
 Árvore XII
rangel}@dsc.ufcg.edu.br

Operações Associadas

Criação de uma árvore vazia

Criação de um nó raiz

Verificação de árvore vazia (ou não)

Criação de um filho à direita ou à
esquerda de um dado nó

Verificação do nível de um dado nó

Retorno do pai (ou dos filhos) de um dado
nó
76
Estruturas de Dados em C
LXXIII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXX
 Árvore XIII

Exploração de uma Árvore Binária I
rangel}@dsc.ufcg.edu.br

Ordenada (Inorder)  Processamento
dos valores dos nós em ordem
ascendente

Exploração da subárvore esquerda de
forma ordenada (inorder)

Processamento do valor do nó (i.e.,
impressão do valor)

Exploração da subárvore direita de
forma ordenada (inorder)
77
Estruturas de Dados em C
LXXIV
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXXI
 Árvore XIII

Exploração de uma Árvore Binária II
rangel}@dsc.ufcg.edu.br

Pré-ordenada (Preorder)

Processamento do valor do nó (i.e.,
impressão do valor)

Exploração da subárvore esquerda de
forma pré-ordenada (preorder)

Exploração da subárvore direita
forma pré-ordenada (preorder)
de
78
Estruturas de Dados em C
LXXV
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXXII
 Árvore XIV

Exploração de uma Árvore Binária III
rangel}@dsc.ufcg.edu.br

Pós-ordenada (Postorder)

Exploração da subárvore esquerda de
forma pós-ordenada (postorder)

Exploração da subárvore direita
forma pós-ordenada (postorder)

Processamento do valor do nó (i.e.,
impressão do valor)
de
79
Estruturas de Dados em C
LXXVI
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXXIII
 Árvore XV

Exploração de uma Árvore Binária IV

Ordem de Acesso
d
rangel}@dsc.ufcg.edu.br
b
a
f
c e
1. Ordenada
abcdefg
2. Pré-ordenada d b a c f e g
3. Pós-ordenada a c b e g f d
g
80
Estruturas de Dados em C
LXXII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXIX
 Árvore XII

Exercício 08
rangel}@dsc.ufcg.edu.br

Construir
as
árvores
binárias
correspondentes às seguintes expressões:

(a+b)/(c-d*e)+e+g*h/(a-b)

(-x-y*(z+(a+b+c/d*e)/(c-d))/k

((a+b)>(c-e))&&a<f||(x<y&&y>z)
81
Estruturas de Dados em C
LXXIII
DSC/CCT/UFCG

Estruturas de Dados – Conceitos LXX
 Árvore XIII

Exercício 09 - Manipulação de dados em
uma árvore
rangel}@dsc.ufcg.edu.br

Analisar e testar o código do Adicional 03
(Árvores), de modo a incrementá-lo com
barras (/) e contrabarras (\), a fim de
facilitar a visualização da árvore impressa.
82
DSC/CCT/UFCG
José Eustáquio Rangel de Queiroz
[email protected], [email protected]
rangel}@dsc.ufcg.edu.br
UNIVERSIDADE FEDERAL DE CAMPINA GRANDE
CENTRO DE CIÊNCIAS E TECNOLOGIA
DEPARTAMENTO DE SISTEMAS E
COMPUTAÇÃO
Download