Você está na página 1de 54

Estrutura de Dados

Tipos de Dados Aula 01


Prof Ms. Elizabeth Brito Llamosas Gomes
1

Referncias Bibliogrficas
DROZDEK, Adam. Estrutura de dados e
algoritmos em C++. So Paulo: Cengage
learning, 2009.

MORAES, Celso R. Estruturas de dados e


algoritmos. Uma abordagem didtica.
2. ed. So Paulo: Futura, 2003.
Preiss, Bruno R. Estrutura de dados e
algoritmos: Padres de projetos orientado
a objetos com Java. Rio de Janeiro: Elsevier,
2000.

Referncias Bibliogrficas
TENENBAUM, A. M; LANGSAM, Y;
AUGENSTEIN, A. J. Estrutura de
dados usando C. So Paulo: Makron
Books, 1995.

CELES, Waldemar; CERQUEIRA, Renato;


RANGEL, Jos Lucas. Introduo a
Estruturas
de
Dados.
Rio
de
Janeiro: Editora Campus, 2004.

Algoritmos e Estrutura de dados


A resoluo de problemas atravs de algoritmos
requer a representao de entidades e objetos
reais em itens de dados.

Algoritmos e Estrutura de dados


As diferentes formas nas quais os itens de dados
so logicamente relacionados definem diferentes
estruturas de dados.

Algoritmos e Estrutura de dados


Pode-se classificar as estruturas de dados
como:
Primitivas diretamente manipuladas em
linguagem de mquina;
No
primitivas
ou
complexas

estruturas de informao em conjuntos


(formada
por
estruturas
de
dados
primitivas) logicamente relacionados.

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

Tipo Real: nos positivos, negativos e fracionrios.

ex.:

-12

4.6

-89.726

10

DADO CARACTER
Sequncia contendo
smbolos especiais;

letras,

nmeros

Deve ser indicado entre aspas ( ou );


Tambm chamado de alfanumrico, literal,
string ou cadeia.
Ex.: Rua Alfa, 52
Fone: 211-3456
F
11

PONTEIRO
uma varivel cujo contedo
localizao de outra varivel;

Permite acessar indiretamente os valores de


outras variveis.

Um ponteiro anlogo a uma sinalizao de


estrada que leva a um certo local, ou a uma
tira de papel na qual um endereo tenha
sido anotado.
12

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 ;

Assumindo que os endereos das variveis


i, j, p e q sejam 1080, 1082, 1084 e 1086,
depois de se atribuir 15 para i na
declarao, as posies e os valores nas
variveis de memria do computador so:
i
1080
15
j
1082
?
1084 1080 p
q
1086
?

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;

Um ndice do tipo inteiro;


Dimenso do tipo inteiro.

representado atravs de um nome e de


um ndice entre colchetes.
Exemplo: int VNUM[8], I;

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

O vetor VNUM[I] do tipo numrico (inteiro)


com dimenso de 8 elementos.
O acesso aos elementos
atravs de um ndice, I.

so

efetuados
17

MATRIZ
Vetor multidimensional, pode ser:
bidimensional, tridimensional ou n-dimensional.

Exemplo: int MAT [7] [6];


J

ndice das colunas

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

ndice das linhas

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

Quando um elemento novo introduzido na pilha,


passa a ser o elemento do topo e o nico que pode
ser removido da pilha.
Os elementos so retirados na ordem inversa
ordem em que foram introduzidos: ltimo que entra
o primeiro que sai (LIFO Last In, First Out).
19

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.

uma estrutura dinmica: o nmero de


elementos aumenta ou diminui medida que
elementos so empilhados e desempilhados.
20

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.

Assim, precisa-se de mais trs operaes para


manipular pilhas:
init(P): inicializa a pilha P no estado vazia;

empty(P): verifica se a pilha P est vazia;


full(P): verifica se a pilha P est cheia.

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. ITEM armazena os elementos da pilha


a
b
c
...
4 ...
0
1
2
3
49

PILHA.TOPO indica a posio do ltimo elemento inserido


22

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

PILHA.ITEM armazena os elementos da pilha


b
c
...
1
2
3
4 ...
49

PILHA.TOPO indica a posio do ltimo elemento inserido


23

FILA
Lista linear onde as inseres so realizadas em
um extremo e as remoes restritas ao outro.
comeo

sai

final

entra

A ordem de sada corresponde ordem de


entrada dos elementos: Primeiro que entra o
primeiro que sai (FIFO - First In / First Out).
Exemplo: Fila em um banco, onde as pessoas
formam uma fila para aguardar at serem
atendidas.
Esse tipo de estrutura no suporta inseres,
24
nem remoes no meio da fila.

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.

