SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Aula 003
Estrutura de Dados
PRONATEC
Programa Nacional de Acesso ao
Ensino Técnico e Emprego
PRONATEC
Programa Nacional de Acesso
ao Ensino Técnico e Emprego
1. Uma pausa: Ponteiro no Delphi
• Para algumas estruturas dinâmicas em Pascal
precisamos usar o recurso de “Ponteiro”
• Um Ponteiro é na verdade o endereço de memória
RAM de um dado: variável ou estrutura
• Para declararmos um ponteiro em Pascal usamos o
símbolo “^” na sua declaração em frente do tipo que
ele representa. Ex: var p : ^integer; declara “p” como
um ponteiro para “inteiro”.
• Significa que “p” aponta para um dado do tipo
“inteiro” diretamente na memória RAM
• Para acessarmos o conteúdo de “p” usamos, no
código, o símbolo “^” após o ponteiro: “p^” é o
inteiro apontado por “p”. Ex: “p^ := 1;” – “p” agora
aponta para o inteiro “1” na memória RAM.
2. Estrutura: Lista
• Também chamada de “Lista Ligada” ou “Lista
Encadeada”, é uma estrutura em que cada
elemento contém um dado e um ponteiro que
aponta para o próximo elemento da lista.
• O 1º elemento é a cabeça (head) da lista, o
restante a cauda (tail). No último elemento o
ponteiro para o próximo não aponta para nada.
Em Pascal indicamos por “nil” que significa um
“Ponteiro Vazio” que não aponta para nada.
3. Definição e Operação com Lista
• Para definir uma lista de inteiros em pascal:
Type
ApontaElemento : ^Elemento;
Elemento : record
num: integer;
prox: ApontaElemento;
end;
Lista : ApontaElemento; // Tipo Lista: Aponta a cabeça (1º Elemento)
• Operações com uma lista:
• CriaLista(): Cria um ponteiro para uma nova lista
• Cardinalidade(p): Retorna quantos elementos tem P
• InsereItem(x,p): Inclui item “x” na lista “p”
• RemoveItem(x,p): Exclui 1ª ocorrência de x em p
• RemovePrimeiro(p): Excluir cabeça da lista “p”
• Busca(x,p): Retorna ponteiro para “x” na lista “p” ou
“nil” se não localizado
4. Operações com Listas
• Cria uma lista vazia:
Function CriaLista () : Lista;
Begin
result := nil;
End;
• Verificar o tamanho da lista P
Function Cardinalidade (p:Lista):integer;
Var i:integer;
Begin
i:=0;
while p<>nil do begin p := p^.prox; inc(i); end;
result := i;
End;
• Busca um elemento na Lista “p”
Function Busca(x:integer; p:Lista):ApontaElemento;
Var q:ApontaElemento;
Begin
q := p;
while (q<>nil) and (q^.num<>x) do q:=q^.prox;
result := q;
End;
• Inserir um elemento na Lista
Procedure Insere (x:integer; var p:Lista);
Var q:ApontaElemento;
Begin
new(q); // Abre um espaço na RAM
q^.num := x; q^.prox := p; p := q;
End;
• Remover 1º elemento de uma Lista
Procedure RemovePrimeiro(var p:Lista);
Var q:ApontaElemento;
Begin
if p=nil then exit;
q := p^.prox; dispose(p); p : = q;
End;
5. Remoção Específica em Lista
• Remover 1ª ocorrência do elemento “x” na Lista
Function Remove(x:integer; var p:Lista):boolean;
Var q,r:ApontaElemento;
Begin
result := false; if p=nil then exit; // Lista vazia – sai
result := True;
if p^.num=x then begin // 1º da Lista – Remove o Primeiro
RemovePrimeiro(p); exit;
end;
q := p;
repeat
r := q; q := q^.prox;
until (q = nil) or (q^.num = x);
if q <> nil then begin // Se Encontrou x Remove
r^.prox := q^.prox; dispose(q);
end;
End;
6. Estrutura: Pilha
• Uma pilha é uma lista especial em que os
elementos são inseridos sempre na cabeça e
retirados sempre dela. Assim a impressão que se
tem é que estamos “empilhando” os dados e
quando retiramos um dado estamos
“desempilhando”
• As pilhas são conhecidas em
estrutura de dados como
uma fila FILO (First In – Last
Out): primeiro a entrar,
último a sair.
7. Definição e Operação da Pilha
• Para definir uma Pilha de inteiros em pascal:
Type
ApontaElemento : ^Elemento;
Elemento : record
num: integer;
prox: ApontaElemento;
end;
Pilha : ApontaElemento; // Tipo Pilha: Aponta sempre o Topo
• Operações com uma lista:
• CriaPilha(): Cria um ponteiro para uma nova pilha
• Cardinalidade(p): Número de itens na pilha
• Empilha(x,p): Inclui item “x” no topo da pilha “p”
• Desempilha(p): Retorna elemento do topo e
diminui o tamanho da pilha em uma unidade
8. Operações com Pilhas
• Cria uma nova Pilha:
Function CriaPilha() : Pilha;
Begin
result := nil;
End;
• Verificar o tamanho da pilha P
Function Cardinalidade (p:Pilha):integer;
Var i:integer;
Begin
i:=0;
while p<>nil do begin
p := p^.prox; inc(i);
end;
result := i;
End;
• Empilha um elemento na pilha
Procedure Empilha (x:integer; var p:Pilha);
Var q:ApontaElemento;
Begin
new(q); // Abre um espaço na RAM
q^.num := x; q^.prox := p; p := q;
End;
• Desempilha elemento da pilha P
Function Desempilha(var p:Pilha; var x:integer):boolean;
Var q:ApontaElemento;
Begin
result := false; if p=nil then exit; result := true;
x := p^.num; q := p^.prox; dispose(p); p : = q;
End;
9. Estrutura: Fila
• Uma fila é uma lista especial em que os
elementos são inseridos sempre como último da
cauda e retirado sempre o primeiro da cabeça.
Assim a impressão que se tem é que estamos
“enfileirando” os dados.
• As filas por definição são FIFO (First In – First
Out): primeiro a entrar é o primeiro a sair.
10. Definição e Operação na Fila
• Para definir uma Fila de inteiros em pascal:
Type
ApontaElemento : ^Elemento;
Elemento : record
num: integer;
prox: ApontaElemento;
end;
Fila : ApontaElemento; // Tipo Fila: Aponta o último elemento incluído
• Operações com uma Fila:
• CriaFila(): Cria um ponteiro para uma nova fila
• Cardinalidade(p): Número de itens na fila
• Enfileira(x,p): Inclui item “x” na fila “p”
• Retira(p): Remove o elemento mais “antigo” na
lista “p”, que é o mais antigo na fila
11. Operações com Filas
• Cria uma nova Fila:
Function CriaFila() : Fila;
Begin
result := nil;
End;
• Verificar o tamanho da fila P
Function Cardinalidade (p:Fila):integer;
Var i:integer;
Begin
i:=0;
while p<>nil do begin
p := p^.prox; inc(i);
end;
result := i;
End;
• Empilha um elemento na fila
Procedure Enfileira (x:integer; var p:Fila);
Var q:ApontaElemento;
Begin
new(q); // Abre um espaço na RAM
q^.num := x; q^.prox := p; p := q;
End;
• Retirar elemento da Fila (o mais antigo)
Function Retira(x:integer; var p:Fila):boolean;
Var q,r:ApontaElemento;
Begin
result := false; if p=nil then exit; result := True;
if p^.prox=nil then begin // Fila de 1 elemento
x := p^.num; p := nil; exit;
end;
q := p;
repeat r:=q; q:= q^.prox; until (q^.prox = nil);
x := q^.num; r^.prox := nil; dispose(q);
End;
12. Recursividade
• É o processo que para resolver um problema chama
ele mesmo novamente. Ou seja, uma função que
chama ela mesma no seu funcionamento. Exemplo:
Function Fatorial (n:integer):integer;
Begin
if n=0 then result:=1
else result := n * Fatorial (n-1);
End;
• Alguns problemas computacionais só podem ser
resolvidos pela recursão. Quando for possível
devemos evitar a recursividade pois consome mais
recursos e costuma ficar mais lento e ineficiente que
as formas normais de repetição: for, while, repeat
13. Estrutura: Árvore Binária
• Uma árvore binária é uma estrutura onde cada
elemento aponta dois outros, um a sua esquerda
e outro a sua direita. Na medida em que se inclui
novos elementos dá-se a impressão de que a
árvore “cresce” para baixo.
• Cada elemento
na árvore
também é
chamado de
“Nó”
14. Definição e Operação em Árvore
• Para definir uma Árvore de inteiros em pascal:
Type
ApontaElemento : ^Elemento;
Elemento : record
num: integer;
esq, dir: ApontaElemento;
end;
Arvore: ApontaElemento; // Tipo Árvore: Aponta o elemento topo (raiz) da estrutura
• Operações com uma Árvore:
• CriaArvore(): cria ponteiro para uma nova árvore
• InsereEsq(x,a): insere “x” à esquerda
• InsereDir(x,a): insere “x” à direita
• Percorre(a): Percorre todos elementos da árvore

