Referncias Bibliogrficas
DROZDEK, Adam. Estrutura de dados e
algoritmos em C++. So Paulo: Cengage
learning, 2009.
Referncias Bibliogrficas
TENENBAUM, A. M; LANGSAM, Y;
AUGENSTEIN, A. J. Estrutura de
dados usando C. So Paulo: Makron
Books, 1995.
ESTRUTURA de DADOS
Lgico
Inteiro
Numrico
Real
Caracter
Ponteiro
Vetor
Matriz
Pilha
Fila
Lista
Grafo
rvore
Vetor
Matriz
Pilha
Fila
Lista
rvore
Grafo
DADO LGICO
Pode representar apenas dois valores:
verdadeiro e falso;
Pode ser representado na codificao
binria:
1 verdadeiro;
0 falso.
Tambm chamado de booleano.
9
DADO NUMRICO
Tipo Inteiro: nos positivos e negativos.
ex.: 35
-12
ex.:
-12
4.6
-89.726
10
DADO CARACTER
Sequncia contendo
smbolos especiais;
letras,
nmeros
PONTEIRO
uma varivel cujo contedo
localizao de outra varivel;
PONTEIRO
Por exemplo, na declarao:
int i = 15, j, *p, *q;
i e j so variveis numricas do tipo inteiro e
p e q so ponteiros para variveis do tipo
inteiro, onde o asterisco frente de p e q
indica sua funo.
13
PONTEIRO
Sendo p = i ;
// ou p = (int*) i ;
i
15
14
Vetor
Matriz
Pilha
Fila
Lista
rvore
Grafo
15
VETOR
Conjunto finito e ordenado de elementos
homogneos.
Um vetor contm:
Um nome ao qual est associado um
tipo de dados;
16
VETOR
I = 0..7
0
34
N=8
1
121
2
7
3
78
VNUM[1] = 121
I=4 VNUM[I] = 0
4
0
5
90
6
3
7
15
VNUM[6] = 3
I=0 VNUM[I] = 34
so
efetuados
17
MATRIZ
Vetor multidimensional, pode ser:
bidimensional, tridimensional ou n-dimensional.
M=6
55
12
72
15
99
121
67
17
78
12
123
MAT[1][2] = 17
34
71
54
212
MAT[6][0] = 43
56
12
12
56
33
I=2 e J=4
MAT[I][J] = 54
34
21
15
79
76
32
78
78
56
N=7 6
43
221
321
77
45
I 0
18
PILHA
Lista linear na qual todos os acessos so realizados
em uma s extremidade, denominada TOPO.
entra
topo
sai
c
b
a
PILHA
Suporta trs operaes bsicas:
push(P,X): insere o elemento X na pilha P;
pop(P): remove e retorna o elemento do topo;
top(P): retorna uma cpia do elemento do
topo, sem remov-lo.
PILHA
A quantidade de memria alocada para
representar seus elementos, um fator limitante:
Overflow: resultado de uma tentativa invlida
de empilhar;
Underflow: resultado de uma tentativa invlida
de desempilhar ou acessar.
21
PILHA
O esquema de alocao sequencial de memria
apropriado na implementao de pilhas.
Forma de representar uma pilha na memria:
Um vetor, armazena os elementos da pilha;
Um ndice, indica a posio corrente de topo da
pilha.
PILHA:
PILHA
Declarao:
#define STACKSIZE 50 // tamanho mximo da pilha
struct STACK
{
int TOPO;
char ITEM[STACKSIZE]; // pode ser int, float,
};
struct STACK PILHA;
PILHA:
a
0
FILA
Lista linear onde as inseres so realizadas em
um extremo e as remoes restritas ao outro.
comeo
sai
final
entra
FILA
Uma fila (queue) suporta duas operaes bsicas:
enqueue (F,X) insere o elemento X no final da
fila;
dequeue (F) remove e retorna o elemento
existente no comeo da fila F.
25
FILA
Recursos bsicos para implementao sequencial
de uma fila:
Espao de memria sequencial para armazenar
os elementos, no caso, um vetor;
FILA:
26
FILA
Declarao:
#define MAX 50 // tamanho mximo da fila
struct QUEUE
{
int COM, FIM;
char ITEM[MAX]; // pode ser int, float, ...
};
struct QUEUE FILA;
FILA:
27
FILA
A implementao sequencial apresenta problemas
de lgica e desperdcio de memria:
medida que novos elementos vo sendo
inseridos ou removidos os ndices COMEO e
FIM vo sendo incrementados;
Quando na fila no existir mais nenhum
elemento, os ndices sero iguais, ento:
Nenhum elemento poder ser inserido. A
funo qfull() indicar que no existe mais
espao disponvel;
e remover tambm no possvel, a funo
28
qempty() indicar fila vazia.
FILA
Para eliminar o erro de lgica:
Acrescenta-se uma varivel contadora para
indicar
quantos
elementos
esto
armazenados na fila;
Quando um elemento for inserido ela ser
incrementada, e quando for removido ser
decrementada.
FILA:
29
FILA
Para eliminar o desperdcio de espao:
30
FILA CIRCULAR
declarao:
#define MAX 50 // tamanho mximo da fila
struct QUEUE
{
int TOT, COM, FIM;
char ITEM[MAX]; // pode ser int, float, ...
};
struct QUEUE FILA;
FILA:
31
FILA DUPLA
Possui um mecanismo
ambas as extremidades.
de
atualizao
por
32
FILA DUPLA
Operaes Bsicas:
enqueueR(F,X): acrescenta o elemento X
pela direita (final);
enqueueL(F,X): acrescenta o elemento X
pela esquerda (incio);
dequeueR(F): remove o elemento pela
direita (posicionado no final da fila);
LISTA LINEAR
Coleo L: [a1, a2, ..., an], onde n>=0, cuja
propriedade estrutural baseia-se apenas na
posio relativa dos elementos, dispostos
linearmente;
LISTA LINEAR
Exemplos:
Lista de compras de supermercado,
Lista de convidados para uma festa de
aniversrio ou casamento,
Lista de alunos matriculados em um curso,
Lista de telefones,
etc.
35
LISTA LINEAR
Propriedades que podem ser realizadas sobre as
listas:
Acessar um elemento qualquer;
Inserir um elemento numa posio especfica;
Remover um elemento de uma posio
especfica;
Procurar um determinado elemento;
Determinar o total de elementos;
Ordenar os elementos;
Combinar duas listas em uma nica;
Particionar uma lista em duas;
Obter cpias de uma lista;
Apagar uma lista, etc.
36
LISTA LINEAR
Formas utilizadas para agrupar e acessar uma
lista linear: Sequencial e Encadeada (Dinmica)
Sequencial:
Os elementos so colocados em clulas de
memria consecutivas, uma aps a outra.
Assim, se o elemento a1 encontra-se na
clula de endereo e utiliza k bytes, temos:
37
LISTA LINEAR
Sequencial:
Vantagem:
facilidade
para
calcular
o
endereo de memria de um elemento de um
ndice qualquer:
Endereo(ai) = +(i1)k;
38
LISTA LINEAR
Encadeada (Dinmica):
Elementos podem ocupar quaisquer clulas;
Junto a cada elemento armazenado o
endereo do prximo elemento da lista;
L=3FFA a1
1C34 a2
BD2F a3
1000
ai
5670 an2
LISTA LINEAR
Encadeada (Dinmica):
Vantagem: facilidade para inserir ou remover
um elemento de qualquer ponto da lista
linear. Por exemplo, para remover o elemento
a2 da lista, basta mudar o nodo no endereo
3FFA de (a1,1C34) para de (a1, BD2F).
Desvantagem: Como apenas o primeiro
elemento acessvel diretamente atravs do
endereo L, para acessar um elemento
qualquer dentro da lista, deve-se acessar o
primeiro elemento e ir seguindo os campos
de ligao, um a um, at atingir a posio
desejada.
41
LISTA ENCADEADA
uma estrutura de dados dinmica, isto ,
fisicamente seus elementos esto armazenados
em endereos aleatrios.
42
LISTA ENCADEADA
declarao:
#define NULL 0
struct NODE
{
int INFO;
// pode ser char, float, etc.
struct NODE *NEXT;
};
typedef struct NODE *NODEPTR;
NODEPTR P, BEGIN;
BEGIN = NULL;
// Inicializando uma lista encadeada
P = (NODEPTR) malloc(sizeof(struct NODE)); /* Aloca
espao de memria para armazenar um nodo da lista
encadeada */
43
Info
3
null
right
Left
Info
6
right
Left
Info
right
10
null
44
RVORE
Consiste de ns e de arcos.
45
RVORE
Uma rvore pode ser definida recursivamente
como:
Uma estrutura vazia uma rvore vazia;
Se t1,...,tk, so rvores disjuntas, ento a
estrutura cuja raiz tem como suas filhas as
razes de t1,...,tk tambm uma rvore;
Somente estruturas geradas pelas regras 1 e 2
so rvores.
46
RVORE BINRIA
Uma rvore binria um caso especial de
rvore cujos ns no tem grau superior a 2, ou
seja, nenhum n tem mais do que dois filhos.
Cada filho designado como filho esquerda
ou filho direita.
Cada
rvore
recursiva.
caracteriza
uma
definio
47
RVORE BINRIA
/* Declarando uma rvore Binria */
#define NULL 0
struct TREE
{
struct TREE *LEFT;
int INFO;
};
typedef struct TREE *TREEPTR;
TREEPTR P;
48
GRAFOS
So modelos naturais usados para representar
relacionamentos arbitrrios entre dados e
objetos.
Muito utilizado para a soluo de problemas
relacionados rea de computao.
Ex.: Determinao da rota de uma mensagem
em uma rede de computadores.
Ex.: Soluo de problemas no planejamento de
rotas de um companhia de aviao entre vrios
aeroportos.
49
GRAFOS
So aplicados:
rvore de deciso;
Diagrama Entidade Relacionamento;
Diagrama de Fluxo;
Representao de processos em sistema
paralelo;
51
GRAFO NO-DIRECIONADO
Os ns esto
direcionados.
conectados
por
arcos
no-
As
duas
extremidades
da
aresta
equivalentes, no existe origem e destino.
so
G2=(V2E2)
Composto de 4 vrtices e 4 arestas:
V2 = {a, b, c, d}
E2 {(a,b), (a,c), (b,c), (c,d)}
52
GRAFO ROTULADO
Possui informaes nas arestas ou nos ns do
grafo.
Ex.: pode-se utilizar um grafo direcionado com
rtulos nos vrtices, para representar uma
mquina de estado finito:
Cada vrtice corresponde a um
estado da mquina;
Cada aresta corresponde a uma
transio de estado possvel;
53
GRAFO ROTULADO
Ex.: Pode-se usar um grafo no-direcionado com
arestas rotuladas para representar informaes
geogrficas:
Os vrtices representam locais geogrficos;
As arestas representam as rotas possveis entre
as localidades.
Pode-se usar um rtulo para
cada aresta representando a
distncia entre os dois
locais.
54