1 / 30

Estrutura de Dados Avançada

Estrutura de Dados Avançada. Structs (Estruturas de Dados Heterogêneas) Prof. Mário Dantas. Conceito de struct. Vetores e matrizes Estruturas de dados homogêneas Armazenam vários valores, mas todos de um mesmo tipo (todos int , todos double , todos float , todos char ).

demont
Download Presentation

Estrutura de Dados Avançada

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. Estrutura de Dados Avançada Structs (Estruturas de Dados Heterogêneas) Prof. Mário Dantas

  2. Conceito de struct • Vetores e matrizes • Estruturas de dados homogêneas • Armazenam vários valores, mas todos de um mesmo • tipo (todos int, todos double, todos float, todos char)

  3. Conceito de struct • Problemas reais • Temos coleções de dados que são de tipos diferentes • Exemplo: ficha de um cadastro de cliente • Nome: string • Endereço: string • Telefone: string • Salário: float • Idade: int

  4. Conceito de struct • Registro (ou struct) • Tipo de dado estruturado heterogêneo • Coleção de variáveis referenciadas sobre um mesmo nome • Permite agrupar dados de diferentes tipos numa mesma estrutura (ao contrário de matrizes que possuem elementos de um mesmo tipo) • Cada componente de um registro pode ser de um tipo • diferente (int, char, ...) • Estes componentes são referenciados por um nome

  5. Conceito de struct • Os elementos do registro • São chamados de campos ou membros da struct • É utilizado para armazenar informações de um mesmo objeto • Exemplos: • carro: cor, marca, ano, placa, chassi • pessoa: nome, idade, endereço

  6. Conceito de struct • Campo (Field) • Conjunto de caracteres com o mesmo significado • Exemplo: nome • Registro (Struct ou Record) • Conjunto de campos relacionados • Exemplo: nome, endereço, telefone, salário e idade de uma pessoa

  7. Sintaxe na Linguagem C • A palavra reservada struct indica ao compilador que está sendo criada uma estrutura • Uma estrutura deve ser declarada após incluir as bibliotecas e antes da main struct <identificador_struct> { tipo <nome_variável_campo1>; tipo <nome_variável_campo2>; ... } <variáveis_estrutura>; struct <identificador_struct> <var1>, <var2>;

  8. Sintaxe na Linguagem C Exemplo: structdata { int dia; intmes; int ano; };

  9. Sintaxe na Linguagem C • A palavra-chave struct informa ao compilador que um modelo de estrutura está sendo definido. • “data” é uma etiqueta que dá nome à definição da estrutura. • Uma definição de estrutura é um comando, por isso deve terminar em ponto-e-vírgula.

  10. Sintaxe na Linguagem C • Os nomes declarados entre as chaves são os campos (ou membros) da estrutura. • Os campos de uma mesma estrutura devem ter nomes diferentes. • Porém, estruturas diferentes podem conter campos com o mesmo nome.

  11. Sintaxe na Linguagem C • Se o compilador C for compatível com o padrão C ANSI • Informação contida em uma struct pode ser atribuída a outra structdo mesmo tipo • Não é necessário atribuir os valores de todos os elementos/campos separadamente • Por exemplo: <var1> = <var2>; • Todos os campos de <var1> receberão os valores correspondentes dos campos de <var2> • Para acessar os campos da struct • Utiliza-se o nome da variável struct, seguido de ponto, seguido do nome do campo • Por exemplo: <var1>.<nome_variável_campo2>;

  12. Sintaxe na Linguagem C • Por exemplo um struct endereço que guarda os elementos nome, rua, cidade, estado e cep structendereco{ char nome[30]; char rua[40]; longintcep; }; • Foi feita apenas a declaração da struct, ainda não foi criada nenhuma variável da structendereço • O comando para declarar uma variável com esta struct é: structenderecoinfo_end;

  13. Sintaxe na Linguagem C • Duas maneiras de declarar a variável x do tipo data: struct data { int dia; int mes; int ano; }; ... struct data x; struct data { int dia; int mes; int ano; } x; ou • Dois comandos: • Defineestrutura como novo tipo • Declara variável do novo tipo definido • Um comando: • Defineestrutura e declara variável do novo tipo definido

  14. Sintaxe na Linguagem C • Já vimos que para acessar os membros de uma structdeve-seusar nome_variável.nome_membro • Portanto, considerando o exemplo anterior • Para inicializar o cep da variável info_end que é uma variável da structendereço se faria: info_end.cep= 123456; • Para obter o nome da pessoa e colocar na string nome da structse poderia utilizar: gets(info_end.nome); • Para imprimir o endereço seria: printf(“%s”, info_end.rua);

  15. Sintaxe na Linguagem C • A definição do formato de uma estrutura pode ser feita dentro da função principal (main) ou fora dela. • Usualmente, declara-se fora da função principal, de modo que outras funções também possam “enxergar” a estrutura definida.

  16. Sintaxe na Linguagem C • Exemplo 1: struct aluno { char nome[40]; float P1; float P2; float T; int faltas; };//como definição de estrutura é comando, precisa ";” main() { struct aluno joao, maria; joao.P1 = 9.5; joao.P2 = 8.5; joao.T = 9.0; joao.faltas = 4; maria = joao; }

  17. Sintaxe na Linguagem C • Exemplo 2 #include <stdio.h> #include <string.h> structendereco { char rua[40]; int num; int complemento; charcep[10]; }; main() { structenderecoe1; // declaração de variáveis do tipo structenderecoe2; // "endereco" compilador aloca mem. // inicialização dos campos de e1... strcpy(e1.rua, "Avenida Ipiranga"); e1.num = 1234; e1.complemento = 101; strcpy(e1.cep, "90000-123");

  18. Sintaxe na Linguagem C // inicialização dos campos de e2... strcpy(e2.rua, "Rua Lima e Silva"); e2.num = 1987; e2.complemento = 308; strcpy(e2.cidade, "Porto Alegre"); strcpy(e2.estado, "RS"); strcpy(e2.cep, "90000-345"); // exibe os dados printf("\n%s %d/%d", e1.rua, e1.num, e1.complemento); printf("\n%s, %s/%s", e1.cep, e1.cidade, e1.estado); printf("\n\n%s %d/%d", e2.rua, e2.num, e2.complemento); printf("\n%s, %s/%s", e2.cep, e2.cidade, e2.estado); }

  19. Sintaxe na Linguagem C • Novos tipos de dados podem ser definidos utilizando-se a palavra-chave typedef. typedefstructnome_da_estrutura { <tipo> campo_1; <tipo> campo_2; ... <tipo>campo_n; } nome_do_tipo;

  20. Sintaxe na Linguagem C • Exemplo: typedefstructdata { int dia; intmes; int ano; } tipoData;

  21. Sintaxe na Linguagem C • O uso mais comum de typedef é com estruturas de dados, pois evita que a palavra-chave struct tenha de ser colocada toda vez que uma estrutura é declarada. structdata dia_de_hoje; tipoDatadia_de_hoje;

  22. Estruturas aninhadas • Um campo de uma estrutura pode ser uma outra estrutura. • Quando isso ocorre, temos uma estrutura aninhada. • O padrão ANSI C especifica que as estruturas podem ser aninhadas até 15 níveis, mas a maioria dos compiladores permite mais.

  23. Estruturas aninhadas - Exemplo typedefstructdata { int dia; intmes; int ano; } tipoData; typedefstructaluno { int matricula; string nome; tipoDatadataNascimento; } tipoAluno;

  24. Ponteiros para estruturas • Como outros tipos de dados, ponteiros para estruturas são declarados colocando-se o operador * na frente do nome da variável estrutura: structdata *ap_ontem; tipoData *ap_amanha;

  25. Ponteiros para estruturas • Para acessar uma estrutura com ponteiros pode-se usar duas sintaxes: • Operador ponto: • Operador seta: *<ponteiro_estrutura>.<campo> <ponteiro_estrutura>-><campo>

  26. Vetor de Struct • O uso mais comum de struct é em vetores • Para declarar um vetor de struct • Define-se a struct • Declara-se o vetor do tipo struct criado • Exemplo: struct aluno Turma380[28]; structenderecovetorEndAmigos[100];

  27. Vetor de Struct • Para manipular os dados do vetor, devem • ser fornecidos o índice e o campo • Exemplo strcpy(Turma380[0].nome, “Fulano”); Turma380[0].P1 = 9.5; Turma380[0].P2 = 8.5; Turma380[0].T = 9.0; Turma380[0].faltas = 4; strcpy(vetorEndAmigos[0].rua, “Carlos Gomes”); strcpy(vetorEndAmigos[1].rua, “Goethe”);

  28. Vetor de Struct • Exemplo: structendereco{ char nome[30]; char rua[40]; char cidade[20]; char estado[3]; longintcep; }; main() { structenderecoinfo_end[5]; int i; for(i = 0; i < 5; i++){ printf("Informe o nome: \n"); gets(info_end[i].nome); } // Imprime todos os nomes do vetor for(i = 0; i < 5; i++) printf("%s\n", info_end[i].nome); fflush(stdin); getchar(); }

  29. Trabalho • Criar uma estrutura chamada DadosAluno, que armazena a média e idade de um aluno. Na função main: criar uma variável que é uma estrutura DadosAluno; ler a média e a idade de um aluno e armazenar na variável criada; exibir na tela a média e a idade do aluno. • Considerando o problema anterior, criar uma variável que é um vetor da estrutura DadosAluno. O programa deve obter a média e a idade de 10 alunos. Depois, estes dados devem ser exibidos.

  30. Trabalho • Fazer um programa que cria uma estrutura livro, que contém os elementos título, ano de edição, número de páginas e preço. Criar uma variável desta estrutura que é um vetor de 5 elementos. Ler os valores para a estrutura e imprimir a média do número de páginas do livros. • Foi realizada uma pesquisa entre 500 habitantes de uma certa região. De cada habitante foram coletados os dados: idade, sexo, salário e número de filhos. Crie a estrutura de dados adequada para armazenar estas informações e faça uma função que armazene as informações digitadas pelo usuário na estrutura de dados criada. Faça também uma função que calcula a média do salário dos habitantes.

More Related