Você está na página 1de 36

Abstração

de Dados
Ronaldo Barbosa
Sumário
Abstração de dados. Conhecer a estrutura de
1 • Vetores e exemplos lista em memoria contígua.

2 • Listas ligadas e exemplos Estrutura de lista em memória não contígua.

3 • Árvores e exemplos Conceito de árvore e aplicações.

4 • Resumo e dicas Filas e pilhas com listas ligadas.


Vetores e exemplos
Ronaldo Barbosa
Abstração de Dados

A forma como o usuário ou programador lida com os dados não corresponde à forma
como os dados estão realmente armazenados na memória do computador ou como
eles são realmente.

Chamamos de abstração de dados, estruturas muito úteis que “mascaram” os dados


para visualizar e manipular dados de forma a tornar as soluções de uso e programação
mais intuitivas.
Vetor (array) ou lista contígua
É uma lista linear na qual a ordem lógica dos elementos (a ordem “vista” pelo usuário) é a
mesma ordem física (em memória principal) dos elementos. Isto é, elementos vizinhos
na lista estarão em posições vizinhas de memória.
Bloco contínuo de células de memória

Primeiro nome Segundo nome Último nome


armazenado aqui armazenado aqui armazenado aqui

Uma lista de nomes de pessoas armazenadas de forma contígua


Imagem: Esquema adaptado pelo professor.
Vetor de notas
Elemento
Primeira posição
(na posição 8)

0 1 2 3 4 5 6 7 8 9 - Posições

9 4 8 7 3 2.5 6 5 3 4
Tamanho do array é 10

Array de 10 elementos
Imagem: http://www.squids.com.br/arduino/index.php/software/dicas-de-software/269-como-declarar-e-utilizar-arrays-no-arduino-vetores-e-matrizes (adaptado)

NOTAS [3] = 7
NOTAS [5] = 2.5
Para apagar ou inserir um elemento novo, os
elementos do vetor tem que ser movimentados!
Elemento
Primeira posição
(na posição 8)

0 1 2 3 4 5 6 7 8 9 - Posições

9 4 8 7 3 8
2.5 6 5 3 4

NOTA [5] = 8
Leitura de matriz armazenada na memória
contígua com início em x
Endereços

Células de
memória

Leituras [1]

Leituras [2]

LeiturasFonte:
[3](insira a fonte da imagem) tam 06

Leituras [4]
Imagem: Esquema adaptado pelo professor.

Percorrendo a lista na memória.


Matriz (4l x 5c) armazenada segundo a
sequência de linhas
Matriz é uma tabela organizada em linhas e colunas no formato m x n, onde m representa
o número de linhas (horizontal) e n o número de colunas (vertical). A função das matrizes
é relacionar dados numéricos.

Matriz conceitual

Matriz Bidimensional Memória da máquina


com 4 linhas e 5 colunas.

Elemento da terceira linha e quarta coluna


Imagem: Esquema adaptado pelo professor.
Listas ligadas e exemplos
Ronaldo Barbosa
Lista ligada

Uma Lista Ligada é uma estrutura que corresponde a uma sequência lógica de entradas
ou nós.

Em uma lista ligada há um ou dois pontos conhecidos de acesso -- normalmente o topo


da lista (seu primeiro elemento) e, eventualmente, o fim da lista (seu último elemento).
Cada nó armazena também a localização do próximo elemento na sequência, ou seja, de
seu nó sucessor. Desse modo, o armazenamento de uma lista não requer uma área
contígua de memória!
Lista ligada

Adeus às Armas Por Quem os Sinos O Sol Também se Levanta


de Ernest Hemingway Dobram de Ernest Hemingway
de Ernest Hemingway
Ponteiro Ponteiro Ponteiro

Fonte: Brrookshear (2013)


Lista ligada
Nesta estrutura os nomes não ocupam uma área contígua de memória, por isso cada
elemento da estrutura tem o dado (nome) e um apontador para o próximo nome.

Ponteiro para o
início da lista

Nome Ponteiro
Observe os Ponteiros ligando
os nós da lista.
Nome Ponteiro

Nome Ponteiro

Imagem: Esquema adaptado pelo professor.


Lista ligada: eliminando um elemento
Eliminação de um elemento em uma lista ligada.
Observe que a remoção de um elemento implica rearranjo de ponteiro e só!

Ponteiro para o
início da lista

Elemento removido

Nome Ponteiro
Eliminando um elemento Ponteiro antigo
da lista ligada.
Nome Ponteiro

Nome Ponteiro

Ponteiro novo
Imagem: Esquema adaptado pelo professor.
Lista ligada: inserindo um elemento
O mesmo acontece na inserção, só mudança de ponteiros!

Ponteiro para o
início da lista
Novo elemento

Nome Ponteiro
Ponteiro novo Ponteiro novo

Inserindo um elemento Nome Ponteiro Nome Ponteiro


na lista ligada.

Ponteiro antigo