Weitere ähnliche Inhalte

Was ist angesagt? (19)

Aula 13
Aula 13Aula 13
Aula 13
 
Pilha
PilhaPilha
Pilha
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Aula 21
Aula 21Aula 21
Aula 21
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Lp script pug-pe
Lp script pug-peLp script pug-pe
Lp script pug-pe
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Pilha em C
Pilha em CPilha em C
Pilha em C
 
Coleções do c
Coleções do cColeções do c
Coleções do c
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Collection Java (2/2)
Collection Java (2/2)Collection Java (2/2)
Collection Java (2/2)
 
Listas em C
Listas em CListas em C
Listas em C
 
Introdução à linguagem c
Introdução à linguagem cIntrodução à linguagem c
Introdução à linguagem c
 
Listas duplamente encadeadas
Listas duplamente encadeadasListas duplamente encadeadas
Listas duplamente encadeadas
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Aula14
Aula14Aula14
Aula14
 
Java 8 - New Features
Java 8 - New FeaturesJava 8 - New Features
Java 8 - New Features
 

Andere mochten auch

Sistema Operacional - Pratica002
Sistema Operacional - Pratica002Sistema Operacional - Pratica002
Sistema Operacional - Pratica002Cláudio Amaral
 
Sistema Operacional - Pratica003
Sistema Operacional - Pratica003Sistema Operacional - Pratica003
Sistema Operacional - Pratica003Cláudio Amaral
 
