Prof.: José Eustáquio Rangel de Queiroz [email protected] rangeldequeiroz@gmail

83
DSC/CCT/UFCG rangel}@dsc.ufcg.edu.br Carga Horária: 60 horas Carga Horária: 60 horas Prof.: José Eustáquio Rangel de Queiroz [email protected] [email protected]

description

Técnicas de Programação. Estruturas de. Dados em C. Prof.: José Eustáquio Rangel de Queiroz [email protected] [email protected]. Carga Horária: 60 horas. Carga Horária: 60 horas. Estruturas de Dados em C I. Objetivos - PowerPoint PPT Presentation

Transcript of Prof.: José Eustáquio Rangel de Queiroz [email protected] rangeldequeiroz@gmail

Informática na Educaçã[email protected]
[email protected]
Objetivos
Apresentar as estruturas de dados usuais em C e seus respectivos algoritmos
Introduzir conceitos relativos às estruturas de dados apresentadas
rangel}@dsc.ufcg.edu.br
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
Modo de armazenamento (representação) dos objetos matemáticos
Algoritmos usados para a execução das operações sobre os objetos matemáticos
rangel}@dsc.ufcg.edu.br
Estruturação de Dados
Identificação e desenvolvimento de entidades e operações matemáticas úteis para a resolução de diferentes classes de problemas
rangel}@dsc.ufcg.edu.br
Vetores e Matrizes
Structs
rangel}@dsc.ufcg.edu.br
Estruturas de Dados mais Complexas
Pilhas
Filas
Listas
Árvores
Estruturas de Dados – Conceitos I
Tipos de Dados
Estruturas de Dados
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
Exemplo Variável do tipo boolean (Valores possíveis: TRUE e FALSE)
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos III
Estrutura de Dados
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
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos IV
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 de operações nele realizáveis, não em termos de sua interna
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos V
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
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos VI
Tipo Abstrato de Dados (TAD) III
Exemplos
Listas
Pilhas
Filas
Árvores
Estruturas de Dados – Conceitos VII
Lista Linear I
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
E1
E2
Estruturas de Dados – Conceitos VIII
Lista Linear II
Estruturas de Dados – Conceitos IX
Lista Linear III
Ordenação de elementos
Estruturas de Dados – Conceitos X
Lista Linear IV
Inserções em uma extremidade e remoções na extremidade oposta Fila
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XI
Lista Linear V
Armazenamento de Elementos
Alocação de Memória
void main (void)
scanf ("%d", &d );
if ( n == NULL ) {
printf("Memoria insuficiente ! \n");
Exemplo 01 (1/2)
A função calloc() aloca memória suficiente para uma matriz de d objetos de tamanho float
Estruturas de Dados em C XVII
rangel}@dsc.ufcg.edu.br
printf(“Digite o valor do elemento n[%d]:”, i);
scanf("%f", &n[i]);
m = 0.0;
v = 0.0;
m /= d;
for ( i = 0; i < d; i++ ) v += (n[i]-m)*(n[i]-m);
v /= d;
free ( n );
}
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XIV
Listas
Variantes
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
E1
E2
Estruturas de Dados – Conceitos XVI
Lista Seqüencial II
Alocação Seqüencial de Memória
Localização do endereço do (j+1)-ésimo elemento a uma unidade de armazenamento do j-ésimo elemento
Representação e Acesso
Estruturas de Dados – Conceitos XVII
Lista Seqüencial III
Possibilidade de definição de cada elemento a partir de campos
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]
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XVIII
Lista Seqüencial III
Ordenada por chaves
Estruturas de Dados – Conceitos XIX
Lista Seqüencial IV – Busca por um item
Problema
Busca pelo item i em uma lista de n elementos
Solução
Retorno da posição do elemento na lista (caso afirmativo) ou de n (caso negativo)
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XX
Lista Seqüencial V
22
1
9
26
15
15
10
3
7
22
1
9
26
15
10
3
7
7
Estruturas de Dados – Conceitos XXI
Lista Seqüencial VI
return(pos);
Estruturas de Dados – Conceitos XXII
Lista Seqüencial VII
Estruturas de Dados – Conceitos XXIII
Lista Seqüencial VIII
Complexidade do Pior Caso O(n)
Execução mais rápida Algoritmo 2
Decrescimento do número de testes a cada iteração
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XXIV
Lista Seqüencial IX – Inserção de novo item I
Problema
Inserção um novo item i em uma lista seqüencial desordenada, caso este não exista na respectiva lista
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XXV
Lista Seqüencial X - Inserção de novo item II
Algoritmo 03
}
Estruturas de Dados – Conceitos XXVI
Lista Seqüencial XI – Remoção de um item I
Problema
Exclusão de um item i existente em uma lista seqüencial desordenada contendo n elementos
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XXVII
Lista Seqüencial XII - Remoção de um item II
Algoritmo 04
if (indice != *n){
item = a[indice];
for (i = indice; i < *(n-1); i ++) L[i] = L[i + 1];
*n = *n -1;
}else printf(“Lista vazia.”);
Estruturas de Dados – Conceitos XXVIII
Lista Seqüencial XIII – Vantagens & Desvantagens
Vantagens
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
Estruturas de Dados – Conceitos XXIX
Lista Seqüencial XIV – Uso
Armazenamento de quantidades reduzidas ou fixas de elementos (tamanho fixo)
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XXX
Lista Estática Encadeada I
Uso de apontadores para o 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
Parte 1 Dado
Parte 2 Apontador
Estruturas de Dados – Conceitos XXXI
Lista Estática Encadeada II
Indicação do fim da lista
E1
E2
En
apont
Estruturas de Dados – Conceitos XXXII
Lista Estática Encadeada III – Vantagens & Desvantagens
Vantagens
Não necessidade de movimentação de todos os itens no ato da inserção ou recuperação de um item
Desvantagens
Aumento do tempo de execução
Alocação de maior espaço de memória
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XXXIII
Lista Estática Encadeada IV – Uso
Armazenamento de quantidades reduzidas ou fixas de elementos (tamanho fixo)
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XXXIV
Lista Linear com Disciplina de Acesso I
Disciplina de Acesso
Modo (regra) de acesso aos itens de uma lista linear
Verificação da corretude das inserções, remoções e acessos de consulta
Relativa ao primeiro ou ao último item da lista linear
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XXXIV
Lista Linear com Disciplina de Acesso I
Classificação
Pilha
Fila
Deque
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)
fim
fim
fim
fim
fim
fim
F
I
L
A
início
início
I
L
A
início
início
I
L
A
início
início
S
Estruturas de Dados – Conceitos XXXVI
Fila II
Buffer para comunicação assíncrona entre equipamentos (em especial quando um deles é mais lento do que o outro – e.g. computador-impressora)
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XXXVII
Fila III
Operações Associadas
Criacao(F) Criação de uma fila F vazia
Insercao(x, F) Inserção de um item x ao final da fila F
Vazia(F) Teste se a fila F está vazia
Primeiro(F) Acesso ao item do início da fila F
Remocao(F) Remoção do primeiro item da fila F
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XXXVIII
Fila IV
Exemplo 04
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
Analisar cada uma das funções listadas no Adicional 02 (Filas e Pilhas) e utilizá-las para implementar o Exemplo 04
rangel}@dsc.ufcg.edu.br
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
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
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XLI
Fila VII
printf("\n <Manipulacao de Dados em uma Fila>\n\n");
  inicializa_fila(&Fila);
