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