Projeto de Sistemas - Aula005
Projeto de Sistemas - Aula005Projeto de Sistemas - Aula005
Projeto de Sistemas - Aula005Cláudio Amaral
 
Apostila delphi rad studio 2007
Apostila delphi   rad studio 2007Apostila delphi   rad studio 2007
Apostila delphi rad studio 2007Guilherme Bruno
 
Banco de Dados II - Unimep/Pronatec - Aula 4
Banco de Dados II - Unimep/Pronatec - Aula 4Banco de Dados II - Unimep/Pronatec - Aula 4
Banco de Dados II - Unimep/Pronatec - Aula 4André Phillip Bertoletti
 
Sistema Operacional - Pratica001
Sistema Operacional - Pratica001Sistema Operacional - Pratica001
Sistema Operacional - Pratica001Cláudio Amaral
 
Banco de Dados II - Aula1
Banco de Dados II - Aula1Banco de Dados II - Aula1
Banco de Dados II - Aula1Cláudio Amaral
 
Projeto de Sistemas - Aula004
Projeto de Sistemas - Aula004Projeto de Sistemas - Aula004
Projeto de Sistemas - Aula004Cláudio Amaral
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Ryan Padilha
 
Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Ryan Padilha
 
Programação orientada a objetos em delphi
Programação orientada a objetos em delphiProgramação orientada a objetos em delphi
Programação orientada a objetos em delphiHelder Lopes
 