if (vazia_fila(Fila))
if (insere_fila(&Fila,4))
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XLII
Fila VIII
printf("\n=> Elementos da fila... [inicio ao fim]\n");
lista_fila(Fila);
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))
if (retira_fila(&Fila,&Valor))
if (retira_fila(&Fila,&Valor))
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XLIII
Fila IX
getch();
lista_fila(Fila);
getch();
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
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)
rangel}@dsc.ufcg.edu.br
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)
topo
topo
pop
pop
push
push
Estruturas de Dados – Conceitos XLVI
Pilha II
a(1) Elemento da base
a(n) Elemento do topo
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XLVII
Pilha III
Operações Associadas
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
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XLVIII
Pilha IV
Aplicação Típica
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
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos XLIX
Pilha V
Exemplo 05 - Conversão de um número decimal para outra base de numeração I
Sentido da leitura
Estruturas de Dados – Conceitos L
Pilha VI
Exemplo 05 - Conversão de um número decimal para outra base de numeração II
Empilhamento
Resultado
Desempilhamento
Resultado
pop(&P)
rangel}@dsc.ufcg.edu.br
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
Analisar cada uma das funções listadas no Adicional 02 (Filas e Pilhas) e utilizá-las para implementar o Exemplo 05
rangel}@dsc.ufcg.edu.br
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
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
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LIII
Pilha IX
scanf("%d",&num);
printf("\nO numero %d na base 10 equivale a ",num);
while( (num !=0) && (cheia_pilha(P) != 1) ) {
resto = num%2;
Estruturas de Dados – Conceitos LIV
Pilha X
getch();
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
Estruturas de Dados – Conceitos LVI
Pilha XII
scanf("%d",&num);
insere_pilha(&P,num);
Estruturas de Dados – Conceitos LVII
Pilha XIII
Estruturas de Dados – Conceitos LVIII
Árvore I
Árvore
ED bidimensional não linear com propriedades especiais
Todos os nós podem conter 2 ou mais links (nenhum, um, vários ou todos podem estar vazios)
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LIX
Árvore II
Definição I
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
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LX
Árvore III
Definição II
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
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LXI
Árvore IV
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
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LXII
Árvore V
Terminologia II
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 Conjunto de árvores disjuntas
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LXIII
Árvore VI
Aplicações Típicas
Processamento de Expressões Aritméticas
Armazenamento de dados com acesso rápido (Árvore Binária de Busca)
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LXIV
Árvore VII
((-m)+(n+p))/(x*(y*z))
Estruturas de Dados – Conceitos LXV
Árvore VIII
Exemplo 07 – Árvore contendo excerto dos 2 primeiros níveis de uma partida de Jogo da Velha
Jogador iniciante
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LXVI
Árvore IX
Um elemento, denominado raiz, associado a duas sub-árvores, denominadas sub-árvore esquerda e sub-árvore direita
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LXVII
Árvore X
Estruturas de Dados – Conceitos LXVIII
Árvore XI
Redes de Comunicação de Dados
A
B
D
C
E
F
H
G
MSG
(Fragmentação)
MSG1
MSG2
MSG3
MSG
MSG1
MSG3
MSG2
MSG2
(Ordenação &
Estruturas de Dados – Conceitos LXIX
Árvore XII
Operações Associadas
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ó
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LXX
Árvore XIII
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)
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LXXI
Árvore XIII
Pré-ordenada (Preorder)
Exploração da subárvore esquerda de forma pré-ordenada (preorder)
Exploração da subárvore direita de forma pré-ordenada (preorder)
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LXXII
Árvore XIV
Pós-ordenada (Postorder)
Processamento do valor do nó (i.e., impressão do valor)
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LXXIII
Árvore XV
Ordem de Acesso
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LXIX
Árvore XII
Exercício 08
(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)
rangel}@dsc.ufcg.edu.br
Estruturas de Dados – Conceitos LXX
Árvore XIII
Exercício 09 - Manipulação de dados em uma árvore
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.
rangel}@dsc.ufcg.edu.br
[email protected], [email protected]
H
H
L
L
I
I
F
F
E
E
G
G
C
C
B
B
A
A
a
a
c
c
b
b
d
d
e
e
f
f
g
g