• Nenhum resultado encontrado

Algoritmos e Estruturas de Dados I IEC012

N/A
N/A
Protected

Academic year: 2021

Share "Algoritmos e Estruturas de Dados I IEC012"

Copied!
26
0
0

Texto

(1)

Algoritmos e Estruturas de Dados I

IEC012

Linguagem C

Linguagem C

Estruturas

Estruturas

-Prof. César Melo

Slides preparados pelo Prof. Leandro Galvão galvao@dcc.ufam.edu.br

(2)

Estruturas de dados

Estruturas de dados

❖ Uma estrutura (structUma estrutura (struct) é uma coleção de uma ou ) é uma coleção de uma ou mais variáveis, possivelmente de tipos diferentes,

mais variáveis, possivelmente de tipos diferentes,

agrupadas sob um único nome.

agrupadas sob um único nome.

❖ Estruturas (ou registros) são classificados como Estruturas (ou registros) são classificados como

variáveis compostas heterogêneas

variáveis compostas heterogêneas, pois podem, pois podem

agrupar variáveis de tipos diferentes.

agrupar variáveis de tipos diferentes.

❖ Em contraposição, temos os vetores e matrizes Em contraposição, temos os vetores e matrizes classificados como variáveis compostas

classificados como variáveis compostas

homogêneas

(3)

Exemplo:

Exemplo:

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

Estruturas de dados

Estruturas de dados

(4)

A palavra-chave structA palavra-chave struct informa ao compilador informa ao compilador

que um modelo de estrutura está sendo definido.

que um modelo de estrutura está sendo definido. ❖ “data”data” é uma etiqueta é uma etiqueta que dá nome à que dá nome à definiçãodefinição

da estrutura.

da estrutura.

❖ Uma definição de estrutura é um comandoUma definição de estrutura é um comando, por , por

isso deve terminar em ponto-e-vírgula.

isso deve terminar em ponto-e-vírgula.

Estruturas de dados

(5)

❖ Os nomes declarados entre as chaves são os Os nomes declarados entre as chaves são os campos (ou membros)

campos (ou membros) da estrutura.da estrutura.

❖ Os campos de uma mesma estrutura devem ter Os campos de uma mesma estrutura devem ter nomes diferentes

nomes diferentes..

❖ Porém, estruturas diferentes podem conter Porém, estruturas diferentes podem conter campos com o mesmo nome

campos com o mesmo nome..

Estruturas de dados

(6)

Estruturas de dados

Estruturas de dados

❖ A definição de uma estrutura não reservaA definição de uma estrutura não reserva

qualquer

qualquer espaço na memóriaespaço na memória..

❖ Note que, no exemplo dado, nenhuma variável Note que, no exemplo dado, nenhuma variável

foi declarada de fato, apenas a forma dos dados

foi declarada de fato, apenas a forma dos dados

foi definida.

foi definida.

❖ Essa definição, porém, cria um novo tipo de Essa definição, porém, cria um novo tipo de dados

dados, que pode ser usado para declarar , que pode ser usado para declarar variáveis.

(7)

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

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

struct data { int dia; int mes; int ano; } x; ou Dois comandos: Dois comandos:

•DefineDefine estruturaestrutura como como novo tipo

novo tipo

•Declara variávelDeclara variável do do novo tipo definido novo tipo definido

Um comando: Um comando:

•DefineDefine estruturaestrutura e e declara variável

declara variável do do novo tipo definido novo tipo definido

Declarando uma estrutura

Declarando uma estrutura

(8)

❖ Os campos de uma estrutura podem ser de Os campos de uma estrutura podem ser de qualquer tipo

qualquer tipo, inclusive uma estrutura , inclusive uma estrutura previamente definida.

previamente definida.

❖ Porém, o tipo dos campos não podem ser o do Porém, o tipo dos campos não podem ser o do

próprio tipo que está sendo definido.

próprio tipo que está sendo definido.

Declarando uma estrutura

(9)

❖ A definição do formato de uma estrutura pode A definição do formato de uma estrutura pode

ser feita dentro da função principal (

ser feita dentro da função principal (mainmain) ou fora ) ou fora dela.

dela.

❖ Usualmente, declara-se fora da função principalUsualmente, declara-se fora da função principal, ,

de modo que outras funções também possam