Projeto de Sistemas - Aula002
Projeto de Sistemas - Aula002Projeto de Sistemas - Aula002
Projeto de Sistemas - Aula002Cláudio Amaral
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Ryan Padilha
 
Projeto de Sistemas - Aula003
Projeto de Sistemas - Aula003Projeto de Sistemas - Aula003
Projeto de Sistemas - Aula003Cláudio Amaral
 
Curso de Delphi Fundamental e Logica de Programacao (SABADOS)
Curso de Delphi Fundamental e Logica de Programacao (SABADOS) Curso de Delphi Fundamental e Logica de Programacao (SABADOS)
Curso de Delphi Fundamental e Logica de Programacao (SABADOS) Grupo Treinar
 

Andere mochten auch (20)

Sistema Operacional - Pratica002
Sistema Operacional - Pratica002Sistema Operacional - Pratica002
Sistema Operacional - Pratica002
 
Aplicativo aula006
Aplicativo aula006Aplicativo aula006
Aplicativo aula006
 
Sistema Operacional - Pratica003
Sistema Operacional - Pratica003Sistema Operacional - Pratica003
Sistema Operacional - Pratica003
 
Programação aula003
Programação aula003Programação aula003
Programação aula003
 
Projeto de Sistemas - Aula005
Projeto de Sistemas - Aula005Projeto de Sistemas - Aula005
Projeto de Sistemas - Aula005
 
Apostila delphi rad studio 2007
Apostila delphi   rad studio 2007Apostila delphi   rad studio 2007
Apostila delphi rad studio 2007
 
Banco de Dados II - Unimep/Pronatec - Aula 4
Banco de Dados II - Unimep/Pronatec - Aula 4Banco de Dados II - Unimep/Pronatec - Aula 4
Banco de Dados II - Unimep/Pronatec - Aula 4
 
Sistema Operacional - Pratica001
Sistema Operacional - Pratica001Sistema Operacional - Pratica001
Sistema Operacional - Pratica001
 
Banco de Dados II - Aula1
Banco de Dados II - Aula1Banco de Dados II - Aula1
Banco de Dados II - Aula1
 
Projeto de Sistemas - Aula004
Projeto de Sistemas - Aula004Projeto de Sistemas - Aula004
Projeto de Sistemas - Aula004
 
Linguagem Delphi-Introdução
Linguagem Delphi-IntroduçãoLinguagem Delphi-Introdução
Linguagem Delphi-Introdução
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)
 
Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)
 
Oo delphi
Oo delphiOo delphi
Oo delphi
 
Programação aula002
Programação aula002Programação aula002
Programação aula002
 
Programação orientada a objetos em delphi
Programação orientada a objetos em delphiProgramação orientada a objetos em delphi
Programação orientada a objetos em delphi
 
Projeto de Sistemas - Aula002
Projeto de Sistemas - Aula002Projeto de Sistemas - Aula002
Projeto de Sistemas - Aula002
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
 
Projeto de Sistemas - Aula003
Projeto de Sistemas - Aula003Projeto de Sistemas - Aula003
Projeto de Sistemas - Aula003
 
Curso de Delphi Fundamental e Logica de Programacao (SABADOS)
Curso de Delphi Fundamental e Logica de Programacao (SABADOS) Curso de Delphi Fundamental e Logica de Programacao (SABADOS)
Curso de Delphi Fundamental e Logica de Programacao (SABADOS)
 

Ähnlich wie Estrutura de Dados PRONATEC: Listas, Pilhas, Filas e Árvores Binárias

Ähnlich wie Estrutura de Dados PRONATEC: Listas, Pilhas, Filas e Árvores Binárias (20)

Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Estruturas de Dados - Pilhas (Stack)
Estruturas de Dados - Pilhas (Stack)Estruturas de Dados - Pilhas (Stack)
Estruturas de Dados - Pilhas (Stack)
 
Aula 12
Aula 12Aula 12
Aula 12
 
Aula 8
Aula 8Aula 8
Aula 8
 
Pilhas encadeadas
Pilhas encadeadasPilhas encadeadas
Pilhas encadeadas
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Pilha ad
Pilha adPilha ad
Pilha ad
 
