Click here to load reader
Upload
claudio-gontijoamaral
View
72
Download
0
Embed Size (px)
Citation preview
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. Estrutura de Dados• Até aqui vimos as estruturas de dados que não se
alteram em sua forma ou dimensão: vetor, matriz e record. Por isso elas são chamadas “Estruturas de Dados Estáticas”.
• Agora vamos estudar as “Estruturas de Dados Dinâmicas” que podem se alterar em forma e dimensões e podem “crescer” ou “diminuir” de acordo com a necessidade de quem as utiliza.
• Dentre as estruturas dinâmicas mais conhecidas estudaremos: conjuntos, listas ligadas, filas, pilhas, árvores e grafos.
2. Conjuntos• Um conjunto é uma coleção de elementos sem repetição• Operações: saber se está vazio, elemento pertence ou não ao
conjunto, inserir ou remover elemento, união e interseção entre conjuntos.
• Vamos fazer as operações:• CriaConjunto (c): inicializa a estrutura do conjunto• ConjuntoVazio (c): retorna TRUE se “c” é vazio• Cardinalidade (c): número de elementos em “c”• Pertence (x,C): retorno TRUE se “x” está em “C”• Insere(x,C): inclui elemento “x” no conjunto “C”• Remove(x,C): remove “x” do conjunto “C”• Uniao(c1,c2,c3): une os conjuntos “c1” e “c2” dando como
resultado o conjunto “c3”• Intersecao(c1,c2,c3): faz a interseção entre os conuntos “c1” e
“c2” dando o resultado no conjunto “c3”• Contido(c1,c2): retorna TRUE se “c1” está contido em “c2”
3. Definições para Conjuntos• A estrutura de um conjunto em pascal pode ser definida como
um tipo:CONST max = 10000;TYPE vetor = array[1..max] of integer;
conjunto = recordtam: integer;v: vetor;
end;• Com essa definição podemos declarar uma variável do tipo
“conjunto” assim:VAR c : conjunto;• Função para criar um Conjunto, somente faz o tamanho ser “0”Procedure CriaConjunto (var c:conjunto);Begin
c.tam := 0;End;
4. Operações com Conjuntos• Verificar se um conjunto está vazio:Procedure ConjuntoVazio (c:conjunto);Begin
result := c.tam = 0;End;• Verificar o tamanho do conjuntoFunction Cardinalidade (c:conjunto):integer;Begin
result := c.tam;End;
• Ver se um elemento pertence ao conjuntoFunction Pertence (x:integer;
c:conjunto):boolean;Var i:integer;Begin
result := false; i:=1;while (i<=c.tam)and(not result) do begin
result := c.v[i] = x; i:=i+1;end;
End;
• Inserir um elemento no conjunto
Procedure Insere (x:integer; var c:conjunto);
Begin
if Pertence(x,c) then exit;
c.v [c.tam+1] := x; c.tam := c.tam + 1;
End;• Devolve a posição de um elemento no vetorFunction Posicao (x:integer; c:conjunto):integer;Var i:integer;Begin
result:=0; i:=1;while (i<=c.tam)and(result=0) do begin
if c.v[i] = x then result:=i; i:=i+1;end;
End;• Remover elemento de um conjuntoProcedure Remove(x:integer; c:conjunto);Var i,p:integer;Begin
p:=Posicao(x,c); if (p=0) then exit;
for i:=p to c.tam-1 do c.v[i] := c.v[i+1];
c.tam := c.tam – 1;End;
5. Operações entre Conjuntos• Fazer união entre dois conjuntos:
Procedure Uniao (c1,c2:conjunto; var c3:conjunto);
Var i:integer;
Begin
c3.tam := 0;
for i:=1 to c1.tam do Insere(c1.v[i], c3);
for i:=1 to c2.tam do Insere(c2.v[i], c3);
End;
• Fazer interseção entre dois conjuntos:
Procedure Intersecao (c1,c2:conjunto; var c3:conjunto);
Var i:integer;
Begin
c3.tam := 0;
for i:=1 to c1.tam do
if Pertence (c1.v[i], c2) then Insere(c1.v[i], c2);
End;
• Verifica se um conjunto está contido no outro
Function Contido (c1,c2:conjunto) : boolean;
Var i:integer;
Begin
result := True;
for i:=1 to c1.tam do
result := result and Pertence (c1.v[i], c2);
End;