de modo que outras funções também possam

“enxergar” a estrutura definida.

“enxergar” a estrutura definida.

Declarando uma estrutura

(10)

❖ Forma geral de definição de uma estrutura:Forma geral de definição de uma estrutura: struct <etiqueta> { <tipo> campo_1; <tipo> campo_2; ... <tipo> campo_n; } <variáveis>;

Estruturas de dados

Estruturas de dados

(11)

❖ Novos tipos de dados podem ser definidos Novos tipos de dados podem ser definidos

utilizando-se a palavra-chave

utilizando-se a palavra-chave typedeftypedef..

Declarando uma estrutura utilizando

Declarando uma estrutura utilizando

typedef

typedef

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

(12)

❖ Exemplo:Exemplo:

Declarando uma estrutura utilizando

Declarando uma estrutura utilizando

typedef

typedef

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

(13)

Declarando uma estrutura utilizando

Declarando uma estrutura utilizando

typedef

typedef

O uso mais comum de typedefO uso mais comum de typedef é com estruturas é com estruturas

de dados, pois evita que a palavra-chave

de dados, pois evita que a palavra-chave structstruct

tenha de ser colocada toda vez que uma

tenha de ser colocada toda vez que uma

estrutura é declarada.

estrutura é declarada.

struct data dia_de_hoje; TData dia_de_hoje;

(14)

<nome_da_variável>

<nome_da_variável>..<campo><campo>

Acessando os campos de uma estrutura

Acessando os campos de uma estrutura

102

Podemos acessar individualmente

Podemos acessar

individualmente

os

os

campos de uma determinada estrutura

campos de uma determinada estrutura

como se fossem variáveis comuns.

como se fossem variáveis comuns.

A sintaxe para acessar

A sintaxe para

acessar

e manipular

e

manipular

campos de estruturas é a seguinte:

campos de estruturas é a seguinte:

(15)

printf (“Digite o nome do aluno: ”); scanf (“%s”, aluno.nome);

printf (“Digite a idade do aluno: ”); scanf (“%d”, &aluno.idade);

❖ A leitura dos campos de uma estrutura a partir A leitura dos campos de uma estrutura a partir

do teclado deve ser feita campo a campo, como

do teclado deve ser feita campo a campo, como

se fosse variáveis independentes.

se fosse variáveis independentes.

Leitura dos campos de uma estrutura

(16)

❖ Um campo de uma estrutura pode ser uma outra Um campo de uma estrutura pode ser uma outra

estrutura.

estrutura.

❖ Quando isso ocorre, temos uma estrutura Quando isso ocorre, temos uma estrutura aninhada

aninhada..

❖ O padrão ANSI C especifica que as estruturas O padrão ANSI C especifica que as estruturas

podem ser aninhadas até

podem ser aninhadas até 15 níveis15 níveis, mas a , mas a maioria dos compiladores permite mais.

maioria dos compiladores permite mais.

Estruturas aninhadas

Estruturas aninhadas

(17)

Ponteiros para estruturas

Ponteiros para estruturas

❖ Como outros tipos de dados, ponteiros para Como outros tipos de dados, ponteiros para

estruturas são declarados colocando-se o

estruturas são declarados colocando-se o

operador

operador * * na frente do nome da variável na frente do nome da variável estrutura:

estrutura:

struct data *ap_ontem; TData *ap_amanha;

(18)

Ponteiros para estruturas

Ponteiros para estruturas

104

Para acessar uma estrutura com ponteiros

Para acessar uma estrutura com ponteiros

pode-se usar duas sintaxes:

pode-se usar duas sintaxes:

◗ Operador ponto:Operador ponto:

◗ Operador seta:Operador seta:

(*<ponteiro_estrutura>).<campo>

(19)

Vetor de estruturas

Vetor de estruturas

105

❖ Usado quando precisamos de diversas cópias de Usado quando precisamos de diversas cópias de

uma estrutura.

uma estrutura.

❖ Por exemplo, cada cliente de uma locadora de Por exemplo, cada cliente de uma locadora de

vídeo constitui um elemento de um vetor, cujo

vídeo constitui um elemento de um vetor, cujo

tipo é uma estrutura de dados que define as

tipo é uma estrutura de dados que define as

características de cada cliente.

características de cada cliente.

