Aula 02 tad - structs - dcc302 - estrutura de dados I

22
DCC 302 – Estrutura de Dados I Prof. Acauan Ribeiro

description

Estrutura de dados I - Structs

Transcript of Aula 02 tad - structs - dcc302 - estrutura de dados I

Page 1: Aula 02   tad - structs -  dcc302 - estrutura de dados I

DCC 302 – Estrutura de Dados I Prof. Acauan Ribeiro

Page 2: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Tipos de Dados - Conceitos

Tipo de Dados: Define o conjuntos de valores (domínio) que uma variavel pode assumir. Ex.: int …-2, -1 , 0 , 1, 2, 3…

Para cada dado armazenado no computador, devemos definir o conjunto de valores que ele pode assumir. Denominamos a esse conjunto de tipo de dados. Por exemplo, um dado (variável) do tipo lógico pode assumir o valor verdadeiro ou falso .

Estrutura de Dados: Trata-se de um relacionamento lógico entre os tipos de dados.

Page 3: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Tipos de Dados Simples

Page 4: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Tipo de dados compostos

•A partir desses tipos de dados simples, podemos agrupá-los e formar outros tipos de dados, os quais denominamos de dados compostos. Os tipos de dados compostos derivam dos tipos simples e são úteis para armazenar grandes quantidades de um tipo de dados. Por exemplo, quando há necessidade de armazenar uma frase inteira ou, os tempos dos atletas que disputaram uma corrida. •Nestes dois exemplos, podemos criar tipos compostos que atendam às necessidades de cada problema. Para armazenar uma frase inteira podemos usar o tipo char que armazena caracteres, como as letras 'a', 'b' e 'x', para formar um vetor de caracteres, que denominamos de strings. Seguindo a mesma linha de raciocínio, podemos criar um vetor do tipo double para armazenar os tempos

Page 5: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Tipo de dados compostos

Veremos a seguir os dois principais tipos de dados compostos, são eles: •Vetor: É um conjunto de dados do mesmo tipo. Os vetores podem ser do tipo numérico, que armazenam valores do tip inteiro, tais como float, double, ou vetores que armazenam dados literais, que armazenam textos, podendo ser um caracter ou string. •Matriz: Conceitualmente, uma matriz é o vetor de vetores ou um vetor com mais de uma dimensão.

Page 6: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Tipo de dados compostos

Vetor[]

Page 7: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Tipo de dados compostos

Matriz[][]

Page 8: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Tipos Abstratos de Dados (TADs)

•Agrupa a estrutura de dados juntamente com

as operações que podem ser feitas sobre esses

dados

•O TAD encapsula a estrutura de dados. Os

usuários do TAD só tem acesso a algumas

operações disponibilizadas sobre esses dados

•Usuário do TAD x Programador do TAD

–Usuário só “enxerga” a interface, não a

implementação

Page 9: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Tipos Abstratos de Dados (TADs)

•Dessa forma, o usuário pode abstrair da

implementação específica.

•Qualquer modificação nessa implementação

fica restrita ao TAD

•A escolha de uma representação específica é

fortemente influenciada pelas operações a

serem executadas

Page 10: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Exemplo: Lista de números inteiros

•Operações –Faz Lista Vazia

–Insere número no começo da lista

–Remove de uma posição i

20 13 02 30 Implementação por Vetores:

void Insere(int x, Lista L) {

for(i=0;...) {...}

L[0] = x;

}

20 13 02 30

Implementação por Listas Encadeadas

void Insere(int x, Lista L) {

p = CriaNovaCelula(x);

L^.primeiro = p;

...

}

Programa usuário do TAD:

int main() {

Lista L;

int x;

x = 20;

FazListaVazia(L);

Insere(x,L);

...

}

Page 11: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Implementação de TADs

•Em linguagens orientadas por objeto (C++, Java) a

implementação é feita através de classes

•Em linguagens estruturadas (C, pascal) a implementação é

feita pela definição de tipos juntamente com a

implementação de funções

•Como vocês não vimos o conceito de orientação por

objetos*, vamos utilizar os conceitos de C

•(Typedef e Structs)

•Veremos alguns conceitos de Orientação por objetos (classes,

etc) que será aprofundado em outras disciplinas (POO).

Page 12: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Estruturas (Structs) em C / C++

•Uma estrutura é uma coleção de uma ou mais variáveis,

possivelmente de tipos diferentes, colocadas juntas sob um

único nome para manipulação conveniente

•Por exemplo, para representar um aluno são necessárias as

informações nome, matrícula, conceito

•Ao invés de criar três variáveis, é possível criar uma única

variável contendo três campos.

•Em C, usa-se a construção struct para representar esse tipo

de dado

Page 13: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Para que serve uma struct em C? Vamos supor que você foi contratado por uma grande empresa para criar um aplicativo de C que armazena todas as informações dos funcionários, um banco de dados. Como você faria para armazenar as idades deles?

Vamos supor que tem 300 funcionários.

int idades[300];

E os nomes? Vamos separar 50 caracteres para cada pessoa. Temos que ter 300 vetores (strings), cada um com 50 caracteres. Ficaria:

char nomes[300][50];

O mesmo para sua data de admissão, o salário de cada um, seus números de identificação, horários, cargos etc.

