Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1
Sumário Revisão de estruturas; Lista Seqüencial; Exercício; Listas generalizadas. Prof.: Sergio Pacheco 2 2
Revisão Estrutura - struct Para armazenar grupos de dados do mesmo tipo em memória usamos o que ?; Vetor, matrizes Para armazenar grupos de dados de tipos deferentes ?; Estruturas Prof.: Sergio Pacheco 3 3
Revisão Estrutura - struct Uma estrutura é uma coleção de variáveis referenciadas por um nome, objetiva-se ter dados relacionados agrupados; As variáveis que formam a estrutura chamam-se de membros da estrutura. Prof.: Sergio Pacheco 4 4
}pessoa, cliente, chefe; Revisão Estrutura - Struct Para declarar variáveis do tipo Pessoa você tem duas opções. A primeira consiste em declarar as variáveis juntamente com a declaração da estrutura. Veja ; struct Pessoa { char *nome; int idade; }pessoa, cliente, chefe; Por que se usa ; no final Prof.: Sergio Pacheco 5 5
Revisão Estrutura - struct Como acessar os dados ? ; operador “ponto” struct func{ int rg; int cpf; }; struct func funcionario; funcionario.rg = 1111; funcionario.cpf = 1111; Prof.: Sergio Pacheco 6 6
Revisão Estrutura - struct Como acessar os dados ? ; Operador “seta” quando é ponteiro struct func{ int rg; int cpf; }; struct func *funcionario; funcionario->rg = 1111; funcionario->cpf = 1111; Prof.: Sergio Pacheco 7 7
Revisão Estrutura - struct Tamanho da estrutura em bytes: #include <stdio.h> struct func{ int rg; int cpf; char nome[10]; } main(){ struct func funcionario; printf ( "O tamanho em bytes da estrutura e == %d Bytes",sizeof(funcionario)); getchar(); Prof.: Sergio Pacheco 8 8
Revisão Estrutura - struct Como declarar um ponteiro para a mesma estrutura dentro como variável: struct Qualquer { tipo_dado_1 dado_1; ... struct Qualquer *proximo; } Prof.: Sergio Pacheco 9 9
Exercícios - Estrutura Criar um estrutura que possua 2 variáveis uma para hora e outra para minutos, ambas do tipo inteiro. Depois criar duas funções que receba os minutos digitados pelo usuário e devolva em horas para uma variável hora dentro da estrutura e a outra função para a variável minutos e imprima na tela. Prof.: Sergio Pacheco 10 10
Exercícios - Estrutura Prof.: Sergio Pacheco 11 11
Recursividade Quando a função chama ela mesmo. Em c muitas vezes pode ser chamado de definição circular. Uma função poderá também ser considerada recursiva se chamar outras funções que, em algum momento, chamem a primeira função, tornando esse conjunto de funções um processo recursivo. O que é importantíssimo em uma recursividade que não se pode esquecer ? Contar dinheiro saco Prof.: Sergio Pacheco 12 12
Recursividade duas Partes Principais Condição de parada : ponto que vai definir a parada da função; Regra Geral : é o método que reduz a resolução do problema através da invocação recursiva de casos menores, que por sua vez são resolvidos pela resolução de casos ainda menores pela própria função, assim sucessivamente até atingir o “ponto de parada” que finaliza o método. Prof.: Sergio Pacheco 13 13
Exercícios - Recursividade Determine o que a seguinte função em C calcula, depois disso, construa uma função iterativa para atingir o mesmo objetivo. Func (n){ Int n; if (n ==0){ return(0); } return(n+func(n-1)); Prof.: Sergio Pacheco 14 14
Listas Generalizadas - Definições São estruturas muitos flexíveis, do tipo recursiva, que garantem a construção de estruturas simples as mais complexas. Uma lista generalizada L [e1,e2,e3...,en],n>0; Cada elemento pode ser um átomo ou então uma sublista caracterizando uma outra lista generalizada. O tamanho da lista é definida pelo valor de n. Se n = 0 é dita lista vazia; A lista é definida pela cabeção e1(head) e o resto outros elementos (tail). Prof.: Sergio Pacheco 15 15
Listas Generalizadas - Definições b c e f Representação Lista L= [a, [b,c],d,[e, [ ],f ] ]; Prof.: Sergio Pacheco 16 16
Listas Generalizadas - Exercícios Desenhe a lista generalizada correspondente : L1 = [[[1], 2], [3, [4, 5]]]; L2 = [[1, [2, 3]], [[4]], 5]; L3 = [[[1, 2], 3], [4, [5]]]; Prof.: Sergio Pacheco 17 17
Listas Generalizadas - Gabaritos Desenhe a lista generalizada correspondente : L1 = [[[1], 2], [3, [4, 5]]]; Prof.: Sergio Pacheco 18 18
Listas Generalizadas - Gabaritos Desenhe a lista generalizada correspondente : L2 = [[1, [2, 3]], [[4]], 5]; Prof.: Sergio Pacheco 19 19
Listas Generalizadas - Gabaritos Desenhe a lista generalizada correspondente : L3 = [[[1], 2], 3], [4, [5]]]; Prof.: Sergio Pacheco 20 20
Listas Generalizadas - Operações Prof.: Sergio Pacheco 21 21
Listas Generalizadas – Exemplo Oper. Lista L1 = [3, [7, 14, [13, 26, 39], 21], 30, [4, 40, 400]]; head(L1) = 3; tail (L1) = [7, 14, [13, 26, 39], 21], 30, [4, 40, 400]]; head(Tail (L1)) = [7, 14, [13, 26, 39], 21]; Para recuperar o elemento de número 13, usando os comando acima? Resp: head (tail (tail (tail (head(L1))))) = 13; Prof.: Sergio Pacheco 22 22
Listas Generalizadas – union Utiliza a mesma posição de memória para tipos diferentes, pode-se utilizar um ou outro de acordo com a necessidade. Exemplo abaixo: union info_lista { int i; char c; struct No* sublista; }; Prof.: Sergio Pacheco 23 23
Listas Generalizadas – union Prof.: Sergio Pacheco 24 24
Trabalho para o lar – vale (0,5) Pontos Implementar um lista generalizada utilizando linguagem c. Trazer em anexo a documentação pertinente, que deve conter uma explicação de como o programa funciona e suas funções. Exemplo “essa função cria uma sublista alocando memória através da função malloc quando se fizer necessário” . Colocar bibliografia, fonte de pesquisa. Usar o comando union para criar um subEstrutura... Prof.: Sergio Pacheco 25 25
Bom final de semana e até semana que vem !!! ( Prof.: Sergio Pacheco 26 26