Estrutura de Dados - Introdução e Alocação de Memória

Propaganda
Estrutura de Dados
Introdução e Alocação de Memória
Vilson Heck Junior
Instituto Federal de Santa Catarina
2015
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Sumário
1
Sumário
2
Introdução
3
Dados Compostos Heterogêneos
O Problema
A Solução
Objetos em Java
Exercı́cio
4
Alocação de Memória
Alocação Dinâmica de Memória
5
Referências Bibliográficas
2 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Sumário
1
Sumário
2
Introdução
3
Dados Compostos Heterogêneos
O Problema
A Solução
Objetos em Java
Exercı́cio
4
Alocação de Memória
Alocação Dinâmica de Memória
5
Referências Bibliográficas
3 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Introdução às Estruturas de Dados
Computação x Dados
Por definição um computador é uma máquina capaz de trabalhar
com uma grande quantidade de informações em um tempo
reduzido. Para que esse trabalho seja realizado as informações
envolvidas devem ser organizadas, para então poderem ser
manipuladas e utilizadas de forma conveniente.
Objetivo das Estruturas
O objetivo maior das estruturas de dados é prover diferentes
formas para organizar as informações utilizadas por um programa
de computador. Esse objetivo é circundado por técnicas de
manipulação aplicadas às informações organizadas, de forma a
utilizá-las para a resolução de problemas diversos.
(Alexandre Savaris, 2006)
4 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Representação de Dados
Um computador é um dispositivo eletrônico e, por isso, é
composto por circuitos elétricos. A ausência ou presença de tensão
elétrica, em cada circuito, representa um valor para de bit: 0 (na
ausência de tensão) ou 1 (na presença de tensão).
O bit, por sua vez, é o menor dado que pode ser representado por
um computador e, quando arranjado com outros bit, compõem
bytes, ou ainda conjuntos de bytes, que representam dados. Este
arranjo é determinado por uma estrutura, então: Estrutura de
Dados.
5 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Representação de Dados
Um computador é um dispositivo eletrônico e, por isso, é
composto por circuitos elétricos. A ausência ou presença de tensão
elétrica, em cada circuito, representa um valor para de bit: 0 (na
ausência de tensão) ou 1 (na presença de tensão).
O bit, por sua vez, é o menor dado que pode ser representado por
um computador e, quando arranjado com outros bit, compõem
bytes, ou ainda conjuntos de bytes, que representam dados. Este
arranjo é determinado por uma estrutura, então: Estrutura de
Dados.
5 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Variáveis
As estruturas de dados mais simples são as variáveis. Cada variável
armazena um único dado, referente a qualquer coisas do tipo de
dado determinado. Mas e se precisarmos armazenar conjuntos de
dados que são de tipos diferentes, mas que são relacionados à
mesma coisa?
Toda variável possuı́ um tipo de dado primitivo, que determina a
sua estrutura. Esta estrutura limita o dado armazenado quanto ao
seu valor. Por exemplo, um tipo de dado numérico não é adequado
para armazenar texto, ou vice-versa. Ainda, um mesmo tipo de
dado numérico é capaz de armazenar valores numéricos exclusivos
de um determinado intervalo.
6 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Variáveis
As estruturas de dados mais simples são as variáveis. Cada variável
armazena um único dado, referente a qualquer coisas do tipo de
dado determinado. Mas e se precisarmos armazenar conjuntos de
dados que são de tipos diferentes, mas que são relacionados à
mesma coisa?
Toda variável possuı́ um tipo de dado primitivo, que determina a
sua estrutura. Esta estrutura limita o dado armazenado quanto ao
seu valor. Por exemplo, um tipo de dado numérico não é adequado
para armazenar texto, ou vice-versa. Ainda, um mesmo tipo de
dado numérico é capaz de armazenar valores numéricos exclusivos
de um determinado intervalo.
6 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Sumário
1
Sumário
2
Introdução
3
Dados Compostos Heterogêneos
O Problema
A Solução
Objetos em Java
Exercı́cio
4
Alocação de Memória
Alocação Dinâmica de Memória
5
Referências Bibliográficas
7 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Dados Compostos Heterogêneos
Muitas Variáveis
Se pensarmos em uma pessoa, ela pode ser descrita com diversos
dados, por exemplo: Nome, Idade, Endereço, CPF, ... Então,
utilizando variáveis, precisarı́amos declarar diversas variáveis para
cada pessoa que gostarı́amos de armazenar, obtendo um enorme
número de variáveis. Uma forma de resolver esta múltipla alocação
de variáveis é chamado de Dados Compostos Heterogêneos,
Registros ou, ainda, Estruturas.
Dados Compostos Heterogêneos
Estruturar e/ou Agrupar, de forma organizada, os dados que são
relacionados à mesma tarefa ou elemento.
8 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Dados Compostos Heterogêneos
Muitas Variáveis
Se pensarmos em uma pessoa, ela pode ser descrita com diversos
dados, por exemplo: Nome, Idade, Endereço, CPF, ... Então,
utilizando variáveis, precisarı́amos declarar diversas variáveis para
cada pessoa que gostarı́amos de armazenar, obtendo um enorme
número de variáveis. Uma forma de resolver esta múltipla alocação
de variáveis é chamado de Dados Compostos Heterogêneos,
Registros ou, ainda, Estruturas.
Dados Compostos Heterogêneos
Estruturar e/ou Agrupar, de forma organizada, os dados que são
relacionados à mesma tarefa ou elemento.
8 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
O Problema: Numerosas Variáveis
9 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
A Solução: Dados Compostos Heterogêneos - Objetos
10 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Criando uma Classe class em Java
Como visto em slide anterior, uma class pode ser composta de
vários campos de diferentes tipos de dados;
A criação desta class é feita em novo arquivo, dentro de um
package e fora de qualquer outra class;
Após a declaração class, devemos colocar um bloco { };
Dentro do bloco { }, devemos declarar os elementos que irão
compor a estrutura. A declaração de cada elemento deve ser
antecedida pela palavra: public.
11 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Criando uma Classe class em Java
Como visto em slide anterior, uma class pode ser composta de
vários campos de diferentes tipos de dados;
A criação desta class é feita em novo arquivo, dentro de um
package e fora de qualquer outra class;
Após a declaração class, devemos colocar um bloco { };
Dentro do bloco { }, devemos declarar os elementos que irão
compor a estrutura. A declaração de cada elemento deve ser
antecedida pela palavra: public.
11 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Criando uma Classe class em Java
Como visto em slide anterior, uma class pode ser composta de
vários campos de diferentes tipos de dados;
A criação desta class é feita em novo arquivo, dentro de um
package e fora de qualquer outra class;
Após a declaração class, devemos colocar um bloco { };
Dentro do bloco { }, devemos declarar os elementos que irão
compor a estrutura. A declaração de cada elemento deve ser
antecedida pela palavra: public.
11 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Criando uma Classe class em Java
Como visto em slide anterior, uma class pode ser composta de
vários campos de diferentes tipos de dados;
A criação desta class é feita em novo arquivo, dentro de um
package e fora de qualquer outra class;
Após a declaração class, devemos colocar um bloco { };
Dentro do bloco { }, devemos declarar os elementos que irão
compor a estrutura. A declaração de cada elemento deve ser
antecedida pela palavra: public.
11 / 22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package MeuPrograma ;
class Pessoa { // Declaraç~
a o da classe Pessoa
public String Nome ; // Atributo Nome
public int Idade ; // Atributo Idade
public String Endereco ; // Atributo Endereco
public long CPF ; // Atributo CPF
}
public class Programa {
public static void main ( String [] args ) {
Pessoa p1 = new Pessoa () ;
p1 . Nome = " Fulano de Tal " ;
p1 . Idade = 20;
p1 . Endereco = " Rua XYZ , 12 " ;
p1 . CPF = 1234567890;
}
}
Criação e Inicialização de class em Java
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Aplicação em Array
Um bom exemplo de simplificação que obtemos ao usar a class
Pessoa, que criamos anteriormente, é apresentada ao utilizarmos
um array para armazenar um determinado número de objetos
Pessoa.
Arrays e outras Estruturas de Dados, que serão estudadas, passam
a ter capacidade de armazenar elementos mais complexos, assim
como uma Pessoa, que é composta por diversos dados diferentes.
1
2
3
4
5
6
7
8
9
10
// Array de 10 Pessoas
Pessoa [] pes = new Pessoa [10];
pes [0] = new Pessoa () ;
pes [0]. Nome = " Fulano de Tal " ;
pes [0]. Idade = 20;
pes [1] = new Pessoa () ;
pes [1]. Nome = " Ciclano de Tal " ;
pes [1]. Idade = 51;
String texto = pes [0]. Nome ;
int nro = pes [1]. Idade ;
13 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Aplicação em Array
Um bom exemplo de simplificação que obtemos ao usar a class
Pessoa, que criamos anteriormente, é apresentada ao utilizarmos
um array para armazenar um determinado número de objetos
Pessoa.
Arrays e outras Estruturas de Dados, que serão estudadas, passam
a ter capacidade de armazenar elementos mais complexos, assim
como uma Pessoa, que é composta por diversos dados diferentes.
1
2
3
4
5
6
7
8
9
10
// Array de 10 Pessoas
Pessoa [] pes = new Pessoa [10];
pes [0] = new Pessoa () ;
pes [0]. Nome = " Fulano de Tal " ;
pes [0]. Idade = 20;
pes [1] = new Pessoa () ;
pes [1]. Nome = " Ciclano de Tal " ;
pes [1]. Idade = 51;
String texto = pes [0]. Nome ;
int nro = pes [1]. Idade ;
13 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Exercı́cio 01
Primeira Etapa
Faça um novo projeto para Console em Java;
Crie uma class chamada Contato, contendo os atributos:
String Nome;
long Telefone;
String Email;
Segunda Etapa
Dentro da função main declare um array (de tamanho 10) do tipo
Contato; e
Crie uma aplicação com um Menu(funcional) contendo:
1 - Cadastrar Contatos
2 - Listar Contatos
3 - Sair
O Menu deverá ser exibido até a escolha da opção Sair.
14 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Exercı́cio 01
Primeira Etapa
Faça um novo projeto para Console em Java;
Crie uma class chamada Contato, contendo os atributos:
String Nome;
long Telefone;
String Email;
Segunda Etapa
Dentro da função main declare um array (de tamanho 10) do tipo
Contato; e
Crie uma aplicação com um Menu(funcional) contendo:
1 - Cadastrar Contatos
2 - Listar Contatos
3 - Sair
O Menu deverá ser exibido até a escolha da opção Sair.
14 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Sumário
1
Sumário
2
Introdução
3
Dados Compostos Heterogêneos
O Problema
A Solução
Objetos em Java
Exercı́cio
4
Alocação de Memória
Alocação Dinâmica de Memória
5
Referências Bibliográficas
15 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Alocação de Memória
Estático
Até agora, aprendemos a alocar memória através da declaração de
variáveis e arrays. Vimos estratégias para resolver alguns
problemas pontuais, tais como:
Gerenciar um alto número de variáveis (através de arrays);
Definir uma class para associar dados heterogêneos;
O que falta?
Mas e se precisarmos alocar memória sob demanda?
Por exemplo, imagine o exercı́cio feito anteriormente, onde criamos
um array para armazenar 5 Contatos. O que aconteceria no caso
do usuário precisar cadastrar um sexto Contato?
16 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Alocação de Memória
Estático
Até agora, aprendemos a alocar memória através da declaração de
variáveis e arrays. Vimos estratégias para resolver alguns
problemas pontuais, tais como:
Gerenciar um alto número de variáveis (através de arrays);
Definir uma class para associar dados heterogêneos;
O que falta?
Mas e se precisarmos alocar memória sob demanda?
Por exemplo, imagine o exercı́cio feito anteriormente, onde criamos
um array para armazenar 5 Contatos. O que aconteceria no caso
do usuário precisar cadastrar um sexto Contato?
16 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
O Comando new
Em várias situações nós utilizamos o comando new, geralmente
sem entender qual era sua real função;
1
Pessoa [] pes = new Pessoa [10];
A partir de agora, devemos estudar melhor este comando, mas
acima de tudo, entender os conceitos que estão por trás do seu
funcionamento;
Devemos lembrar que este tipo de função existe em todas as
linguagens de programação, algumas vezes como mesmo nome,
outras vezes com nomes diferentes, mas com a mesma aplicação;
17 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
O Comando new
Em várias situações nós utilizamos o comando new, geralmente
sem entender qual era sua real função;
1
Pessoa [] pes = new Pessoa [10];
A partir de agora, devemos estudar melhor este comando, mas
acima de tudo, entender os conceitos que estão por trás do seu
funcionamento;
Devemos lembrar que este tipo de função existe em todas as
linguagens de programação, algumas vezes como mesmo nome,
outras vezes com nomes diferentes, mas com a mesma aplicação;
17 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Uso do Comando new
O comando new é utilizado para alocar memória:
1
int [] pes = new int [10];
No exemplo acima, solicitamos ao Sistema Operacional que dê ao
nosso programa, espaço suficiente para armazenar 10 números
inteiros, ou seja: 32bits × 10 = 40bytes.
Antes de armazenar qualquer dado, precisamos ter um espaço na
memória devidamente alocado. Isto é feito com o comando new.
As exceções ficam por conta das Variáveis de tipos de dados
primitivos, que dispensam o uso deste comando, mas que fazem a
alocação de espaço na memória no momento em que as
declaramos.
Segue exemplo de uso com tamanho informado pelo usuário.
18 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Uso do Comando new
O comando new é utilizado para alocar memória:
1
int [] pes = new int [10];
No exemplo acima, solicitamos ao Sistema Operacional que dê ao
nosso programa, espaço suficiente para armazenar 10 números
inteiros, ou seja: 32bits × 10 = 40bytes.
Antes de armazenar qualquer dado, precisamos ter um espaço na
memória devidamente alocado. Isto é feito com o comando new.
As exceções ficam por conta das Variáveis de tipos de dados
primitivos, que dispensam o uso deste comando, mas que fazem a
alocação de espaço na memória no momento em que as
declaramos.
Segue exemplo de uso com tamanho informado pelo usuário.
18 / 22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package MeuPrograma ;
import java . util . Scanner ;
public class Programa {
public static void main ( String [] args ) {
Scanner entrada = new Scanner ( System . in ) ;
int tamanho ;
String [] nomes ;
System . out . println ( " Tamanho do array : " ) ;
tamanho = entrada . nextInt () ;
nomes = new String [ tamanho ];
for ( int x = 0; x < tamanho ; x ++) {
System . out . print ( " Nome nro " + x + " : " ) ;
nomes [ x ] = entrada . nextLine () ;
}
System . out . println ( " Os " + tamanho + " nomes s~
ao : " ) ;
for ( int x = 0; x < tamanho ; x ++)
{
System . out . println ( nomes [ x ]) ;
}
}
}
Usando new para alocar um array em Java
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
A Memória
A Memória
Continua material sobre a memória e a alocação de memória.
20 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Sumário
1
Sumário
2
Introdução
3
Dados Compostos Heterogêneos
O Problema
A Solução
Objetos em Java
Exercı́cio
4
Alocação de Memória
Alocação Dinâmica de Memória
5
Referências Bibliográficas
21 / 22
Sumário
Introdução
Dados Compostos Heterogêneos
Alocação de Memória
Referências Bibliográficas
Referências Bibliográficas
Básicas
GOODRICH, M. T.; TAMASSIA, R.; Estruturas de dados e
algoritmos em Java. 4a Edição. Porto Alegre, 2006
ZIVIANI, N.; Programação de algoritmos com implementações
em Java e C++. 1a Edição. Cengage Learning, 2006
Complementares
CORMEN, T. H.; LEISERSON, C. E., et al.; Algoritmos Teoria e Prática. 4a Edição. São Paulo: Elsevier, 2009
PREISS, B. R.; Estrutura de Dados e Algoritmos. São Paulo:
Elsevier, 2001
22 / 22
Download