Page 14: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Para que serve uma struct em C?

Mas como você faria saber as informações de um funcionário especificamente?

Poderíamos pegar cada posição para uma pessoa. Por exemplo, o funcionário Bruce Dickinson seria o de número 50. Ou seja, para pegar o nome dele, vá para a posição 49 da matriz de strings. Para saber o salário dele, vá na posição de número 49 do vetor de floats que representa os salários. Na posição 49 do vetor de inteiros podemos obter a idade deles e assim vai. Isso tudo é possível, mas extremamente trabalhoso, confuso e nada organizado.

É para isso que existem as structs.

Page 15: Aula 02   tad - structs -  dcc302 - estrutura de dados I

O que é uma struct em C

Struct, ou estrutura, é um bloco que armazenam diversas informações. Poderíamos criar uma estrutura para cada funcionário, e dentro dessa estrutura tem variável do tipo int (para idade), do tipo string (para armazenar o nome), têm floats (que armazenam o salário de cada um), etc. E cada estrutura teria um nome, que seria algo relacionado com o funcionário. Assim, sempre que quiséssemos um dado de um funcionário, bastaríamos ter acesso a estrutura dele, e todas as informações viriam juntas. Essas estruturas, ou structs, podem ter quantos elementos você queira e dos tipos que você quiser. Você primeiro define a estrutura, seu nome e elementos. Depois você escolhe quantos elementos daquela estrutura quer ter, e os declara com nomes diferentes. Após isso, em vez de você manipular as milhares de variáveis dos mais diversos tipos que tenha criado, você trabalha só com a estrutura. Assim não tem que se ‘estressar’ com cada detalhe da estrutura. Esses detalhes são definidos somente uma vez, na declaração da estrutura.

Page 16: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Declarando a Struct em C Como já foi dito, struct nada mais é que um conjunto, ou bloco, de variáveis. A sintaxe é a seguinte

struct Nome_de_sua_struct { tipos nome_dos_tipos; };

Vamos declarar, como exemplo, uma struct para representar os dados dos funcionários:

struct Funcionario

{ int idade; char *nome; float salario; };

Page 17: Aula 02   tad - structs -  dcc302 - estrutura de dados I

O tipo struct Podemos ver as structs como um tipo de dado. Por exemplo, “Funcionario”, que foi declarado anteriormente, pode ser visto como um novo de tipo de variável. É uma variável, ou um tipo, que define os funcionários. Essa visão, de que criamos um novo tipo de variável, é tão certa que é possível criar e declarar mais variáveis do tipo “struct Funcionario”. A sintaxe para declarar outras structs do tipo “struct Funcionario” é:

struct Funcionario empregado1; struct Funcionario chefe; struct Funcionario secretaria; É aí que reside a beleza e importância das structs. Note que no momento da criação do modelo da struct “Funcionario”, declaramos um inteiro, uma string e um float dentro da struct. Assim, todas as structs do tipo “Funcionario” terão uma variável inteira, uma string e um float.

Page 18: Aula 02   tad - structs -  dcc302 - estrutura de dados I

O tipo struct

Outra maneira de declarar variáveis de um tipo struct que queremos, é criar esses elementos após as chaves na hora de criar a struct Funcionario. Veja:

struct Funcionario

{ int idade; char *nome; float salario; }empregado1, chefe, secretaria;

Page 19: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Como acessar, alterar e ler os elementos de uma struct em C

Vamos pegar nosso exemplo do tipo “struct Funcionario”. Criamos 3 funcionários desse tipo, e todos eles terão os mesmos elementos internos, com os mesmos nomes: idade, nome e salario.

Se tem o mesmo nome, como vamos diferenciar esses elementos, então?

Pelo nome da variável do tipo “struct Funcionario”.

Para acessar o elemento ‘elemento’ da struct de nome “MinhaStruct”, usamos a sintaxe: MinhaStruct.elemento

Apenas isso, basta botar um ponto após o nome que você escolheu para a struct. Após isso, estamos acessando normalmente a variável: chefe.idade -> é um inteiro como outro qualquer. empregado1.nome -> é uma string como outra qualquer. secretaria.salario -> é um float como outro qualquer.

Page 20: Aula 02   tad - structs -  dcc302 - estrutura de dados I

typedef

A palavra reservada typedef nada mais é do que um atalho em C para que possamos nos referir a um determinado tipo existente com nomes sinônimos. Por exemplo, com o typedef, em vez de termos que nos referir como 'struct Aluno', poderíamos usar somente 'Aluno' para criar structs daquele tipo. Em vez de escrever sempre 'struct Funcionario', poderíamos escrever apenas 'Funcionario' e então declarar várias structs do tipo 'Funcionario'. Embora possamos criar atalhos com typedef para outros tipos, o typedef é comumente usado com structs.

Page 21: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Exercícios

Faça os exercicios que estão no ambiente (ava.ufrr.br): •Atividade I – Aula 2 •Atividade II – Aula 2

Page 22: Aula 02   tad - structs -  dcc302 - estrutura de dados I

Referências

•http://www.cprogressivo.net •CELES, W; CERQUEIRA, R; & RANGEL, J. L. Introdução a Estrutura de Dados: Com técnicas de programação em C. Rio de Janeiro: Editora Campus/Elsevier, 2004.