Nome Ponteiro

Imagem: Esquema adaptado pelo professor.


Para apagar ou inserir um elemento novo, os
elementos do vetor tem que ser movimentados!
Elemento
Primeira posição
(na posição 8)

0 1 2 3 4 5 6 7 8 9 - Posições

9 4 8 7 3 8
2.5 6 5 3 4

NOTA [5] = 8
Árvores e exemplos
Ronaldo Barbosa
Índice
Árvores

• Conceito de árvore
• Uma ideia de implementação
• Árvore de pesquisa
• Exemplos de uso de árvores de pesquisa
Árvores: aplicação
Na computação, o uso das estruturas em árvore são comuns:

Estrutura de pastas em um diretório. Listas Numeradas com vários níveis.


Imagens: capturas de tela realizadas pelo professor.
Árvores

Em uma árvore, a organização dos elementos se dá de forma hierárquica, existindo um


elemento que fica no topo da árvore, chamado de raiz e os elementos subordinados a
ele, os nós filhos.

Cada nós filho pode conter zero, um ou mais de um nós filhos.


Árvores
Estruturas em árvore possibilitam algoritmos mais eficientes!

Nó raiz

Gêmeos

Subárvores

Nó terminal (ou folha) Imagem: Esquema adaptado pelo professor.


Árvore conceitual

Imagem conceitual de uma estrutura em árvore.

Imagem: Esquema adaptado pelo professor.


Árvore implementada por um sistema de
listas ligadas
Organização real do armazenamento
Ponteiro para a raiz da árvore

Imagem: Esquema adaptado pelo professor.

Organização conceitual e real de uma árvore binária com a utilização de um sistema de


armazenamento ligado.
Árvore de Pesquisa Binária

Uma árvore binária é uma estrutura de dados útil quando precisam ser tomadas decisões
bidirecionais em cada ponto de um processo.

Um exemplo: encontrar todas as repetições numa lista de números.


Uma forma para fazer isto é comparar cada número com todos que o precedem.
Árvore de Pesquisa Binária
Percorremos uma árvore para imprimir uma sequência de valores; para buscar um
elemento; para encontrar um elemento mínimo ou máximo; para obter o predecessor ou
sucessor de um elemento; para inserir ou eliminar um elemento.
Repare como a “altura” da árvore tem relação com percorrê-la!

Imagem: Esquema adaptado pelo professor.


Percursos em árvore binária

Observe como algoritmos


PreOrdem, InOrdem, PosOrdem
geram saídas diferentes!

Imagem: https://emersonbsi.wordpress.com/2015/06/07/arvore-binaria-percursos-pre-em-e-pos-ordem/
Exemplo: percorrendo uma árvore em ordem

A chave da raiz de uma sub-árvore é impressa entre os valores de sua sub-árvore


esquerda e sub-árvore direita.

Imagem: Esquema adaptado pelo professor.


Resumo e dicas
Ronaldo Barbosa
Índice
Resumos e dicas

• Filas
• Pilhas
• Exemplo na memória do computador
Pilha

São estruturas de dados do tipo LIFO (last-in first-out), onde o último elemento a ser
inserido, será o primeiro a ser retirado.

Assim, uma pilha permite acesso a apenas um item de dados - o último inserido. Para
processar o penúltimo item inserido, deve-se remover o último.

São muito importantes quando precisamos armazenar um conjunto de dados para ser
utilizado em um determinado software.
Uma pilha montada a partir de uma lista
ligada

Imagem: Esquema adaptado pelo professor.


Pilha: processo de desempilhar

Imagem: Esquema adaptado pelo professor.


A memória do computador tem estrutura
de uma pilha!
Exemplo com instruções:

Imagem: Esquema adaptado pelo professor.

Estado da pilha durante a execução do código ao lado.


Fila

São estruturas de dados do tipo FIFO (first-in first-out), onde o


primeiro elemento a ser inserido, será o primeiro a ser retirado, ou
seja, adiciona-se itens no fim e remove-se do início.
Implementação de uma fila
Ponteiro para Ponteiro para
o início da fila o início da fila

Ponteiro para Ponteiro para


o final da fila o final da fila

a. Fila vazia b. Após inserir o elemento A

Ponteiro para Ponteiro para


o início da fila o início da fila

Ponteiro para Ponteiro para


o final da fila o final da fila

c. Após inserir o elemento B d. Após remover o elemento A


Imagem: Esquema adaptado pelo professor.

Implementação utilizando ponteiros para início e fim da fila.


Uma fila que se move pela memória

Ponteiro para Ponteiro para Ponteiro para


o início da fila o início da fila o início da fila

Ponteiro para Ponteiro para Ponteiro para


o final da fila o final da fila o final da fila

b. Fila após acrescentar D, E e F d. Fila após acrescentar G H e


a. Fila contendo A, B e C
e remover A e B remover C e D

Imagem: Esquema adaptado pelo professor.

Você também pode gostar