Escolar Documentos
Profissional Documentos
Cultura Documentos
ESTRUTURAS
DE DADOS
Professora: Alessandra Dahmer
1 INTRODUO
O objetivo desta disciplina introduzir as principais Estruturas de Dados e seus
algoritmos.
Mas antes de mais nada, deve-se responder a uma questo: Qual o papel das
Estruturas de Dados no processo de desenvolvimento de software?
Em um projeto de software, existem dois aspectos que devem ser estudados: os
procedimentos que devem ser previstos pelo software e sobre que dados estes procedimentos
iro atuar.
Nas tcnicas estruturadas de projeto de software era dada nfase aos procedimentos,
com a identificao dos aspectos funcionais na primeira etapa de desenvolvimento do software.
Com as tcnicas para especificao dos dados a nvel conceitual, a importncia dos
procedimentos e dados tornou-se equilibrada. Atualmente, j existem tcnicas de programao
com nfase nos dados (programao baseada em objetos).
Mas, independentemente das tcnicas de anlise e programao utilizadas, programas
precisam manipular dados e extremamente importante o conhecimento de conceitos e
detalhes da implementao das diversas estruturas de dados que manipulam estes dados.
Neste texto, inicialmente, alguns conceitos bsicos so apresentados. seguir, so
descritas as principais Estruturas de Dados, com seus respectivos algoritmos.
2 CONCEITOS BSICOS
Neste captulo, sero apresentados conceitos essenciais para o desenvolvimento desta
disciplina: Tipos de Dados, Tipos Abstratos de Dados e Estruturas de Dados.
2.1 TIPOS DE DADOS
Em computao precisamos identificar os tipos de dados que o computador, a
linguagem de programao ou mesmo um algoritmo so capazes de entender. De uma forma
geral, os Tipos de Dados so diferenciados pelos valores que podem assumir e pelo conjunto
de operaes que podemos efetuar com eles.
Em linguagens de programao o Tipo de Dados de uma varivel define o conjunto de
valores que esta varivel pode assumir. Uma varivel do tipo lgico, por exemplo, pode
assumir dois valores: verdadeiro ou falso. As possibilidades do hardware so previstas pela
linguagem.
3 LISTAS LINEARES
Definio: Dizemos que um conjunto de registros R={ R1, R2, R3, ..., Rn }, onde n >
0, tem uma estrutura de lista linear para uma determinada relao de precedncia, quando:
R1 o 1 elemento;
Rn o ltimo elemento;
Rk precede Rk+1 para 1 k < n;
As listas lineares so estruturas de tamanho varivel e podem ter seus elementos
ordenados ou no. Cada elemento de uma lista linear pode tambm ser chamado de nodo ou
n.
As operaes mais frequentes em listas lineares so as seguintes::
1) Acessar o k-simo elemento (Exemplo: Acessar o segundo elemento - k=2 )
2) Inserir nodo antes/depois do k-simo elemento
3) Retirar o k-simo elemento (Exemplo: Acessar o terceiro elemento - k=3 )
4) Contar o nmero de nodos (A contagem do nmero de nodos define o tamanho, ou
comprimento, da lista)
5) Pesquisar por um valor (A pesquisa por um valor busca encontrar a posio do
nodo que contm a informao que est sendo procurada)
6) Combinar (Combinar duas listas lineares colocar os elementos das duas listas em
uma s, de forma ordenada ou no)
7) Dividir (Listas lineares podem ser divididas em duas ou mais listas, de acordo com
algum critrio pr-definido. Exemplo: Dividir a lista ao meio)
8) Classificar (Os elementos de uma lista linear podem ser classificados. Exemplo:
Elementos em ordem alfabtica)
Casos particulares de listas, definidos basicamente com restries para incluses e
remoes nas listas, sero detalhados nos prximos captulos. So eles: pilhas, filas e deques.
As listas lineares so classificadas de acordo com o tipo de armazenamento em: listas
lineares sequenciais e as listas lineares encadeadas. A seguir sero apresentados estes dois
tipos de listas e os respectivos algoritmos para implementar as principais operaes.
7) Inserir Nodo na posio correta em uma lista sequencial ordenada, sem repeties de
elementos:
if f = n
then LISTA CHEIA
else
if f = ^
then
f f + 1
INFOf VALOR
else
kf
while k ^ and INFOk > VALOR
kk-1
if k = ^ or INFOk < VALOR
then
i f
while i > k
INFOi+1 INFOi
i i - 1
INFOi+1 VALOR
f f + 1
else VALOR J EST NA LISTA
3.2 LISTAS ENCADEADAS
As listas encadeadas utilizam alocao dinmica. Este tipo de alocao ideal quando
no pode-se definir previamente o tamanho da lista. Assim, no possvel definir o tamanho de
memria necessrio para armazenar toda a lista.
Neste caso, so utilizados registros distribudos aleatoriamente na memria e
interligados atravs de ponteiros para o endereo de memria para o prximo elemento. Uma
lista encadeada pode ser representada pela figura abaixo:
INICIAL:
i ^
1) Acessar o k-simo elemento:
if i = ^ or k < 1
then Elemento no existe
else
ji
CONTA 1
while CONTA < k and j ^
j PROXj
CONTA CONTA + 1
if j = ^
then NO EXISTE ELEMENTO K
else VALOR INFOj
2) Inserir Nodo depois do nodo apontado por k:
ALOQUE(t)
INFOt VALOR
PROXt PROXk
PROXk t
3) Inserir Nodo antes do nodo apontado por k:
ALOQUE(t)
INFOt VALOR
PROXt k
if i = k
then i t
else a i
while PROXa k
a PROXa
PROXa t
10
4 PILHAS
Uma pilha uma lista linear na qual todas as inseres e remoes so efetuadas no
mesmo extremo da lista, no final da lista linear. Ou seja:
A insero de um elemento torna-o o ltimo da lista linear
O elemento retirado na remoo sempre o ltimo elemento da lista (topo).
Devido s caractersticas das operaes da pilha, o ltimo elemento a ser inserido ser
o primeiro a ser retirado. Estruturas deste tipo so conhecidas como LIFO (Last In, First
Out).
Notao:
Topo da Pilha: elemento ao qual se tem acesso imediato
Empilhar: colocar um elemento no topo da pilha
Desempilhar: retirar o elemento do topo
Exemplo: Em Pascal, as pilhas so utilizadas para implementar a recursividade em um
programa.
INICIAL:
t^
(TOPO DA PILHA)
11
EMPILHAR (PUSH)
DESEMPILHAR (POP)
if t = n
if t = ^
then OVERFLOW
else
tt+1
INFOt VALOR
then UNDERFLOW
else
VALOR INFOt
tt-1
INICIAL:
t^
(TOPO DA PILHA)
EMPILHAR (PUSH)
DESEMPILHAR (POP)
ALOQUE(p)
INFOp VALOR
PROXp t
tp
if t = ^
then UNDERFLOW
else
VALOR INFOt
pt
t PROXt
DESALOQUE(p)
12
5 FILAS
Uma fila uma lista linear onde todas as operaes de insero so efetuadas apenas
no final e remoes apenas no incio da lista linear. Ou seja:
A insero de um elemento torna-o o ltimo da lista linear
O elemento retirado na remoo sempre o primeiro
Devido s caractersticas das operaes da fila, o primeiro elemento a ser inserido ser
o primeiro a ser retirado. Estruturas deste tipo so conhecidas como FIFO (First In, First
Out).
Exemplo: Fila de uma impressora, onde as primeiras solicitaes que chegam so as
primeiras a serem impressas.
INSERO
REMOO
if SUC(f) = 1
then OVERFLOW
else
f SUC(f)
INFOf VALOR
if i = f
then UNDERFLOW
else
i SUC(i)
VALOR INFOi
13
SUC(p)
if p = n
then SUC 1
else SUC p + 1
Obs : A Rotina SUC implementa a lista sequencial de maneira circular, permitindo que
todos os espaos livres da lista possam ser ocupados.
5.2 FILAS ENCADEADAS
5.2.1 Filas Simplesmente Encadeadas
INICIAL:
i ^
f ^
INSERO
REMOO
ALOQUE(p)
INFOp VALOR
PROXp ^
if i = ^
then i p
else PROXf p
fp
if i = ^
then UNDERFLOW
else
pi
i PROXi
VALOR INFOp
DESALOQUE(p)
14
INICIAL:
ALOQUE(i)
PROXi ^
f ^
INSERO
REMOO
ALOQUE(p)
INFOp VALOR
PROXp ^
PROXf p
fp
if PROXi = ^
then UNDERFLOW
else
p PROXi
VALOR INFOp
PROXi PROXp
if p = f then f i
DESALOQUE(p)
INICIAL:
ALOQUE(i)
PROXi i
f ^
INSERO
REMOO
ALOQUE(p)
INFOp VALOR
PROXp i
PROXf p
fp
if PROXi = i
then UNDERFLOW
else
p PROXi
VALOR INFOp
PROXi PROXp
if p = f then f i
DESALOQUE(p)
15
6 DEQUES
Um deque (Double-Ended QUEue) uma lista linear onde as operaes de
insero e remoo podem ser efetuadas tanto no incio quanto no final da lista linear. Ou seja:
A insero de um elemento pode torn-lo o primeiro ou o ltimo da lista linear
O elemento retirado na remoo o primeiro ou o ltimo elemento da lista
Existem variaes de deque, restries nos deques faz com que uma das operaes s
possa ser efetuada em uma das extremidades do deque:
deque de entrada restrita:
onde as inseres s podem ser
efetuadas ou no incio ou no final
da lista linear
Podemos perceber que pilhas e filas so casos particulares de deque, dependendo das
restries que forem feitas quanto insero e retirada.
16
INSERO - EXT.A
REMOO - EXT.A
if PRED(i) = f
then OVERFLOW
else
i PRED(i)
INFOi VALOR
if i = f
then UNDERFLOW
else
VALOR INFOi
i SUC(i)
INSERO - EXT.B
REMOO - EXT.B
if SUC(f) = 1
then OVERFLOW
else
INFOf VALOR
f SUC(f)
if i = f
then UNDERFLOW
else
f PRED(f)
VALOR INFOf
SUC(p)
if p = n
then SUC 1
else SUC p + 1
PRED(p)
if p = 1
then PRED n
else PRED p - 1
17
INSERO - INCIO
ALOQUE(p)
INFO(p) VALOR
PROXp PROXi
ANTp i
ANTPROXp p
PROXi p
REMOO - INCIO
if PROXi = i
then UNDERFLOW
else
p PROXi
PROXANTp PROXp
ANTPROXp ANTp
DESALOQUE(p)
INSERO - FINAL
ALOQUE(p)
INFO(p) VALOR
f ANTi
PROXp PROXf
ANTp f
ANTPROXp p
PROXf p
REMOO - FINAL
if PROXi = i
then UNDERFLOW
else
p ANTi
PROXANTp PROXp
ANTPROXp ANTp
DESALOQUE(p)
18