7

Click here to load reader

Programação aula003

Embed Size (px)

Citation preview

Page 1: Programação aula003

Aula 003

Estrutura de Dados

PRONATEC

Programa Nacional de Acesso ao

Ensino Técnico e Emprego

Page 2: Programação aula003

PRONATEC

Programa Nacional de Acesso

ao Ensino Técnico e Emprego

Page 3: Programação aula003

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.

Page 4: Programação aula003

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”

Page 5: Programação aula003

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;

Page 6: Programação aula003

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;

Page 7: Programação aula003

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;