aula 01 - tipos de dados
DESCRIPTION
livroTRANSCRIPT
-
Estrutura de Dados
Prof Ms. Elizabeth Brito Llamosas Gomes
1
Tipos de Dados Aula 01
-
2
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.
-
3
Referncias Bibliogrficas
CELES, Waldemar; CERQUEIRA, Renato; RANGEL, Jos Lucas. Introduo a Estruturas de Dados. Rio de Janeiro: Editora Campus, 2004.
TENENBAUM, A. M; LANGSAM, Y; AUGENSTEIN, A. J. Estrutura de dados usando C. So Paulo: Makron Books, 1995.
-
4
Algoritmos e Estrutura de dados
A resoluo de problemas atravs de algoritmos requer a representao de entidades e objetos reais em itens de dados.
-
5
Algoritmos e Estrutura de dados
As diferentes formas nas quais os itens de dados so logicamente relacionados definem diferentes estruturas de dados.
-
6
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.
-
7
ESTRUTURA de DADOS
Vetor Matriz
Pilha
Fila
Lista
Grafo rvore
Lgico
Numrico
Caracter
Ponteiro
Inteiro
Real
-
8
Vetor
Matriz
Pilha
Fila
Lista
rvore
Grafo
-
9
Pode representar apenas dois valores: verdadeiro e falso;
Pode ser representado na codificao binria:
1 verdadeiro;
0 falso.
Tambm chamado de booleano.
DADO LGICO
-
10
Tipo Inteiro: nos positivos e negativos.
ex.: 35 0 -12
DADO NUMRICO
Tipo Real: nos positivos, negativos e fracionrios.
ex.: 9 -12 4.6 -89.726
-
11
Sequncia contendo letras, nmeros e smbolos especiais;
Deve ser indicado entre aspas ( ou );
Tambm chamado de alfanumrico, literal, string ou cadeia.
Ex.: Rua Alfa, 52
Fone: 211-3456
F
DADO CARACTER
-
12
uma varivel cujo contedo a 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.
PONTEIRO
-
13
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.
-
p i 15
14
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:
1080 15 i 1082 ? j 1084 1080 p 1086 ? q
PONTEIRO
-
15
Vetor
Matriz
Pilha
Fila
Lista
rvore
Grafo
-
16
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;
VETOR
-
17
VNUM[1] = 121 VNUM[6] = 3
I=4 VNUM[I] = 0 I=0 VNUM[I] = 34
O vetor VNUM[I] do tipo numrico (inteiro) com dimenso de 8 elementos.
O acesso aos elementos so efetuados atravs de um ndice, I.
0 1 2 3 4 5 6 7
34 121 7 78 0 90 3 15
I = 0..7 N = 8
VETOR
-
18
Vetor multidimensional, pode ser:
bidimensional, tridimensional ou n-dimensional.
Exemplo: int MAT [7] [6];
0 1 2 3 4 5
0 55 12 72 8 15 99
1 121 67 17 78 12 123
2 34 4 71 7 54 212
3 56 12 12 7 56 33
4 34 21 15 8 0 79
5 76 32 78 78 56 7
6 43 221 321 77 45 7
ndice das colunas J M = 6
ndice das linhas I
N = 7
MAT[1][2] = 17
MAT[6][0] = 43
I = 2 e J = 4
MAT[I][J] = 54
MATRIZ
-
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
Lista linear na qual todos os acessos so realizados em uma s extremidade, denominada TOPO.
topo c
b
a
entra sai
PILHA
-
20
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
uma estrutura dinmica: o nmero de elementos aumenta ou diminui medida que elementos so empilhados e desempilhados.
-
21
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.
PILHA
-
22
O esquema de alocao sequencial de memria apropriado na implementao de pilhas.
PILHA
Forma de representar uma pilha na memria:
Um vetor, armazena os elementos da pilha;
Um ndice, indica a posio corrente de topo da pilha.
2 a b c ...
0 1 2 3 4 ... 49
PILHA.TOPO indica a posio do ltimo elemento inserido
PILHA:
PILHA. ITEM armazena os elementos da pilha
-
23
Declarao:
#define STACKSIZE 50 // tamanho mximo da pilha struct STACK { int TOPO; char ITEM[STACKSIZE]; // pode ser int, float, }; struct STACK PILHA;
PILHA.ITEM armazena os elementos da pilha 2 a b c ...
0 1 2 3 4 ... 49
PILHA.TOPO indica a posio do ltimo elemento inserido
PILHA:
PILHA
-
sai entra
comeo final
24
Lista linear onde as inseres so realizadas em um extremo e as remoes restritas ao outro.
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, nem remoes no meio da fila.
FILA
-
25
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.
FILA
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().
-
26
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
FILA:
-
27
Declarao:
#define MAX 50 // tamanho mximo da fila struct QUEUE { int COM, FIM; char ITEM[MAX]; // pode ser int, float, ... }; struct QUEUE FILA;
FILA:
FILA
-
28
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 qempty() indicar fila vazia.
FILA
-
29
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
FILA:
-
30
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.
FILA
-
31
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:
FILA CIRCULAR
-
32
Possui um mecanismo de atualizao por ambas as extremidades.
Adota o conceito de fura fila: um elemento pode ser inserido no incio de uma fila pr-existente e passa a ser o primeiro dela.
Ex.: inserir e retirar vages de um trem.
FILA DUPLA
-
33
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).
FILA DUPLA
-
34
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.
LISTA LINEAR
-
35
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.
LISTA LINEAR
-
36
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.
LISTA LINEAR
-
37
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:
LISTA LINEAR
-
38
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.
LISTA LINEAR
-
39
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;
LISTA LINEAR
-
Lista Linear Encadeada
40
Contedo Endereo
L=3FFA a1 1C34 Primeiro elemento, acessvel a partir de L
1C34 a2 BD2F O segundo elemento no ocupa um endereo consecutivo quele ocupado por a1
BD2F a3 AC12 ...
1000 ai 3A7B Cada nodo armazena um elemento e o endereo do prximo elemento da lista
...
5670 an2 14F6
14F6 an1 5D4A
5D4A an ltimo elemento da lista, o endereo nulo indica que o elemento an no tem um sucessor
-
41
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.
LISTA LINEAR
-
42
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.
LISTA ENCADEADA
-
43
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 */
LISTA ENCADEADA
-
44
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 Info right Left Info right Left Info right
Begin 3 6 10
null null
Lista Duplamente Encadeada
-
45
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.
RVORE
-
46
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.
RVORE
-
47
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 caracteriza uma definio recursiva.
RVORE BINRIA
-
48
/* 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;
RVORE BINRIA
-
49
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.
GRAFOS
-
50
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.
GRAFOS
-
51
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)}
GRAFO DIRECIONADO ou DGRAFO
-
52
Os ns esto conectados por arcos no-direcionados.
As duas extremidades da aresta so equivalentes, no existe origem e destino.
G2=(V2E2)
Composto de 4 vrtices e 4 arestas:
V2 = {a, b, c, d}
E2 {(a,b), (a,c), (b,c), (c,d)}
GRAFO NO-DIRECIONADO
-
53
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:
GRAFO ROTULADO
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.
-
54
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.
GRAFO ROTULADO
Pode-se usar um rtulo para cada aresta representando a distncia entre os dois locais.