Para insero de um elemento na fila:


Verificar se h espao, com a funo qfull();

Para remover um elemento da fila:


Verificar se no est vazia, com a funo
qempty().

25

FILA
Recursos bsicos para implementao sequencial
de uma fila:
Espao de memria sequencial para armazenar
os elementos, no caso, um vetor;

Uma referncia ao primeiro elemento da fila;


Uma referncia primeira posio livre, aps o
ltimo elemento da fila.

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:

Sempre que um elemento for removido, sua


posio liberada para ser ocupada por um
novo elemento posteriormente.
Assim, quando COMEO ou FIM for igual ou
maior que o tamanho mximo declarado da
fila, restabelece-se seu valor a 0, simulando
uma circularidade.

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

Adota o conceito de fura fila: um elemento


pode ser inserido no incio de uma fila prexistente e passa a ser o primeiro dela.

Ex.: inserir e retirar vages de um trem.

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);

dequeueL(F): remove o elemento pela


esquerda (posicionado no incio da fila).
33

LISTA LINEAR
Coleo L: [a1, a2, ..., an], onde n>=0, cuja
propriedade estrutural baseia-se apenas na
posio relativa dos elementos, dispostos
linearmente;

Sendo n=0, a lista vazia, seno so vlidas


as propriedades:
a1, o primeiro elemento do L;
an o ltimo elemento de L;
ak, 1< k < n, precedido pelo elemento
ak-1, e seguido por ak+1 em L.
34

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;

Desvantagem: insero ou remoo de


elementos no meio da lista, j que ser
preciso movimentar os elementos para liberar
ou diminuir o espao entre eles.

38

LISTA LINEAR
Encadeada (Dinmica):
Elementos podem ocupar quaisquer clulas;
Junto a cada elemento armazenado o
endereo do prximo elemento da lista;

Os elementos so armazenados em blocos de


memria denominados ns. Cada n possui
dois campos: um para armazenar os dados e
outro para o prximo endereo;
So importantes dois endereos: o do
primeiro elemento e o do endereo fictcio
para o qual aponta o ltimo elemento da lista;
39

Lista Linear Encadeada


Contedo Endereo

L=3FFA a1
1C34 a2

BD2F a3

1C34 Primeiro elemento, acessvel a


partir de L
BD2F O segundo elemento no ocupa
um endereo consecutivo quele
ocupado por a1
AC12
...

1000

ai

5670 an2

3A7B Cada nodo armazena um elemento


...
e o endereo do prximo elemento
da lista
14F6

14F6 an1 5D4A


5D4A an

ltimo elemento da lista, o


endereo nulo indica que o
elemento an no tem um sucessor 40

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.

Cada elemento composto por nodos e cada


nodo contm dois campos:
o primeiro contm a informao em si;

o segundo que contm o endereo do nodo


seguinte, portanto, um ponteiro.

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

Lista Duplamente Encadeada


composta por nodos e cada nodo contm trs
campos:
Um para a informao em si (info);
Dois ponteiros:
Um contm o endereo do nodo que o
precede (left);
O outro contm o endereo do nodo que o
sucede (right).
Left
Begin

Info
3

null

right

Left

Info
6

right

Left

Info

right

10

null

44

RVORE
Consiste de ns e de arcos.

representada de cima para baixo (raiz no


topo e folhas na base). A raiz no tem
ancestrais, ela s pode ter ns filhos.
As folhas no tm filhos, ou seja, seus filhos
so estruturas vazias.

Cada n atingvel a partir da raiz atravs de


uma sequncia de arcos, chamado caminho.

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;

// pode ser char, float, etc.

struct TREE *RIGHT;

};
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:

Modelagem de circuitos digitais;


Representao de lista ligada;

rvore de deciso;
Diagrama Entidade Relacionamento;
Diagrama de Fluxo;
Representao de processos em sistema
paralelo;

Mquina de estado finito;


Etc.
50

GRAFO DIRECIONADO ou DGRAFO


um par ordenado G = (V, E), com as seguintes
propriedades:

O componente V um conjunto finito no-vazio.


Seus elementos so chamados de vrtices ou
ns de G;
O componente E um conjunto finito de pares
ordenados de V vrtices. Seus elementos so
chamados de arestas ou arcos de G.
G1=(V1E1)
Composto de 4 vrtices e 6 arestas:
V1 = {a, b, c, d}
E1 {(a,b), (a,c), (b,c), (c,a), (c,d), (d,d)}

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;

Pode-se rotular cada vrtice com o registro de


alguma propriedade do estado correspondente
como o tempo de latncia do estado.

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

Você também pode gostar