1 / 83

Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

Técnicas de Programação. Estruturas de. Dados em C. Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br rangeldequeiroz@gmail.com. Carga Horária: 60 horas. Carga Horária: 60 horas. Estruturas de Dados em C I. Objetivos

elgin
Download Presentation

Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Técnicas de Programação Estruturas de Dados em C Prof.:José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br rangeldequeiroz@gmail.com Carga Horária:60 horas Carga Horária:60 horas

  2. Estruturas de Dados em C I • Objetivos • Apresentar as estruturas de dados usuais em C e seus respectivos algoritmos • Introduzir conceitos relativos às estruturas de dados apresentadas

  3. 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 • Modo de armazenamento (representação) dos objetos matemáticos • Algoritmos usados para a execução das operações sobre os objetos matemáticos

  4. Estruturas de Dados em C III • Estruturação de Dados • Organização de conjuntos de dados • Facilidade de armazenamento e/ou processamento • Facilidade de resolução de problemas • Identificação e desenvolvimento de entidades e operações matemáticas úteis para a resolução de diferentes classes de problemas

  5. Estruturas de Dados em C IV • Exemplos de Estruturas de Dados Elementares • Vetores e Matrizes int a0, a1, a2, a3; /* Mais adequado: int a[4] */ • Structs int x, y, z;  /* Mais adequado: struct {int x,y,z;} Ponto3D;*/

  6. Estruturas de Dados em C V • Estruturas de Dados mais Complexas • Pilhas • Filas • Listas • Árvores • Funções de Escrutínio (Hashing) • Grafos

  7. Estruturas de Dados em C VI • Estruturas de Dados – Conceitos I • Tipos de Dados • Estruturas de Dados • Tipos Abstratos de Dados

  8. Estruturas de Dados em C VII • 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)

  9. Estruturas de Dados em C VIII • 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

  10. Estruturas de Dados em C IX • 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

  11. Estruturas de Dados em C X • 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

  12. Estruturas de Dados em C XI • Estruturas de Dados – Conceitos VI • Tipo Abstrato de Dados (TAD) III • Exemplos • Listas • Pilhas • Filas • Árvores

  13. Estruturas de Dados em C XII • 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 En

  14. Estruturas de Dados em C XIII • Estruturas de Dados – Conceitos VIII • Lista Linear II • Operações • Busca de um elemento • Inserção de um elemento • Remoção de um elemento

  15. Estruturas de Dados em C XIV • Estruturas de Dados – Conceitos IX • Lista Linear III • Outras Operações • Alteração de um elemento na lista • Combinação de duas ou mais listas • Ordenação de elementos

  16. Estruturas de Dados em C XV • Estruturas de Dados – Conceitos X • Lista Linear IV • Casos Particulares • Remoção e inserção apenas nas extremidades Deque • Inserção/ Remoção em uma única extremidade Pilha • Inserções em uma extremidade e remoções na extremidade oposta Fila

  17. Estruturas de Dados em C XVI • Estruturas de Dados – Conceitos XI • Lista Linear V • 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

  18. Estruturas de Dados em C XVII #include <stdio.h>#include <conio.h>#include <stdlib.h>/* Calculo da media e variancia de "d" numeros reais */void main (void){int i, d;float *n;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);} • Exemplo 01 (1/2) A funçãocalloc()aloca memória suficiente para uma matriz de d objetos de tamanhofloat

  19. Estruturas de Dados em C XVIII /* 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);} • Exemplo 01 (2/2)

  20. Estruturas de Dados em C XIX • Estruturas de Dados – Conceitos XIV • Listas • Variantes • Lista Estática • Seqüencial • Singularmente Encadeada • Duplamente Encadeada • Lista Dinâmica • Lista Circular

  21. Estruturas de Dados em C XX • 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 En

  22. Estruturas de Dados em C XXI • 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 • k-ésimo elemento L[i]

  23. Estruturas de Dados em C XXII • 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]

  24. Estruturas de Dados em C XXIII • Estruturas de Dados – Conceitos XVIII • Lista Seqüencial III • Busca em uma Lista Seqüencial • Ordenada por chaves • Não ordenada

  25. Estruturas de Dados em C XXIV • 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)

  26. Estruturas de Dados em C XXV • Estruturas de Dados – Conceitos XX • Lista Seqüencial V • Exemplo 02 – Busca pelo item15 • Exemplo 03 – Busca pelo item5 22 1 9 26 15 15 10 3 7 22 1 9 26 15 10 3 7 7

  27. Estruturas de Dados em C XXVI • Estruturas de Dados – Conceitos XXI • Lista Seqüencial VI • Algoritmo 01 /* Busca seqüencial – Algoritmo 01 */ Busca_1(item){ pos = 0; while ( (item != L[pos]) && (pos<n) ) pos++; return(pos); }

  28. Estruturas de Dados em C XXVII • Estruturas de Dados – Conceitos XXII • Lista Seqüencial VII • Algoritmo 02 /* Busca seqüencial – Algoritmo 02*/Busca_2(item){ L[n] = item; pos = -1; do { pos += 1; } while (item != L[pos]) return(pos); }

  29. Estruturas de Dados em C XXVIII • 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 • Decrescimento do número de testes a cada iteração

  30. Estruturas de Dados em C XXIX • 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

  31. Estruturas de Dados em C XXX • Estruturas de Dados – Conceitos XXV • Lista Seqüencial X - Inserção de novo item II • 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.");}

  32. Estruturas de Dados em C XXXI • 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

  33. Estruturas de Dados em C XXXII • Estruturas de Dados – Conceitos XXVII • Lista Seqüencial XII - Remoção de um item II • 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.”);}

  34. Estruturas de Dados em C XXXIII • Estruturas de Dados – Conceitos XXVIII • Lista Seqüencial XIII – Vantagens & Desvantagens • 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

  35. Estruturas de Dados em C XXXIV • Estruturas de Dados – Conceitos XXIX • Lista Seqüencial XIV – Uso • Armazenamento de quantidades reduzidas ou fixas de elementos (tamanho fixo)

  36. Estruturas de Dados em C XXXV • 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 Apontador Dado

  37. apont E2 En E1 Estruturas de Dados em C XXXVI • Estruturas de Dados – Conceitos XXXI • Lista Estática Encadeada II • Último nó  Apontamento para a terra • Indicação do fim da lista

  38. Estruturas de Dados em C XXXVII • 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 • Necessidade de definição de um tamanho máximo • Aumento do tempo de execução • Alocação de maior espaço de memória

  39. Estruturas de Dados em C XXXVIII • Estruturas de Dados – Conceitos XXXIII • Lista Estática Encadeada IV – Uso • Armazenamento de quantidades reduzidas ou fixas de elementos (tamanho fixo)

  40. Estruturas de Dados em C XXXIX • 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

  41. http://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimphttp://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp http://equipe.nce.ufrj.br/adriano/c/apostila/lista.htm#listaencsimp Estruturas de Dados em C XXXIX • Estruturas de Dados – Conceitos XXXIV • Lista Linear com Disciplina de Acesso I • Classificação • Pilha • Fila • Deque

  42. início início início início início início F I L A I L A I L A S fim fim fim fim fim fim Estruturas de Dados em C XL • 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)

  43. Estruturas de Dados em C XLI • Estruturas de Dados – Conceitos XXXVI • Fila II • Exemplo de Aplicação • Buffer para comunicação assíncrona entre equipamentos (em especial quando um deles é mais lento do que o outro – e.g. computador-impressora)

  44. Estruturas de Dados em C XLII • 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

  45. Estruturas de Dados em C XLIII • Estruturas de Dados – Conceitos XXXVIII • Fila IV • Exemplo 04

  46. Estruturas de Dados em C XLIV • 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

  47. Estruturas de Dados em C XLV • 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

  48. Estruturas de Dados em C XLVI • Estruturas de Dados – Conceitos XLI • Fila VII • 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");

  49. Estruturas de Dados em C XLVII • Estruturas de Dados – Conceitos XLII • Fila VIII • 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);

  50. Estruturas de Dados em C XLVIII • Estruturas de Dados – Conceitos XLIII • Fila IX • 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();}

More Related