struct

(20)

Passando estruturas para funções

Passando estruturas para funções

❖ Podemos passar estruturas inteiras ou apenas Podemos passar estruturas inteiras ou apenas campos

campos destas como argumento para funções ou destas como argumento para funções ou procedimentos.

procedimentos.

❖ Tal passagem pode ser realizada por valorTal passagem pode ser realizada por valor ou por ou por referência

referência..

❖ As estruturas manipuladas por mais de uma As estruturas manipuladas por mais de uma

função devem ser declaradas globalmente,

função devem ser declaradas globalmente, antesantes

da definição da função.

(21)

Passando estruturas para funções

Passando estruturas para funções

:: Passando

:: Passando

campos por valor

campos por valor

❖ Este processo é realizado da mesma forma que Este processo é realizado da mesma forma que para variáveis simples

para variáveis simples, atentando-se para as , atentando-se para as peculiaridades das estruturas de dados.

peculiaridades das estruturas de dados.

106

// Chamada

funcao(estrutura.campo, ...); // Definicao formal

(22)

Passando estruturas para funções

Passando estruturas para funções

:: Passando

:: Passando

campos por referência

campos por referência

❖ Da mesma forma que acontece para variáveis Da mesma forma que acontece para variáveis

simples, deve-se pôr o operador

simples, deve-se pôr o operador && antes do nome antes do nome da estrutura na chamada da função.

da estrutura na chamada da função.

107

// Chamada

funcao(&estrutura.campo, ...); // Definicao formal

(23)

Passando estruturas para funções

Passando estruturas para funções

:: Passando

:: Passando

estruturas inteiras por valor

estruturas inteiras por valor

❖ Ao contrário de arrays, estruturas podem ser Ao contrário de arrays, estruturas podem ser

passadas

passadas por valorpor valor como argumentos de função. como argumentos de função.

❖ Para estruturas grandes, há o problema da cópia Para estruturas grandes, há o problema da cópia

de valores na pilha de memória.

de valores na pilha de memória.

108

// Chamada

funcao(estrutura, ...); // Definicao formal

(24)

Passando estruturas para funções

Passando estruturas para funções

:: Passando

:: Passando

estruturas inteiras por

estruturas inteiras por

referência

referência

❖ Permite alteração da estrutura sem necessidade Permite alteração da estrutura sem necessidade

de criação de uma cópia na memória.

de criação de uma cópia na memória.

109

// Chamada

funcao(&estrutura, ...); // Definicao formal

(25)

Passando estruturas para funções

Passando estruturas para funções

:: Passando

:: Passando

vetor de estruturas

vetor de estruturas

❖ Funciona de forma semelhante a vetor de Funciona de forma semelhante a vetor de

variáveis simples.

variáveis simples.

❖ Permite apenas passagem de parâmetros por Permite apenas passagem de parâmetros por

referência, pois trata-se, afinal, de um vetor.

referência, pois trata-se, afinal, de um vetor.

110

// Chamada

funcao(vetor, ...); // Definicao formal

(26)

Questões

Referências

Documentos relacionados

Para Rogers (1977) existem seis condições básicas para que ocorra o processo terapêutico, são elas: que duas pessoas estejam em contato psicológico; a primeira

• Árvores são ideais para armazenar hierarquias, além de serem mais rápidas e eficientes do que as estruturas de dados lineares... • É formada por um “conjunto de

– Os elementos devem estar ordenados – Realizar a busca pelo meio do vetor.

• Estas árvore podem assumir diferentes formas quando criadas ou modificadas. – A ordem de inserção ou remoção influem no formato

Apesar de o mercado acionário brasileiro ter se tornado mais importante para a economia brasileira, sobretudo entre o período de 2002 para 2005 (Tabela 3), sua repre- sentatividade

Para análise da susceptibilidade à erosão dos solos que compunham as paredes da voçoroca, foram realizados ensaios de Pinhole (Furo de Agulha), Desagregação e Dispersão

 Hemofiltração veno Hemofiltração veno--venosa: venosa: através de através de cateter, muito utilizada no tratamento da cateter, muito utilizada no tratamento da IRA.

É relevante, ainda, considerar que os termos “reciclagem/ formação” indiciam a vontade que o especialista, reconhecido como portador de um saber, tem de