Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
1 1
Listas Lineares
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.1 2 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.1 3
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.1.1 6 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.1.1 7
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.1.2 10 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.1.2 11
procedure FLVazia ( var Lista : TipoLista ) ; procedure Retira (p:Apontador ; var Lista : TipoLista ;
begin var Item : TipoItem ) ;
new ( Lista . Primeiro ) ; {−−Obs. : o item a ser retirado e
Lista . Ultimo : = Lista . Primeiro ; o seguinte ao apontado por p −−}
Lista . Primeiro^.Prox : = n i l ; var q : Apontador;
end; begin
i f Vazia ( Lista ) or (p = n i l ) or (p^.Prox = n i l )
then writeln ( ’ Erro : Lista vazia ou posicao nao existe ’ )
function Vazia ( Lista : TipoLista ) : boolean;
else begin
begin
q : = p^.Prox ; Item : = q^.Item ; p^.Prox : = q^.Prox;
Vazia : = Lista . Primeiro = Lista . Ultimo ;
i f p^.Prox = n i l then Lista . Ultimo : = p;
end;
dispose (q) ;
end;
procedure Insere ( x : TipoItem ; var Lista : TipoLista ) ;
end;
begin
new( Lista . Ultimo^.Prox ) ;
procedure Imprime ( Lista : TipoLista ) ;
Lista . Ultimo : = Lista . Ultimo^.Prox;
var Aux: Apontador;
Lista . Ultimo^.Item : = x ;
begin
Lista . Ultimo^.Prox : = n i l
Aux : = Lista . Primeiro^.Prox;
end;
while Aux <> n i l do
begin
writeln (Aux^.Item .Chave) ; Aux : = Aux^.Prox;
end;
end;
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.1.2 14 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.1.2 15
...
ordena os registros pelo campo NotaFinal ;
for Nota := 10 downto 0 do
7
while houver registro com mesma nota do 8 ...
i f existe vaga em um dos cursos de opcao do candidato 9 Registro nil
then insere registro no conjunto de aprovados 10 Registro Registro nil
else insere registro no conjunto de reprovados;
imprime aprovados por curso ; imprime reprovados;
end.
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.1.2 18 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.1.2 19
Cursos
insere registro nas listas de classificação, conforme nota final;
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.1.2 22 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.1.2 23
• É uma lista linear em que todas as inserções, • Propriedade: o último item inserido é o
retiradas e, geralmente, todos os acessos são primeiro item que pode ser retirado da lista.
feitos em apenas um extremo da lista. São chamadas listas lifo (“last-in, first-out”).
• Existe uma ordem linear para pilhas, do “mais
• Os itens são colocados um sobre o outro. O
recente para o menos recente”.
item inserido mais recentemente está no topo
e o inserido menos recentemente no fundo. • É ideal para processamento de estruturas
aninhadas de profundidade imprevisível.
• O modelo intuitivo é o de um monte de pratos
em uma prateleira, sendo conveniente retirar • Uma pilha contém uma seqüência de
ou adicionar pratos na parte superior. obrigações adiadas. A ordem de remoção
garante que as estruturas mais internas serão
• Esta imagem está freqüentemente associada processadas antes das mais externas.
com a teoria de autômato, na qual o topo de
• Aplicações em estruturas aninhadas:
uma pilha é considerado como o receptáculo
de uma cabeça de leitura/gravação que pode – Quando é necessário caminhar em um
conjunto de dados e guardar uma lista de
empilhar e desempilhar itens da pilha.
coisas a fazer posteriormente.
– O controle de seqüências de chamadas de
subprogramas.
– A sintaxe de expressões aritméticas.
• As pilhas ocorrem em estruturas de natureza
recursiva (como árvores). Elas são utilizadas
para implementar a recursividade.
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.2 26 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.2.1 27
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.2.1 30 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.2.2 31
procedure Desempilha ( var Pilha : TipoPilha ; • Há uma célula cabeça é no topo para facilitar
var Item : TipoItem ) ; a implementação das operações empilha e
begin desempilha quando a pilha está vazia.
i f Vazia ( Pilha )
• Para desempilhar o item xn basta desligar a
then writeln ( ’ Erro : pilha esta vazia ’ )
célula cabeça da lista e a célula que contém
else begin
xn passa a ser a célula cabeça.
Item : = Pilha . Item [ Pilha .Topo] ;
Pilha .Topo : = Pilha .Topo − 1; • Para empilhar um novo item, basta fazer a
end; operação contrária, criando uma nova célula
end; cabeça e colocando o novo item na antiga.
nil
function Tamanho ( Pilha : TipoPilha ) : integer ;
6
begin
Fundo - x1
Tamanho : = Pilha .Topo;
end; 6
..
.
6
xn
Topo -
Cabeça
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.2.2 32 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.2.2 33
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.2.2 34 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.2.2 35
procedure Desempilha ( var Pilha : TipoPilha ; • “#”: cancelar caractere anterior na linha sendo
var Item : TipoItem ) ; editada. Ex.: UEM##FMB#G → UFMG.
var q : Apontador; • “\”: cancela todos os caracteres anteriores na
begin linha sendo editada.
i f Vazia ( Pilha )
then writeln ( ’ Erro : l i s t a vazia ’ ) • “*”: salta a linha. Imprime os caracteres que
else begin pertencem à linha sendo editada, iniciando
q : = Pilha .Topo; uma nova linha de impressão a partir do
Pilha .Topo : = q^.Prox; caractere imediatamente seguinte ao
Item : = q^.Prox^.Item ; caractere salta-linha. Ex: DCC*UFMG.* →
dispose (q) ; DCC
Pilha .Tamanho : = Pilha .Tamanho − 1; UFMG.
end;
• Vamos escrever um Editor de Texto (ET) que
end;
aceite os três comandos descritos acima.
function Tamanho ( Pilha : TipoPilha ) : integer ; • O ET deverá ler um caractere de cada vez do
begin texto de entrada e produzir a impressão linha
Tamanho : = Pilha .Tamanho; a linha, cada linha contendo no máximo 70
end; caracteres de impressão.
• O ET deverá utilizar o tipo abstrato de
dados Pilha definido anteriormente,
implementado por meio de arranjo.
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.2.2 36 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.2.2 37
utilizando seus poderes extras (cuidado, pois agora • A implementação do TAD Pilha que utiliza
vamos estourar arranjo pode ser substituída pela
a capacidade máxima da linha de impressão, que é de implementação que utiliza apontadores sem
70 causar impacto no programa.
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.2.2 38 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.2.2 39
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.3.1 42 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.3.1 43
expandir-se. Tras
´ 8 5
7 6
• A operação Desenfileira faz a parte da frente
• A fila se encontra em posições contíguas de
da fila contrair-se.
memória, em alguma posição do círculo,
• A fila tende a caminhar pela memória do delimitada pelos apontadores Frente e Trás.
computador, ocupando espaço na parte de
• Para enfileirar, basta mover o apontador Trás
trás e descartando espaço na parte da frente.
uma posição no sentido horário.
• Com poucas inserções e retiradas, a fila vai
ao encontro do limite do espaço da memória • Para desenfileirar, basta mover o apontador
alocado para ela. Frente uma posição no sentido horário.
4
Tras
´ 8 5
7 6
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.3.1 44 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.3.1 45
Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.3.1 46 Projeto de Algoritmos – Cap.3 Estruturas de Dados Básicas – Seção 3.3.2 47