830 likes | 967 Views
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
E N D
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 • Apresentar as estruturas de dados usuais em C e seus respectivos algoritmos • Introduzir conceitos relativos às estruturas de dados apresentadas
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
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
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;*/
Estruturas de Dados em C V • Estruturas de Dados mais Complexas • Pilhas • Filas • Listas • Árvores • Funções de Escrutínio (Hashing) • Grafos
Estruturas de Dados em C VI • Estruturas de Dados – Conceitos I • Tipos de Dados • Estruturas de Dados • Tipos Abstratos de Dados
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)
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
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
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
Estruturas de Dados em C XI • Estruturas de Dados – Conceitos VI • Tipo Abstrato de Dados (TAD) III • Exemplos • Listas • Pilhas • Filas • Árvores
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
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
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
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
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
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
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)
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
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
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]
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]
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
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)
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
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); }
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); }
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
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
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.");}
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
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.”);}
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
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)
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 1Dado • Parte 2Apontador Apontador Dado
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
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
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)
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
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
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)
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)
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
Estruturas de Dados em C XLIII • Estruturas de Dados – Conceitos XXXVIII • Fila IV • Exemplo 04
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
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
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");
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);
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();}