Lpiii dp-apostila
Lpiii dp-apostilaLpiii dp-apostila
Lpiii dp-apostila
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
 
Pilhas
PilhasPilhas
Pilhas
 
Filas
FilasFilas
Filas
 
Aula 15
Aula 15Aula 15
Aula 15
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Programando em python recursao
Programando em python   recursaoProgramando em python   recursao
Programando em python recursao
 
Pged 05
Pged 05Pged 05
Pged 05
 
Pilhas java
Pilhas javaPilhas java
Pilhas java
 
Aula 17
Aula 17Aula 17
Aula 17
 
Canivete shell
Canivete shellCanivete shell
Canivete shell
 
Canivete shell
Canivete shellCanivete shell
Canivete shell
 

Mehr von Cláudio Amaral

Mehr von Cláudio Amaral (19)

DER - Diagrama de Entidade e Relacionamentos
DER - Diagrama de Entidade e RelacionamentosDER - Diagrama de Entidade e Relacionamentos
DER - Diagrama de Entidade e Relacionamentos
 
Projeto de Sistemas - Parte001
Projeto de Sistemas - Parte001Projeto de Sistemas - Parte001
Projeto de Sistemas - Parte001
 
Aplicativo aula008
Aplicativo aula008Aplicativo aula008
Aplicativo aula008
 
Aplicativo aula007
Aplicativo aula007Aplicativo aula007
Aplicativo aula007
 
Sistema Operacional - Aula005
Sistema Operacional - Aula005Sistema Operacional - Aula005
Sistema Operacional - Aula005
 
Sistema Operacional - Aula003
Sistema Operacional - Aula003Sistema Operacional - Aula003
Sistema Operacional - Aula003
 
Sistema Operacional - Aula002
Sistema Operacional - Aula002Sistema Operacional - Aula002
Sistema Operacional - Aula002
 
Sistema Operacional - Aula001
Sistema Operacional - Aula001Sistema Operacional - Aula001
Sistema Operacional - Aula001
 
Sistema Operacional - Aula006
Sistema Operacional - Aula006Sistema Operacional - Aula006
Sistema Operacional - Aula006
 
Sistema Operacional - Aula004
Sistema Operacional - Aula004Sistema Operacional - Aula004
Sistema Operacional - Aula004
 
Aplicativo aula03
Aplicativo aula03Aplicativo aula03
Aplicativo aula03
 
Aplicativo aula02
Aplicativo aula02Aplicativo aula02
Aplicativo aula02
 
Aplicativo aula01
Aplicativo aula01Aplicativo aula01
Aplicativo aula01
 
Aplicativo aula05
Aplicativo aula05Aplicativo aula05
Aplicativo aula05
 
Aplicativo aula04
Aplicativo aula04Aplicativo aula04
Aplicativo aula04
 
Programação aula001
Programação aula001Programação aula001
Programação aula001
 
Banco dedados aula001
Banco dedados aula001Banco dedados aula001
Banco dedados aula001
 
Banco dedados aula003
Banco dedados aula003Banco dedados aula003
Banco dedados aula003
 
Banco dedados aula002
Banco dedados aula002Banco dedados aula002
Banco dedados aula002
 

