Estrutura de Dados Avançada

30
ESTRUTURA DE DADOS AVANÇADA Structs (Estruturas de Dados Heterogêneas) Prof. Mário Dantas

description

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 ). - PowerPoint PPT Presentation

Transcript of Estrutura de Dados Avançada

Page 1: Estrutura de Dados Avançada

ESTRUTURA DE DADOS AVANÇADAStructs (Estruturas de Dados Heterogêneas)Prof. Mário Dantas

Page 2: Estrutura de Dados Avançada

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)

Page 3: Estrutura de Dados Avançada

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

Page 4: Estrutura de Dados Avançada

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

Page 5: Estrutura de Dados Avançada

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

Page 6: Estrutura de Dados Avançada

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

Page 7: Estrutura de Dados Avançada

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>;

Page 8: Estrutura de Dados Avançada

8

SINTAXE NA LINGUAGEM CExemplo:

struct data{ int dia; int mes; int ano;};

Page 9: Estrutura de Dados Avançada

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.

Page 10: Estrutura de Dados Avançada

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.

Page 11: Estrutura de Dados Avançada

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 struct do 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>;

Page 12: Estrutura de Dados Avançada

12

SINTAXE NA LINGUAGEM C Por exemplo um struct endereço que guarda

os elementos nome, rua, cidade, estado e cepstruct endereco{

char nome[30];char rua[40];long int cep;

}; Foi feita apenas a declaração da struct, ainda não

foi criada nenhuma variável da struct endereço O comando para declarar uma variável com esta

struct é:struct endereco info_end;

Page 13: Estrutura de Dados Avançada

13

SINTAXE NA LINGUAGEM C

struct data{ int dia; int mes; int ano;};...struct data x;

• Duas maneiras de declarar a variável x do tipo data:

struct data{ int dia; int mes; int ano;} x;

ou

Dois comandos:•Define estrutura como novo tipo•Declara variável do novo tipo definido

Um comando:•Define estrutura e declara variável do novo tipo definido

Page 14: Estrutura de Dados Avançada

14

SINTAXE NA LINGUAGEM C Já vimos que para acessar os membros de

uma struct deve-se usar nome_variável.nome_membro

Portanto, considerando o exemplo anterior Para inicializar o cep da variável info_end que é

uma variável da struct endereço se faria:info_end.cep = 123456;

Para obter o nome da pessoa e colocar na string nome da struct se poderia utilizar:

gets(info_end.nome); Para imprimir o endereço seria:

printf(“%s”, info_end.rua);

Page 15: Estrutura de Dados Avançada

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.

Page 16: Estrutura de Dados Avançada

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;

}

Page 17: Estrutura de Dados Avançada

17

SINTAXE NA LINGUAGEM C Exemplo 2

#include <stdio.h>#include <string.h>struct endereco {char rua[40];int num;int complemento;char cep[10];};main() {struct endereco e1; // declaração de variáveis do tipostruct endereco e2; // "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");

Page 18: Estrutura de Dados Avançada

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 dadosprintf("\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);

}

Page 19: Estrutura de Dados Avançada

19

SINTAXE NA LINGUAGEM C Novos tipos de dados podem ser definidos

utilizando-se a palavra-chave typedef.

typedef struct nome_da_estrutura{ <tipo> campo_1; <tipo> campo_2; ... <tipo> campo_n;} nome_do_tipo;

Page 20: Estrutura de Dados Avançada

20

SINTAXE NA LINGUAGEM C Exemplo:

typedef struct data{ int dia; int mes; int ano;} tipoData;

Page 21: Estrutura de Dados Avançada

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.

struct data dia_de_hoje;

tipoData dia_de_hoje;

Page 22: Estrutura de Dados Avançada

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.

Page 23: Estrutura de Dados Avançada

23

ESTRUTURAS ANINHADAS - EXEMPLO

typedef struct data{ int dia; int mes; int ano;} tipoData;

typedef struct aluno{ int matricula; string nome; tipoData dataNascimento;} tipoAluno;

Page 24: Estrutura de Dados Avançada

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:

struct data *ap_ontem;

tipoData *ap_amanha;

Page 25: Estrutura de Dados Avançada

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>

Page 26: Estrutura de Dados Avançada

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];struct endereco vetorEndAmigos[100];

Page 27: Estrutura de Dados Avançada

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”);

Page 28: Estrutura de Dados Avançada

28

VETOR DE STRUCT Exemplo:

struct endereco{char nome[30];char rua[40];char cidade[20];char estado[3];long int cep;

};main(){

struct endereco info_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();

}

Page 29: Estrutura de Dados Avançada

29

TRABALHO1. 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.

2. 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.

Page 30: Estrutura de Dados Avançada

30

TRABALHO1. 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.

2. 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.