Escolar Documentos
Profissional Documentos
Cultura Documentos
ESTRUTURA DE
DADOS
MÓDULO-01
LISTAS
LISTAS LINEARES
MOTIVAÇÃO
CONCEITUAÇÃO
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 1 MANUEL
LISTAS LINEARES
DEF: LISTA é uma coleção ordenada de componentes do
mesmo tipo. Tipicamente este é o tipo registro (record);
LISTAS LINEARES
REPRESENTAÇÃO FÍSICA
L = {x1,x2,x3,.......,xn} ⇒ Lista com n nós.
X1 X2 X3 ...... Xn
INFO ELO INFO ELO INFO ELO INFO ELO
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 2 MANUEL
LISTAS LINEARES
PRINCIPAIS OPERAÇÕES SOBRE LISTAS
LISTAS LINEARES
FORMAS DE REPRESENTAÇÃO
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 3 MANUEL
LISTAS LINEARES
POR CONTIGÜIDADE
CARACTERÍSTICAS
Explora a seqüencialidade da memória do
computador.
Os nós (registros) são armazenados em endereços
contíguos (lado a lado).
Relação de ordem: se o endereço do nó xk é
conhecido, o endereço do nó xk+1 pode ser
determinado.
LISTAS LINEARES
IMPLEMENTAÇÃO
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 4 MANUEL
LISTAS LINEARES
VANTAGEM
DESVANTAGENS
LISTAS LINEARES
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 5 MANUEL
LISTAS LINEARES
LISTAS LINEARES
Program Inclui_Dado;
const N_Max = 2000;
type Lista = record
Nome: String[30];
CPF : String[11];
end;
var reg : Array [1..N_Max] of Lista;
I, N_Lista : Integer;
begin 1 2 3 4 (4) 4 4
for I := 800 Downto 4 do Reg[801] := Reg[800];
Reg[I+1] := Reg [I]; Reg[5] := Reg[4];
Reg [4].Nome := “Novo Nome”;
Reg [4].CPF := “Novo CPF”;
N_Lista := 801;
end.
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 6 MANUEL
LISTAS LINEARES
for I := 4 to 800 do
Reg[I+1] := Reg [I];
end. 1 2 3 4 (4) 4 4
Reg[5] = Reg[4];
MÓDULO-03
DEFINIÇÕES PARA IMPLEMENTAÇÃO (PASCAL)
x1 x2 x3 ............
01 02 03 DIM
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 7 MANUEL
DEFINIÇÕES PARA IMPLEMENTAÇÃO (PASCAL)
x1 x2 x3 ............
01 02 03 DIM
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 8 MANUEL
Const
Dim = 100;
Type
Tipo_Chave = record
Matr: String [10];
end;
Tipo_Elemento = record
Chave: Tipo_Chave;
Conteudo: String [30];
end;
Tipo_Lista = record
Ini : Integer;
Fim : Integer;
Cor : Integer; {*DESCRITORES * }
Num: Integer;
Elemento:Array[1..Dim]of Tipo_Elemento;
end;
Var { Declaração das Variáveis }
L : Tipo_Lista;{ L = Lista}
X,W : Tipo_Elemento; {Elemento da Lista-Informações}
Cr : Integer; {Código de retorno}
POR ENCADEAMENTO
CARACTERÍSTICA ⇒
Cada elemento é associado a outro através de um
PONTEIRO ⇒ elo de ligação.
Quando é necessário se fazer uma inclusão ou exclusão
de um elemento em uma posição intermediária, não é
preciso deslocar os demais elementos de suas posições
originais, basta que se atualize os ponteiros.
Para grandes conjuntos de dados consegue-se maior
rapidez de processamento nas operações realizadas
com os mesmos.
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 9 MANUEL
POR ENCADEAMENTO
X1 X2 X3 ...... Xn
INFO ELO INFO ELO INFO ELO INFO ELO
FIM
INFO ⇒ INFORMAÇÃO / ELO ⇒ ENDEREÇO DO PRÓXIMO NÓ
SEQUENCIALIDADE ⇒ é preservada de uma forma LÓGICA
e não de uma forma FÍSICA.
Pode-se ter várias ordenações distintas para os elementos de
uma Lista. Para isto, basta que sejam criadas diferentes
seqüências de ponteiros, (diferentes conteúdos do vetor ELO)
cada uma das sequências corresponderá a uma ordenação
diferente.
POR ENCADEAMENTO
INÍCIO → CRIAÇÃO DA LISTA
X3 2 X4 0 X1 4 X2 1
INFO ELO INFO ELO INFO ELO INFO ELO
01 02 03 04
SEQÜENCIALIDADE LÓGICA - (NÃO FÍSICA)
DESCRITORES
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 10 MANUEL
POR ENCADEAMENTO
INÍCIO → CRIAÇÃO DA LISTA
X3 2 X4 0 X1 4 X2 1
INFO ELO INFO ELO INFO ELO INFO ELO
01 02 03 04
SEQUENCIALIDADE LÓGICA - (NÃO FÍSICA)
Com uma pequena dose de abstração, um mínimo de
criatividade, e uma razoável linguagem de programação,
pode-se fazer uma boa utilização do conceito de Lista para
resolver problemas práticos.
Algumas linguagens oferecem recursos de alocação dinâmica
(pointers, etc), o que facilita a implementação das operações
sobre Listas Encadeadas. Para as linguagens que não
oferecem este tipo de recurso, usa-se o Encadeamento
Simulado que será visto a seguir.
ENCADEAMENTO SIMULADO
INFO ⇒ X3 X4 X1 X2
ELO ⇒ 02 00 05 00 01
01 02 03 04 05
FIM DA LISTA PRÓXIMO
LIVRE
DESCRITORES ⇒ STATUS DA LISTA
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 11 MANUEL
Penso, logo existo.
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 12 MANUEL
OPERAÇÕES BÁSICAS - ALOCAÇÃO CONTÍGUA
CRIAÇÃO DA LISTA ⇒ Cria uma Lista vazia.
PROCEDURE CRIA_LISTA (var L : Tipo_Lista);
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 13 MANUEL
OPERAÇÕES BÁSICAS - ALOCAÇÃO CONTÍGUA
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 14 MANUEL
OPERAÇÕES BÁSICAS - ALOCAÇÃO CONTÍGUA
INCLUSÃO/ALTERAÇÃO
⇒ Inclui elemento X ordenadamente na Lista sem
permitir duplicatas. Pesquisa para saber onde incluir.
PROCEDURE INCLUI_ORD (varL:Tipo_Lista; var
X:Tipo_Elemento;var CR:Integer);
INCLUSÃO/ALTERAÇÃO
⇒ Altera os campos do elemento corrente
(Incrementa conteúdo).
PROCEDURE ALTERA_CORR (var L:Tipo_Lista;var
W:Tipo_Elemento;var X:Tipo_Elemento);
INCLUSÃO/ALTERAÇÃO
⇒ Inclusão Ordenada/Alteração - Inclui ordenadamente
se não existir e altera conteúdo se existir.
PROCEDURE INCLUI_ALTORD (var L:Tipo_Lista; var
X:Tipo_Elemento;var CR:Integer);
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 15 MANUEL
OPERAÇÕES BÁSICAS - ALOCAÇÃO CONTÍGUA
seu conteúdo em X.
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 16 MANUEL
OPERAÇÕES BÁSICAS - ALOCAÇÃO CONTÍGUA
Exercício-2: Sejam LA e LB duas listas com os seguintes
conteúdos: LA = { a, b, c } e LB = {d, c, b }. (PAG. 14)
Qual a saída produzida pelo trecho do algoritmo abaixo:
Prim_Corr(LA,XA,Cra);
While (Cra = 0) Do
Begin
Prim_Corr(LB,XB,Crb);
While (Crb = 0) Do
Begin
IF XA > XB
Then writeln(XB,XA)
Else writeln(XA,XB);
Prox_Corr(LB,XB,Crb);
end;
Prox_Corr(LA,XA,Cra);
end;
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 17 MANUEL
OPERAÇÕES BÁSICAS - ALOCAÇÃO CONTÍGUA
Exercício-3: Construa um algoritmo para percorrer os
elementos de uma Lista L, imprimindo apenas os elementos
que tiverem um conteúdo maior que o conteúdo do seu
anterior. (PAG.15)
4 6 1 8 3 2 7 10
x x x x
ALG-EX03;
Var L : Tipo_Lista;
X,W : Tipo_Elemento;
CR : Integer;
Prim_Corr (L,X,Cr);
If Cr = 0 Then
Begin
W := X;
Prox_Corr (L,X,Cr);
While Cr = 0 Do
Begin
If X > W
Then writeln( X );
W := X;
Prox_Corr ( L,X,Cr );
end;
end; { Fim ALG-EX03 }
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 18 MANUEL
L= { 1, 4, 6, 2, 10 }
ALG-EX03;
Var L : Tipo_Lista; INSTÂNCIA CR SAÍDA
X,W : Tipo_Elemento; X=1 W=1 0 W=X -
CR : Integer; X=4 W=1 0 LÊ X -
Prim_Corr (L,X,CR); X=4 W=1 0 TESTA 4
If CR = 0 Then X=4 W=4 0 W=X -
Begin X=6 W=4 0 LÊ X -
W := X;
X=6 W=4 0 TESTA 6
Prox_Corr (L,X,CR);
While CR = 0 Do X=6 W=6 0 W=X -
Begin X=2 W=6 0 LÊ X -
If X > W X=2 W=6 0 TESTA -
Then writeln( X ); X=2 W=2 0 W=X -
W := X; X=10 W=2 0 LÊ X -
Prox_Corr ( L,X,CR );
X=10 W=2 0 TESTA 10
end;
X=10 W=10 0 W=X -
end; { Fim ALG-EX03 }
X=? W=10 1 FIM -
L= { 1, 0, 4, 4, 6 }
ALG-EX03;
Var L : Tipo_Lista; INSTÂNCIA CR SAÍDA
X,W : Tipo_Elemento; X=1 W=1 0 W=X -
CR : Integer; X=0 W=1 0 LÊ X -
Prim_Corr (L,X,CR); X=0 W=1 0 TESTA -
If CR = 0 Then X=0 W=0 0 W=X -
Begin X=4 W=0 0 LÊ X -
W := X;
X=4 W=0 0 TESTA 4
Prox_Corr (L,X,CR);
While CR = 0 Do X=4 W=4 0 W=X -
Begin X=4 W=4 0 LÊ X -
If X > W X=4 W=4 0 TESTA -
Then writeln( X ); X=4 W=4 0 W=X -
W := X; X=6 W=4 0 LÊ X -
Prox_Corr ( L,X,CR );
X=6 W=4 0 TESTA 6
end;
end; { Fim ALG-EX03 } X=6 W=6 0 W=X -
X=? W=6 1 FIM -
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 19 MANUEL
Exercício-5: Considere o conjunto contendo dados
consolidados mensais sobre o consumo de produtos agrícolas
em cada estado do país. (PAG.16)
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 20 MANUEL
a. Qual o valor anual gasto em cada estado com cada produto?
RELATÓRIO
UF PRODUTO VALOR ANUAL
AC BANANA 200,00
AC LARANJA 300,00
BA LARANJA 150,00
BA MAÇA 200,00
CE MAMÃO 200,00
CE MORANGO 800,00
..........................................................................
..........................................................................
MA ABACAXI 300,00
PI LARANJA 100,00
RJ BANANA 200,00
RJ MORANGO 600,00
SP BANANA 200,00
SP MAMÃO 100,00
SP PÊRA 900,00
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 21 MANUEL
DIAGRAMA FÍSICO
REGRA DE
NEGÓCIO
LISTA MONTADA
LEITURA EM MEMÓRIA
GERAÇAO
DA LISTA
RELATÓRIO
UF PRODUTO VALOR
BASE DE DADOS AC UVA 80,00
ARQUIVO DE ENTRADA ......................................
“C:/DADOS/........./” SP PÊRA 100,00
BASE DE DADOS
ARQUIVO DE ENTRADA
ARQ:FILE OF T_DADOS
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 22 MANUEL
{MONTAGEM DA LISTA - REGRA DE NEGÓCIO}
begin
CriaLista(Lista); {Associa o arquivo lógico Arq ao}
Assign (Arq, ‘Dados.txt’); { arquivo físico ‘Dados.txt ‘}
Reset(Arq); { Posiciona no 1º registro do arquivo }
while (CR=0) and (not (eof (Arq))) do { Início do WHILE }
begin
Read (Arq,Dados); { Início da leitura dos dados}
with X.Chave do
begin
UF:=Dados.UF; {X.Chave.UF := Dados.UF}
Produto:=Dados.Produto; {X.Chave.Produto:=Dados.Produto}
end;
X.Valor:=Dados.Nacional+Dados.Importado;
{Procedure que Inclui/Altera e Ordena os elementos da lista}
Inclui_AltOrd (Lista, X, Cr);
end; { Fim do while }
end;
{IMPRESSÃO DO RELATÓRIO}
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 23 MANUEL
b. Quais os estados que consomem mais produtos importados
do que nacionais, e quais os valores desse consumos?
LISTA EM MEMÓRIA
UF NACIONAL (R$) IMPORTADO (R$)
AC 400,00 720,00
AM 200,00 600,00
AP 400,00 540,00
BA 700,00 420,00
CE 600,00 300,00
..........................................................................
..........................................................................
MG 300,00 900,00
PB 100,00 500,00
PE 700,00 800,00
RJ 820,00 400,00
SC 800,00 910,00
SP 980,00 600,00
RELATÓRIO
UF NACIONAL (R$) IMPORTADO (R$)
AC 400,00 720,00
AM 200,00 600,00
AP 400,00 540,00
..........................................................................
..........................................................................
MG 300,00 900,00
PB 100,00 500,00
PE 700,00 800,00
SC 800,00 910,00
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 24 MANUEL
b. Quais os estados que consomem mais produtos importados
do que nacionais, e quais os valores desse consumos?
MUDANÇA NA REGRA DE NEGÓCIO = LÓGICA !
⇒ FAZER O TESTE A PRIORI !
⇒ SÓ INCLUIR NA LISTA SE X.IMPORTADO>X.NACIONAL
EXEMPLO REGISTRO LIDO NA BASE DE DADOS (MG)
X.CHAVE.UF = MG
X.NACIONAL = 200,00
X.IMPORTADO = 100,00
UF NACIONAL IMPORTADO VALORES DA UF = MG
NA LISTA QUE ESTÁ EM
MG 300,00 900,00 MEMÓRIA !
FAZER O TESTE A PRIORI ⇒ ERRO DE LÓGICA !
REGRA DE NEGÓCIO = LÓGICA = ALGORITMOS !
FLUTUA ACIMA DO BEM E DO MAL !
ELEMENTOS LISTA
MG 100 200
AC 200 100
RJ 300 400
SP 400 600
CE 100 400
BA 200 300
RJ 100 200
MG 200 300
SC 100 200
SP 200 300
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 25 MANUEL
ELEMENTOS LISTA
ESTRUTURA DE DADOS
MÓDULO_01 - LISTAS 26 MANUEL