Estrutura de Dados PRONATEC: Listas, Pilhas, Filas e Árvores Binárias

  • 1. Aula 003 Estrutura de Dados PRONATEC Programa Nacional de Acesso ao Ensino Técnico e Emprego
  • 2. PRONATEC Programa Nacional de Acesso ao Ensino Técnico e Emprego
  • 3. 1. Uma pausa: Ponteiro no Delphi • Para algumas estruturas dinâmicas em Pascal precisamos usar o recurso de “Ponteiro” • Um Ponteiro é na verdade o endereço de memória RAM de um dado: variável ou estrutura • Para declararmos um ponteiro em Pascal usamos o símbolo “^” na sua declaração em frente do tipo que ele representa. Ex: var p : ^integer; declara “p” como um ponteiro para “inteiro”. • Significa que “p” aponta para um dado do tipo “inteiro” diretamente na memória RAM • Para acessarmos o conteúdo de “p” usamos, no código, o símbolo “^” após o ponteiro: “p^” é o inteiro apontado por “p”. Ex: “p^ := 1;” – “p” agora aponta para o inteiro “1” na memória RAM.
  • 4. 2. Estrutura: Lista • Também chamada de “Lista Ligada” ou “Lista Encadeada”, é uma estrutura em que cada elemento contém um dado e um ponteiro que aponta para o próximo elemento da lista. • O 1º elemento é a cabeça (head) da lista, o restante a cauda (tail). No último elemento o ponteiro para o próximo não aponta para nada. Em Pascal indicamos por “nil” que significa um “Ponteiro Vazio” que não aponta para nada.
  • 5. 3. Definição e Operação com Lista • Para definir uma lista de inteiros em pascal: Type ApontaElemento : ^Elemento; Elemento : record num: integer; prox: ApontaElemento; end; Lista : ApontaElemento; // Tipo Lista: Aponta a cabeça (1º Elemento) • Operações com uma lista: • CriaLista(): Cria um ponteiro para uma nova lista • Cardinalidade(p): Retorna quantos elementos tem P • InsereItem(x,p): Inclui item “x” na lista “p” • RemoveItem(x,p): Exclui 1ª ocorrência de x em p • RemovePrimeiro(p): Excluir cabeça da lista “p” • Busca(x,p): Retorna ponteiro para “x” na lista “p” ou “nil” se não localizado
  • 6. 4. Operações com Listas • Cria uma lista vazia: Function CriaLista () : Lista; Begin result := nil; End; • Verificar o tamanho da lista P Function Cardinalidade (p:Lista):integer; Var i:integer; Begin i:=0; while p<>nil do begin p := p^.prox; inc(i); end; result := i; End; • Busca um elemento na Lista “p” Function Busca(x:integer; p:Lista):ApontaElemento; Var q:ApontaElemento; Begin q := p; while (q<>nil) and (q^.num<>x) do q:=q^.prox; result := q; End; • Inserir um elemento na Lista Procedure Insere (x:integer; var p:Lista); Var q:ApontaElemento; Begin new(q); // Abre um espaço na RAM q^.num := x; q^.prox := p; p := q; End; • Remover 1º elemento de uma Lista Procedure RemovePrimeiro(var p:Lista); Var q:ApontaElemento; Begin if p=nil then exit; q := p^.prox; dispose(p); p : = q; End;
  • 7. 5. Remoção Específica em Lista • Remover 1ª ocorrência do elemento “x” na Lista Function Remove(x:integer; var p:Lista):boolean; Var q,r:ApontaElemento; Begin result := false; if p=nil then exit; // Lista vazia – sai result := True; if p^.num=x then begin // 1º da Lista – Remove o Primeiro RemovePrimeiro(p); exit; end; q := p; repeat r := q; q := q^.prox; until (q = nil) or (q^.num = x); if q <> nil then begin // Se Encontrou x Remove r^.prox := q^.prox; dispose(q); end; End;
  • 8. 6. Estrutura: Pilha • Uma pilha é uma lista especial em que os elementos são inseridos sempre na cabeça e retirados sempre dela. Assim a impressão que se tem é que estamos “empilhando” os dados e quando retiramos um dado estamos “desempilhando” • As pilhas são conhecidas em estrutura de dados como uma fila FILO (First In – Last Out): primeiro a entrar, último a sair.
  • 9. 7. Definição e Operação da Pilha • Para definir uma Pilha de inteiros em pascal: Type ApontaElemento : ^Elemento; Elemento : record num: integer; prox: ApontaElemento; end; Pilha : ApontaElemento; // Tipo Pilha: Aponta sempre o Topo • Operações com uma lista: • CriaPilha(): Cria um ponteiro para uma nova pilha • Cardinalidade(p): Número de itens na pilha • Empilha(x,p): Inclui item “x” no topo da pilha “p” • Desempilha(p): Retorna elemento do topo e diminui o tamanho da pilha em uma unidade
  • 10. 8. Operações com Pilhas • Cria uma nova Pilha: Function CriaPilha() : Pilha; Begin result := nil; End; • Verificar o tamanho da pilha P Function Cardinalidade (p:Pilha):integer; Var i:integer; Begin i:=0; while p<>nil do begin p := p^.prox; inc(i); end; result := i; End; • Empilha um elemento na pilha Procedure Empilha (x:integer; var p:Pilha); Var q:ApontaElemento; Begin new(q); // Abre um espaço na RAM q^.num := x; q^.prox := p; p := q; End; • Desempilha elemento da pilha P Function Desempilha(var p:Pilha; var x:integer):boolean; Var q:ApontaElemento; Begin result := false; if p=nil then exit; result := true; x := p^.num; q := p^.prox; dispose(p); p : = q; End;
  • 11. 9. Estrutura: Fila • Uma fila é uma lista especial em que os elementos são inseridos sempre como último da cauda e retirado sempre o primeiro da cabeça. Assim a impressão que se tem é que estamos “enfileirando” os dados. • As filas por definição são FIFO (First In – First Out): primeiro a entrar é o primeiro a sair.
  • 12. 10. Definição e Operação na Fila • Para definir uma Fila de inteiros em pascal: Type ApontaElemento : ^Elemento; Elemento : record num: integer; prox: ApontaElemento; end; Fila : ApontaElemento; // Tipo Fila: Aponta o último elemento incluído • Operações com uma Fila: • CriaFila(): Cria um ponteiro para uma nova fila • Cardinalidade(p): Número de itens na fila • Enfileira(x,p): Inclui item “x” na fila “p” • Retira(p): Remove o elemento mais “antigo” na lista “p”, que é o mais antigo na fila
  • 13. 11. Operações com Filas • Cria uma nova Fila: Function CriaFila() : Fila; Begin result := nil; End; • Verificar o tamanho da fila P Function Cardinalidade (p:Fila):integer; Var i:integer; Begin i:=0; while p<>nil do begin p := p^.prox; inc(i); end; result := i; End; • Empilha um elemento na fila Procedure Enfileira (x:integer; var p:Fila); Var q:ApontaElemento; Begin new(q); // Abre um espaço na RAM q^.num := x; q^.prox := p; p := q; End; • Retirar elemento da Fila (o mais antigo) Function Retira(x:integer; var p:Fila):boolean; Var q,r:ApontaElemento; Begin result := false; if p=nil then exit; result := True; if p^.prox=nil then begin // Fila de 1 elemento x := p^.num; p := nil; exit; end; q := p; repeat r:=q; q:= q^.prox; until (q^.prox = nil); x := q^.num; r^.prox := nil; dispose(q); End;
  • 14. 12. Recursividade • É o processo que para resolver um problema chama ele mesmo novamente. Ou seja, uma função que chama ela mesma no seu funcionamento. Exemplo: Function Fatorial (n:integer):integer; Begin if n=0 then result:=1 else result := n * Fatorial (n-1); End; • Alguns problemas computacionais só podem ser resolvidos pela recursão. Quando for possível devemos evitar a recursividade pois consome mais recursos e costuma ficar mais lento e ineficiente que as formas normais de repetição: for, while, repeat
  • 15. 13. Estrutura: Árvore Binária • Uma árvore binária é uma estrutura onde cada elemento aponta dois outros, um a sua esquerda e outro a sua direita. Na medida em que se inclui novos elementos dá-se a impressão de que a árvore “cresce” para baixo. • Cada elemento na árvore também é chamado de “Nó”
  • 16. 14. Definição e Operação em Árvore • Para definir uma Árvore de inteiros em pascal: Type ApontaElemento : ^Elemento; Elemento : record num: integer; esq, dir: ApontaElemento; end; Arvore: ApontaElemento; // Tipo Árvore: Aponta o elemento topo (raiz) da estrutura • Operações com uma Árvore: • CriaArvore(): cria ponteiro para uma nova árvore • InsereEsq(x,a): insere “x” à esquerda • InsereDir(x,a): insere “x” à direita • Percorre(a): Percorre todos elementos da árvore