Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

1
Estrutura de Dados
Alocação de memória
Prof. Elias Oliveira
2
Alocação de memória
⚫ Existem três maneiras de reservarmos espaço de memória para o 
armazenamento de informações:
⚫ Uso de variáveis globais (e estáticas).
⚫ Uso de variáveis locais.
⚫ Alocação dinâmica - Requisições ao sistema em tempo de execução.
3
Alocação de memória
⚫ Uso de variáveis globais (e estáticas). O espaço reservado para uma variável 
global existe enquanto o programa estiver sendo executado.
⚫ Uso de variáveis locais. Neste caso o espaço fica reservado apenas enquanto 
a função que declarou a variável está sendo executada, sendo liberado para 
outros usos quando a execução da função termina. 
⚫ As variáveis globais ou locais podem ser simples ou vetores, sendo que no 
caso dos vetores, é preciso informar o número máximo de elementos ou 
tamanho do vetor. 
⚫ A partir do tamanho informado, o compilador reserva o espaço 
correspondente.
4
Alocação de memória
• Alocação dinâmica. 
• O espaço alocado dinamicamente permanece reservado 
até que explicitamente seja liberado pelo programa. 
• Uma vez que o espaço é liberado fica disponível para 
outros usos. 
• Se o espaço alocado não for liberado explicitamente pelo 
programa, este será automaticamente liberado quando a 
sua execução terminar. 
5
Comparando Alocação de memória
Alocação estática:
• Vantagem: Possibilita acesso direto ao local da 
memória, uma vez que os dados se encontram 
armazenados de forma contígua ou sequencial.
• Consequentemente, em alguns casos, as operações de 
busca podem ter custo constante O(1).
6
Comparando Alocação de memória
Alocação estática:
• Desvantagem: É preciso determinar em tempo de codificação, quanto 
espaço é necessário. 
• Esta estimativa pode ser difícil de ser estabelecida e está sujeita a 
flutuações ao longo da execução.
• A alocação sequencial na memória prejudica as operações de inserção 
e remoção, uma vez que a sequencialidade dos dados precisa
• ser preservada. 
• Com isso, no pior caso, o custo destas operações pode ser de O(n).
7
Comparando Alocação de memória
Alocação dinâmica:
• Vantagem: não é necessário fixar o tamanho da estrutura.
• Evita o desperdício de espaço, e o risco de ficar sem espaço é 
reduzido. 
• Não existe restrição do número de inserções e remoções. 
• As operações de inserção e remoção não requerem de nenhum 
esforço adicional uma vez que envolvem somente o ajuste dos 
ponteiros.
8
Comparando Alocação de memória
Alocação dinâmica:
• Desvantagem: Como consequência da não linearidade na 
alocação dos dados, o acesso a um determinado elemento i 
torna necessário o percurso pelos i – 1 elementos anteriores na 
sequência.
• Esta propriedade, que caracteriza o acesso sequencial aos 
dados, torna a operação de busca por um elemento de custo 
O(n).
9
Estrutura de Dados
TAD LISTA 
Prof. Elias Oliveira
10
Listas
⚫ Existem certas estruturas clássicas que se comportam como padrões 
uma vez que são utilizadas na prática em diversos domínios de 
aplicação.
⚫ Existem duas formas de implementação : vetores e ponteiros.
⚫ Iremos iniciar com a TAD Listas.
11
Listas
⚫ As listas estão presentes em 
muitas atividades do dia a dia 
como, por exemplo, uma lista de 
compras de supermercado.
⚫ Um conjunto qualquer de 
elementos pode ser 
representado através de uma 
lista linear. 
12
Listas
⚫ Listas são estruturas flexíveis que possibilitam as inserções e 
remoções em qualquer posição.
⚫ Definição: uma estrutura linear, finita cuja ordem é dada a partir da 
inserção dos seus elementos componentes. 
⚫ As listas são estruturas compostas, constituídas por dados de forma a 
preservar a relação de ordem linear entre eles. 
⚫ Cada elemento na lista pode ser um dado primitivo ou complexo.
13
Listas lineares
⚫ Uma estrutura é dita linear uma vez que seus elementos 
componentes se encontram organizados de forma que todos, a 
exceção do primeiro e último, possuem um elemento anterior e um 
posterior, somente.
14
Listas lineares
• As características básicas da estrutura de dados lista são as seguintes:
• Homogênea. Todos os elementos da lista são do mesmo tipo.
• A ordem nos elementos é decorrente da sua estrutura linear, no entanto os elementos não 
estão ordenados pelo seu conteúdo, mas pela posição ocupada a partir da sua inserção.
• Para cada elemento existe anterior e seguinte, exceto o primeiro, que não possui anterior, e o 
último, que não possui seguinte.
• É possível acessar e consultar qualquer elemento na lista.
• É possível inserir e remover elementos em qualquer posição.
15
Interface do TAD Lista
// Cria uma lista vazia
Lista Criar ()
//insere numa dada posição na lista.
add (Lista , dado, posição)
// Retorna o elemento de uma dada 
posição
get (Lista l, posição);
// Remove o elemento de uma 
determinada posição
remove (Lista l, posição);
// Retorna 1 a lista vazia ou zero não vazia
int Vazia (Lista l);
// Retorna 1 cheia, ou zero vazia.
int Cheia (Lista l);
// Retorna a quantidade de elementos na 
lista.
int Tamanho (Lista l);
//Busca por um determinado elemento 
Busca (Lista l, dado);
//Altera valor do elemento 
set(Lista l, dado, posição);
16
TAD Lista usando alocação estática
⚫ Estruturas de dados que funcionam armazenando dados em um 
único vetor têm muitas vantagens e limitações em comum:
⚫ A estrutura de vetor pode ser usada para representar uma lista. 
⚫ Embora sejam fáceis de implementar Estruturas de dados que usam 
vetores tem alguns problemas.
17
Lista Linear
⚫ Vetores oferecem acesso com tempo constante a qualquer valor no vetor. Isto é o 
que permite que get(Lista l, posição)e set(Lista l, dado, 
posição); sejam executados em tempo constante.
⚫ Adicionar ou remover um elemento perto do meio de uma lista significa que um 
grande número de elementos precisam ser deslocado para abrir espaço para o 
elemento recém-adicionado ou para preencher a lacuna criada pelo elemento 
excluído.
⚫ É por isso que as operações add(Lista , dado, posição) e Remove 
(Lista l,posição); têm tempos de execução que dependem de número de 
elementos e posição.
18
Lista Linear add()
19
Lista Linear remove()
20
Lista Linear
⚫ Vetores não podem expandir ou encolher. Quando o número de 
elementos na estrutura de dados excede o tamanho de base,
⚫ Um novo vetor precisa ser alocado e os dados do vetor antigo 
precisam ser copiados para o novo vetor. Esta é uma operação cara.
21
Lista Linear - add
22
Lista Linear - remove
23
Prática – Listas estáticas
⚫ 1 - Crie uma lista e Reproduza as operações 
24
TAD Lista usando alocação dinâmica
⚫ A alocação de memória é gerenciada sob demanda em tempo de 
execução. 
⚫ Os elementos componentes são organizados em posições não 
contíguas, ficando espalhados ao longo da memória.
⚫ Não é preciso definir o tamanho da estrutura uma vez que o espaço é 
alocado na medida da necessidade.
25
TAD Lista usando alocação dinâmica
⚫ Graficamente, a estrutura de dados para a 
implementação de listas utilizando ponteiros 
é a seguinte:
26
TAD Lista usando alocação dinâmica
⚫ Por exemplo, uma lista com valores de 
ponteiros a endereços reais tem
a seguinte forma::
27
TAD Lista usando alocação dinâmica
⚫ O espaço total de memória gasto pela estrutura é proporcional ao 
número de elementos nela armazenados
⚫ Cada novo elemento inserido na estrutura é alocado um espaço de 
memória para armazená-lo.
⚫ Não é possível garantir que os elementos armazenados na lista 
ocuparão um espaço de memória contíguo, e, portanto não é possível 
ter acesso direto aos elementos da lista. 
⚫ Para isto, é preciso definir a estrutura do nó, como uma estrutura 
auto-referenciada contendo, além do conteúdo de informação, um 
ponteiro ao próximo elemento na sequência. 
28
TAD Lista usando alocação dinâmica
29
TAD Lista usando alocação dinâmica
30
TAD Lista usando alocação dinâmica
31
Variações da TAD Lista
Lista ordenada
• Uma lista ordenadaé uma lista onde seus elementos 
componentes são organizados de acordo a um critério de 
ordenação com base em um campo chave. 
• A ordem estabelecida determina que a inserção de um 
determinado elemento na lista irá a acontecer no lugar correto. 
• A lista pode ser ordenada de forma crescente ou decrescente.
• A função responsável pela busca por um determinado conteúdo 
na lista pode ser adaptado de forma a tornar a busca mais 
eficiente.
32
Variações da TAD Lista
Lista circular
• A convenção consiste em manter a última célula apontando para a primeira. 
• Precisa ser estabelecido um critério de parada de forma a evitar que o percurso na 
lista não encontre nunca o fim. 
• Uma forma padrão é estabelecido com base no número de elementos existentes na 
lista.
33
Variações da TAD Lista
Lista duplamente encadeada
Quando for conveniente o percurso da lista de trás para frente, inclui-se um atributo extra 
na estrutura de dados, contendo um ponteiro para a célula anterior. 
Custo extra no espaço requerido e no trabalho nas inserções e remoções
Simplifica a remoção, pois não mais precisamos procurar a célula anterior (O(n)), uma 
vez que esta pode ser acessada diretamente através do ponteiro correspondente.
34
Bibliografia
⚫ Estrutura de dados/ José Marcio Benite Ramos; Liluyoud Cury de Lacerda; 
Sara Luize Oliveira Duarte; UFMT; Porto Velho, 2013.ISBN 978-85-68172-
02-5. Disponível em: 
http://proedu.rnp.br/bitstream/handle/123456789/1531/15.3_versao_Final_c
om_ISBN-Estrutura_de_Dados_07.07.14.pdf?sequence=1&isAllowed=y
⚫ Cortés, Mariela Inés. Estrutura de dados– 3. ed. – Fortaleza, CE, 2015. 
ISBN: 978-85-7826-440-6. Disponível em: 
https://educapes.capes.gov.br/bitstream/capes/204083/2/Livro_Computaca
o_Estrutura%20de%20Dados.PDF
⚫ Pat, Morin. tradução e adaptação para o português do Brasil:João Araújo - 
Estruturas de Dados Abertas(em Java). Edição 0.1G – 18/08/2021- 
Disponível em: https://github.com/jaraujouerj/Estruturas-de-Dados-Abertos 
http://proedu.rnp.br/bitstream/handle/123456789/1531/15.3_versao_Final_com_ISBN-Estrutura_de_Dados_07.07.14.pdf?sequence=1&isAllowed=y
http://proedu.rnp.br/bitstream/handle/123456789/1531/15.3_versao_Final_com_ISBN-Estrutura_de_Dados_07.07.14.pdf?sequence=1&isAllowed=y
https://educapes.capes.gov.br/bitstream/capes/204083/2/Livro_Computacao_Estrutura%20de%20Dados.PDF
https://educapes.capes.gov.br/bitstream/capes/204083/2/Livro_Computacao_Estrutura%20de%20Dados.PDF
https://github.com/jaraujouerj/Estruturas-de-Dados-Abertos
	Slide 1: Estrutura de Dados
	Slide 2: Alocação de memória
	Slide 3: Alocação de memória
	Slide 4: Alocação de memória
	Slide 5: Comparando Alocação de memória
	Slide 6: Comparando Alocação de memória
	Slide 7: Comparando Alocação de memória
	Slide 8: Comparando Alocação de memória
	Slide 9: Estrutura de Dados
	Slide 10: Listas
	Slide 11: Listas
	Slide 12: Listas
	Slide 13: Listas lineares
	Slide 14: Listas lineares
	Slide 15: Interface do TAD Lista
	Slide 16: TAD Lista usando alocação estática
	Slide 17: Lista Linear
	Slide 18: Lista Linear add()
	Slide 19: Lista Linear remove()
	Slide 20: Lista Linear
	Slide 21: Lista Linear - add
	Slide 22: Lista Linear - remove
	Slide 23: Prática – Listas estáticas
	Slide 24: TAD Lista usando alocação dinâmica
	Slide 25: TAD Lista usando alocação dinâmica
	Slide 26: TAD Lista usando alocação dinâmica
	Slide 27: TAD Lista usando alocação dinâmica
	Slide 28: TAD Lista usando alocação dinâmica
	Slide 29: TAD Lista usando alocação dinâmica
	Slide 30: TAD Lista usando alocação dinâmica
	Slide 31: Variações da TAD Lista
	Slide 32: Variações da TAD Lista
	Slide 33: Variações da TAD Lista
	Slide 34: Bibliografia

Mais conteúdos dessa disciplina