Escolar Documentos
Profissional Documentos
Cultura Documentos
APOLITECNICA
Escola Superior de Gestão, Ciências e Tecnologias
Docente: Mestre Simão Chinama
Também são dados imagens, sons e animação, pois todos podem ser
quantificados a ponto de alguém que entra em contato com eles ter
eventualmente dificuldade de distinguir a sua reprodução, a partir da
representação quantificada, com o original.
Primeiro elemento
Último elemento
da lista
da lista
A (1) = 89
A (2) = 01
:::::
A (i) = 90
A (n) = -8
Capitulo II
Formas de Acesso e manipulação de dados – Estrutura de
dados Lineares
1.1 Lista Estática Sequencial (cont.)
Assim as propriedades estruturadas da lista permitem
responder a questões como:
✔qual é o primeiro elemento da lista
✔qual é o último elemento da lista
✔quais elementos sucedem um determinado elemento
✔quantos elementos existem na lista
✔inserir um elemento na lista
✔eliminar um elemento da lista
Capitulo II
Formas de Acesso e manipulação de dados – Estrutura de
dados Lineares
1.1 Lista Estática Sequencial (cont.)
❑Vantagem:
✔acesso directo indexado a qualquer elemento da lista;
✔tempo constante para aceder o elemento i - depfimerá somente
do índice.
❑Desvantagem:
✔movimentação quando eliminado/inserido elemento;
✔tamanho máximo pré-estimado.
❑Quando usar:
✔listas pequenas;
✔inserção/remoção no fim da lista;
✔tamanho máximo bem definido.
Capitulo II
Formas de Acesso e manipulação de dados – Estrutura de
dados Lineares
1.1 Lista Estática Sequencial (cont.)
i) Acesso a um elemento
Escrever(A[i]);
ii) Actualização
A[i]← 'Valor'
Procedure Remover()
Inicio
Para j de i até n-1 passo 1 faça
A[j]←A[j+1];
Fim-para
n←n-1;
Fim;
Capitulo II
Formas de Acesso e manipulação de dados – Estrutura de
dados Lineares
2. Listas Dinâmicas Simples
❑Ponteiro
A partir daí:
a) o ponteiro pode ser referenciado como p
b) variável referenciada por p é denotada por p^
Capitulo II
Formas de Acesso e manipulação de dados – Estrutura de
dados Lineares
2. Listas Dinâmicas
❑Manipulação de registos
iii) Atribuição de conteúdo ao registo:
p^(info) ← valor;
i) Declaração
4.1 PILHA
Conceito
É uma lista na qual as operações de inserção e remoção de elementos
são executadas em somente uma das extremidades, denominada topo da
lista. Desta forma, o último elemento inserido é o primeiro a ser removido.
4.1 PILHA
As operações de inserção e remoção de elementos da pilha recebem
nomes especiais: push e pop, respectivamente.
Dada a pilha p e um item i qualquer, define-se a operação push(i,P)
como a adição do item i no topo da pilha p.
De forma similar, a operação pop(p) é definida como a operação que
remove um elemento do topo da pilha p. Por exemplo, x ← pop(p), vai
remover o elemento constante no topo da pilha p e armazená-lo na
variável x.
Capitulo II
Formas de Acesso e manipulação de dados – Estrutura de
dados Lineares
4. LISTAS COM DISCIPLINAS DE ACESSO ( PILHA e FILA)
4.1 PILHA
Definição
Dada uma pilha P=( a(1), a(2), ..., a(n) ), dizemos que a(1) é o elemento da
base da pilha; a(n) é o elemento topo da pilha; e a(i+1) está acima de a(i).
Operações Associadas:
I. criar (P) - criar uma pilha P vazia
II. inserir (x, P) - insere x no topo de P (empilha): push(P,x)
III. vazia (P) - testa se P está vazia
IV. topo (P) - acessa o elemento do topo da pilha (sem eliminar)
V. elimina (P) - elimina o elemento do topo de P (desempilha):
pop(P)
VI. VI) Devolve elemento eliminado
Capitulo II
Formas de Acesso e manipulação de dados – Estrutura de
dados Lineares
4. LISTAS COM DISCIPLINAS DE ACESSO ( PILHA e FILA)
4.1 PILHA
4.1.1 Alocação Sequencial de Pilhas
Operações
4.2 FILA
Conceito
É uma lista na qual os itens componentes devem ser eliminados somente
em uma extremidade denominada início da fila, e os itens somente
podem ser inseridos na outra extremidade, denominada final da fila.
4.2 FILA
4.2 FILA
F: fila;
Começo, {posição anterior ao primeiro elemento}
Fim: índice; {posição do último elemento}
Capitulo II
Formas de Acesso e manipulação de dados – Estrutura de
dados Lineares
4. LISTAS COM DISCIPLINAS DE ACESSO ( PILHA e FILA)
4.2 FILA
4.2 FILA
4.2.1 Implementação Sequencial de Fila
Operações com Filas
4.2 FILA
4.2.1 Implementação Sequencial de Fila
Operações com Filas
III) Vazia (F) - testa se F está vazia
Function Vazia (F): Boolean;
Inicio
Se Começo = Fim Então
Vazia True {FILA VAZIA}
Fim;
4.2 FILA
4.2.1 Implementação Sequencial de Fila
Operações com Filas
V) Acesso ao primeiro elemento da Fila F
Procedure Consulta (F);
Declarar Y: TipoElemento
Inicio
Se (Começo = Fim) Então
escrever “Fila Vazia” {FILA VAZIA}
Senão
Y ← F (Começo + 1);
Fim;
Capitulo II
Formas de Acesso e manipulação de dados – Estrutura de
dados Lineares
4. LISTAS COM DISCIPLINAS DE ACESSO ( PILHA e FILA)
4.2 FILA
4.2.1 Implementação Sequencial de Fila
Operações com Filas
VI) Elimina (F) - elimina o elemento do início da fila
Procedure Eliminar (Começo, Fim);
Inicio
Se (Começo = Fim) Então
escrever “Fila Vazia” {FILA VAZIA}
Senão
Começo ← Começo + 1;
Fim;
Capitulo II
Listas
4. LISTAS COM DISCIPLINAS DE ACESSO ( PILHA e FILA)
4.2 FILA
4.2 FILA
1. Introdução
1. Introdução (cont.)
2. Terminologia
O no de subárvores de
um nó é o grau daquele
nó.
O nível do nó é definido da
seguinte maneira: a raiz
tem nível 1, e este vai
aumentando, a medida
que desce-se para as
folhas.
2. Terminologia (cont.)
2 B 0 0 0
3 C 4 5 6
4 D 7 8 0
5 E 0 0 0
6 F 9 0 0
7 G 0 0 0
8 H 0 0 0
9 I 0 0 0
Capitulo III
Estrutura de Dados não lineares
I) Árvores
4. Árvores Binárias
4.1 Definição
Árvores binárias são estruturas do tipo árvores, onde o grau de cada nó é
obrigatoriamente menor ou igual a 2. Além disso, as subárvores de um nó têm de estar
divididas em subárvores esquerda e direita. A figura abaixo apresenta uma árvore
binária.
Capitulo III
Estrutura de Dados não lineares
I) Árvores
4. Árvores Binárias
4.2 Tipos de Árvores
❑Àrvore estritamente
binária, é aquela em que
cada nó possui
exactamente 0 ou 2 nós
(ver item a).
4. Árvores Binárias
4.2 Tipos de Árvores
4. Árvores Binárias
4.3 Caminhamento em Árvore Binária
4. Árvores Binárias
4.3 Caminhamento em Árvore Binária
Exemplos:
Capitulo III
Estrutura de Dados não lineares
I) Árvores
Esquematicamente:
Capitulo III
Estrutura de Dados não lineares
I) Árvores
7.1. CAMINHAMENTO
Atravês de procedimentos recursivos se implementam os caminhamento:
Central(raiz^.esq); PosFix(raiz^.esq);
Write(raiz^.item); PosFix(raiz^.dir);
Central(raiz^.dir); Write(raiz^.item);
Fim-se; Fim-se;
Fim; { procedure Central } Fim; { procedure PosFix }
Capitulo III
Estrutura de Dados não lineares
I) Árvores
7. Implementação de Árvores Binárias de Busca
7.2. INSERÇÃO
No caso da inserção de elementos em uma árvore binária de ordenação e pesquisa, o
esquema seria:
procedure InsArv(raiz, nó_aux);
Início
Se raiz = NIL então
raiz ← no_aux
Senão
Se no_aux^.item <= raiz^.item
então
InsArv(raiz^.esq, no_aux)
Senão
InsArv(raiz^.dir, no_aux);
Fim-se;
Fim-se;
end; {Procedure InsArv}
Capitulo III
Estrutura de Dados não lineares
I) Árvores
7. Implementação de Árvores Binárias de Busca
7.3. PESQUISA
O esquema genérico para a operação de pesquisa de um elemento qualquer dentro da
árvore de busca seria:
procedure PesqArv(raiz, chave, posição);
Início
Se raiz = NIL então
posição ← NIL
Senão
Se raiz^.item = chave {achou}
posição ← raiz
Senão
Se chave <= raiz^.item then {pesquisa à
esquerda}
PesqArv(raiz^.esq, chave, posição)
Senão { pesquisa à direita}
PesqArv(raiz^.dir, chave, posição);
Fim-se;
Fim-se;
Fim-se
Fim; {PesqArv}
Capitulo III
Estrutura de Dados não lineares
I) Árvores
7. Implementação de Árvores Binárias de Busca
7.3. PESQUISA
1. Definição
1. Definição (cont.)
3. as curvas de A não têm pontos comuns excepto os elementos do conjunto V .
Sejam os grafos G1(V1, A1), G2(V2, A2) e G3(V3, A3), onde V1, V2 e V3
são os conjuntos de vértices e A1, A2 e A3 são os conjuntos de arestas
dos grafos.
Capitulo III
Estrutura de Dados não lineares
II) GRAFOS
A. União
B. Intersecção
Tem como resultado os elementos em comum entre dois grafos.
C. Diferença
Capitulo III
Estrutura de Dados não lineares
II) GRAFOS
3.1. Cardinalidade
A cardinalidade de um conjunto de vértices é igual à quantidade de
seus elementos. É também chamada de ORDEM.
Ex.:
C(V) = 4
3.5. Ciclo
É uma cadeia fechada, onde a extremidade inicial e final coincidem.
4. Tipos de Grafos
Ex:
4.2. Subgrafo
Se o grafo G2 é um subgrafo de G1, então G2 possui um número de vértices
inferior aos de G1, embora mantendo o número de curvas entre os vértices
existentes.
Ex:
Capitulo III
Estrutura de Dados não lineares
II) GRAFOS
4. Tipos de Grafos
Ex:
Capitulo III
Estrutura de Dados não lineares
II) GRAFOS
4. Tipos de Grafos
Ex:
Capitulo III
Estrutura de Dados não lineares
II) GRAFOS
m(i,j)
A lista encadeada é formada por nodos que contém o dado do vértice (letra)
e o ponteiro para o vértice adjacente ao indicado no índice (vector descritor
dos vértices).
Capitulo III
Estrutura de Dados não lineares
II) GRAFOS
Este tipo de matriz representa um grafo a partir de suas arestas. Como exige muitas vezes a
alocação de uma matriz maior do que no método da matriz de adjacências, não é tão
utilizada quanto aquela. A matriz alocada deverá ter dimensões C(V) x C(A).
M[I,j] =
6. Caminhamento em Grafos
6.1. Caminhamento em Amplitude
6. Caminhamento em Grafos
6.2. Caminhamento em Profundidade
6. Caminhamento em Grafos
6.2. Caminhamento em Profundidade
Grafo T
6. Caminhamento em Grafos
6.2. Caminhamento em Profundidade
Capitulo IV
ORDENAÇÃO
1. Introdução
::::::::::::::::::::::::::::::::;;;
Capitulo IV
ORDENAÇÃO
2. Ordenação por Inserção
Algoritmo:
const
TAM = 12
Tipos
v = vector [1..TAM] de inteiros
var
vet: v
np, i, j, inc : inteiro
Início
Para i = 1 até TAM Faça
Leia (vet [i] )
Fim - Para
Leia (np)
Para i = np até 0 passo -1 Faça
Inc = 2 * * i
Para j = 1 até inc Faça
Método_Shell (vet, inc, j, TAM)
Fim_Para
Fim-Para
Fim.
Capitulo IV
ORDENAÇÃO
2. Ordenação por Inserção
Procedimento Metodo_shell (Ref vet, r, s, n)
Inicio
Var
É um método bastante simplis, porém lento. Onome bolha se deve ao fato de que os flutuam
até a sua corecta posição como bolhas. O Algorítmo é o seguinte:
- A cada passo, cada elemento é comparado com o próximo, Se o elemento estiver fora de
ordem, a troca é realizada
- Realizam-se tantos passos quantos necessários até que não ocorram mais trocas.
Algorítmo
Enquanto troca Faça
Const Troca = FALSO
TAM = 20 Para i = 1 até lim Faça
Tipos Se vet[i] > vet [ i +1 ] então
tem = vet[i]
V = vector [1...TAM] de inteiros vet [i] = vet [ i + 1 ]
Var vet [ i + 1 ] = tem
Vet: v k= i
i, temp, lim , k: inteiro troca = verdadeiro
Troca: lógica Fim-se
Início Fim-para
Para i = 1 até TAM Faça Lim = k
Leia (vet[i]) Fim-enquanto
Fim _Para Fim.
Troca = VERDADEIRO
Lim = TAM – 1
Capitulo IV
ORDENAÇÃO
Exemplo: 500 85 515 60 910 170 890 275 650 430
Passo 1: 85 500
60 515
170 910
890 910
257 910
650 910
430 910
85 500 60 515 170 890 275 650 430 910
Passo 2: 85 60 500 170 515 275 650 430 890 910
Passo 3: 60 85 170 500 275 515 430 650 890 910
Passo 4: 60 85 170 275 500 430 515 650 890 910
Passo 5: 60 85 170 275 430 500 515 650 890 910
Passo 6: nenhuma troca
Capitulo IV
ORDENAÇÃO
3.2 Método de troca e Partição (quic sort)
É o mais rápido entre os métodos apresentados até o momento, e também o mais utilizado.Esse
método foi proposto por C. A. R. Hoare em 1962 e parte do princímpio que é mais rápido classificar dois
vectores com n/2 elementos cada um, do que um com n elementos (dividir um problema maior em dois
menores).
Nessa abordagem, é realizada uma selcção sucessiva do menor (ou maior) valor
contido no vector. A cada passo este menor (maior) valor é colocado na sua
posição correcta. Repete-se o processo para o segmento que contém os elementos
não seleccionados.
Exemplo:
19 25 10 18 35 17 15 13 TAM = 8
10 25 19 18 35 17 15 13 TAM = 7
10 13 19 18 35 17 15 25 TAM = 6
10 13 15 18 35 17 19 25 TAM = 5
10 13 15 17 35 18 19 25 TAM = 4
10 13 15 17 18 35 19 25 TAM = 3
10 13 15 17 18 19 35 25 TAM = 2
10 13 15 17 18 19 25 35 TAM = 1
Capitulo IV
ORDENAÇÃO
Algorítimo:
Const:
TAM = 15
Tipos
V = vector [1..TAM] de inteiros
Var
Vet: v
I, j, temp, pos_menor : inteiro
Início
Para i = 1 até TAM faça
Leia ( vet [i] )
Fim-para
Para i = 1 até TAM - 1 faça
Pos_menor = i
Para j = i + 1 até TAM faça
Se vet [j] < vet [pos_menor] Então
Pos_menor = j
Fim-se
Fim-para
Temp = vet [i]
Vet [i] = vet [pos_menor]
Vet [pos_menor] = temp
Fim-para
Fim
Capitulo IV
ORDENAÇÃO
4.2. Selecção em Árvore (Heap Sort)
Utiliza uma estrutura de árvore binária para a ordenação. A ordenação é realizada em
duas fases:
1 ª Fase:
- Monta-se uma árvore binária (heap) contendo todos os elemento do vector de forma
que o valor contido em qualquer modo seja maior do que os valores de seus
sucessores. A árvore binária é estruturada no próprio vector da seguinte forma:
a) Sucessor á esquerda de i: 2i (se 2i < a)
b) Sucessor á direita de i: 2i + 1 (se 2i + 1 < n)
Este novo elemento colocado na raiz pode violar a propriedade do heap, de modo
que deve-se restaurar o heap novamente. Este procedimento é repetido até que
a árvore fique com um unico elemento.
Exercício 6
(1,7)
56 30 1 38 90 11 95
Esq. = 1...... I=1
Dir =7.........J =7 Y= Vet [ (I+j) Div 2] = Vet [ (1+7) Div 2] = Vet [4] = 38
Trocal 1: I=2, J=7 56 95 1 38 90 11 30
I=3 J=6 {após a troca o incrimenta e o J discrimenta uma unidade}
Troca 2: I=3, J=5
56 95 90 38 1 11 30
I=4 J=4
Troca 3: I=4, J=4 56 95 90 38 1 11 30
I=5 J=3 {Houve troca sem nenhum efeito visivel}
O ‘I’ já é Superior a ‘J’ por isso fazemos um novo chamamento
ESQUERDA DIREITA
Esq < J? Dir > i ?
A1 <3 True B 7>5 True {Fica para depois de tartar toda a parte esquerda}
A (1,3)
Esq. = 1...... I=1
Dir =3.........J =3 Y= Vet [2]=95
Troca 4: I=1, J=2 95 56 90 38 1 11 30
I=2 J=1
O I já é Superior a J por isso fazemos um novo chamamento
ESQUERDA DIREITA
Esq < J? Dir > i ?
C1 <1 False Fim e vai a direita D 3>2 True {resolve-se agora porque a esquerda é falso}
D (2,3)
Esq. = 2...... I=2
Dir =3.........J =3 Y= Vet [3]=90
Troca 5: I=2, J=3 95 90 56 38 1 11 30
I=3 J=2
O I já é Superior a J por isso fazemos um novo chamamento
ESQUERDA DIREITA
Esq < J ? Dir > I ?
E2 <1 False Fim e Vai a direita F3>2 False {Voltamos para traz B o ultimo que deixamos para depois}
B (5,7)
Esq. = 5...... I=5
Dir =7.........7=3 Y= Vet [6]=11
Troca 6: I=5, J=7 95 90 56 38 1 11 30
I=6 J=6