Sunteți pe pagina 1din 120

Estruturas de Dados e Algoritmos

Conceitos Iniciais

Prof. Marcelo Charan
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Tipos Primitivos
No so suficientes para representar toda e
qualquer informao
Se existissem mais tipo de dados,
contemplaramos um maior nmero de
informaes
Situao tima: se pudssemos construir novos
tipos de dados medida que fossem
necessrios.

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Contemplando Outros Tipos
Felizmente sim, possvel!!
Construiremos novos tipos, denominados tipos
construdos, a partir da composio de tipos
primitivos;
Estes novos tipos tm um formato denominado
ESTRUTURA DE DADOS, que define como os
tipos primitivos esto organizados
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Conceitos
Analogia com a Teoria dos Conjuntos:
Variveis de tipo primitivo Elemento
Estrutura de Dados Conjunto
Estruturas de Dados compostas de elementos
com o mesmo tipo primitivo so chamadas
Variveis Compostas Unidimensionais

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Variveis Compostas
Unidimensionais
Prdio com nmero finito de andares

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Variveis Compostas
Unidimensionais
Estrutura Unidimensional Homognea
Vetores!!
Em C# :
tipo[ ] nomeVariavel = new tipo[n] ;
Onde tipo um tipo primitivo
n um nmero inteiro positivo
new : todo array um objeto
Ex: string[ ] nomesAlunos = new string[40] ;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Variveis Compostas
Multidimensionais
Tabuleiro de Xadrez:


Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Variveis Compostas
Multidimensionais
Vetores: necessidade de apenas um ndice
Unidimensionais
Para representar o tabuleiro de xadrez
precisamos de mais de um ndice
Estrutura Composta Multidimensional
Tabuleiro: bidimensional
Outras Estruturas: n-dimensionais;
Matrizes / Arrays
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Estruturas Homogneas
Multidimensionais
Ainda estamos falando de estruturas com
elementos do mesmo tipo: homogneas
Em C#:
tipo[ , ] nomeVariavel = new tipo[m,n] ;
Onde tipo um tipo primitivo;
m e n so nmeros inteiros positivos;
new : todo array um objeto
Ex: string[ ] nomesCompletos = new string[40,2] ;

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Estruturas Homogneas
Multidimensionais
O C# tambm permite o uso de Arrays
retalhados ;
Arrays retalhados permitem fixar um ndice, e
alocar os demais indces de forma dinmica;
Estes Arrays so mantidos como arrays de
arrays;
Diferente do caso anterior, aqui os arrays que
compe os arrays retalhados podem ter
diferentes comprimentos;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Arrays Retalhados
Em C#:
tipo[ ][ ] nomeVariavel = new tipo[n][] ;
Onde tipo um tipo primitivo;
n um nmero inteiro positivo;
new: instancia o novo objeto;
Ex: string[ ][ ] nomesCompletos = new string[40][] ;


Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Inicializao de
Vetores/Arrays
Como criar um array e inicializ-lo ao mesmo
tempo?
Tipo primitivo:
string nomeProfessor = Marcelo;
Vetor:
string[ ] nomeAlunos = {Aluno A, Aluno B, Aluna
C,Aluno D};

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Inicializao de
Vetores/Arrays
Matriz:
string[ , ] nomeSobrenome =
{ {Joo,Silva},{Jos,Simo},{Sofia,L} } ;
int[ ][ ] c = new int [2][ ] ;
c[0] = new int[ ] {1, 2};
c[1] = new int[ ] {3, 4, 5};



Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Estrutura de Repetio
foreach
Estrutura para iterar atravs dos valores em
estruturas de dados, como os arrays/vetores;
Quando usado em arrays de uma dimenso
(vetores), o foreach se comporta como uma
estrutura for que itera atravs faixa do ndice
de 0 at Length do array;
No lugar de um contador, o foreach usa uma
varivel para representar o valor de cada
elemento;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Estrutura de Repetio
foreach
Para Arrays multidimensionais, a estrutura
foreach comea com o elemento cujo ndices
so todos zero, e itera atravs de todas as
possveis combinaes de ndices,
incrementando o ndice mais direita primeiro;
Quando o ndice mais direita atinge o seu
limite superior, ele zerado, e o ndice
esquerda dele incrementado em 1;
A estrutura foreach muito til para iterar
atravs de arrays de objetos;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Estrutura de Repetio
foreach
Exemplo de uso:
int [ , ] arrayNotas = { {8,6,7,9}, {6,7,5,9},
{10,8,6,4} };
int menorNota = 11;
foreach ( int nota in arrayNotas )
{
if (nota < menorNota )
menorNota = nota;
}
Console.WriteLine(A nota mnima : +
menorNota );

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Variveis Compostas
Heterogneas
Conjunto de dados que no so do mesmo tipo;
Registro: conjunto de dados logicamente
relacionados de tipos diferentes;
Subdivises do registro campos;
Campos so as partes que especificam cada uma
das informaes que compe o registro;
Varivel do tipo registro composta(conjunto
de dados), e heterognea, pois cada campo
pode ser de um tipo diferente;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Exemplo de Registro
Passagem de nibus de Viagem:

Nmero: __________ Data:___________
De:____________ Para: _____________
Horrio: _______Poltrona:___ Idade:____
Nome:____________________________
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Variveis Compostas
Heterogneas
Registros em C# podem ser obtidos com as
struct s
public struct nomeNovoTipo
{
public tipo nomeCampo1;
public tipo nomeCampo2;
...
public tipo nomeCampoN;
}

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Definindo um Registro para
Passagem
public struct passagem
{
public int numeroPassagem;
public int numeroPoltrona;
public int idade;
public string nomePassageiro;
public string data;
public string origem;
public string destino;
public string horario;
}
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Utilizando a struct
passagem
...
static void Main(string[] args)
{
passagem p;
p.numPassagem = 1001;
p.nomePassageiro = Marcelo;
p.data = 07/08/2008;
...
Console.WriteLine(Passageiro +
p.nomePassageiro + com destino a ... );
}
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Recomendaes sobre
structs
Tipos struct so recomendados para
representar objetos leves
Por exemplo: Ponto, Retngulo e Cor
structs so mais eficientes em alguns cenrios;
So recomendados para estruturas menores do
que 16 bytes;
E as maiores de 16 bytes?!
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Programao Orientada a
OBJETOS
Design de Software
Orientado a Dados: representao da informao e
os relacionamentos entre as partes do todo; as
aes tem menos importncia;
Orientado a Procedimentos: enfatiza as aes do
artefato de software; dados so menos
importantes;
Orientado a Objetos: Equilibra as opes
anteriores;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Programao Orientada a
OBJETOS
Objetos combinam dados com os
procedimentos que operam estes dados;
Desta maneira, objetos encapsulam
(empacotam juntos) dados (atributos) e
mtodos (comportamentos);
Objetos tm a propriedade de ocultar sua
implementao de outros objetos (princpio
chamado ocultao de informaes)
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Programao Orientada a
OBJETOS
Objetos podem se comunicar uns com os
outros atravs de interfaces bem definidas,
porm no sabem como os outros objetos so
implementados;
Os detalhes da implementao ficam
escondidos dentro dos prprios objetos;
Ex: possvel dirigir bem um carro sem
conhecer os detalhes sobre como os sistemas
de motor, transmisso, escapamento, entre
outros funcionam internamente;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Programao Orientada a
OBJETOS
Nas linguagens de programao procedurais (como o
C), a programao tende a ser orientada a aes ;
Em C#, a programao orientada a objetos;
Em C e Pascal, a unidade de programao a funo
(chamada de mtodo em C#) ;
Em C#, a unidade de programao a classe;
Os objetos so instanciados (criados) a partir das
classes e as funes so encapsuladas dentro dos
limites das classes como mtodos;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Programao Orientada a
OBJETOS
Em C#, os programadores se concentram em
criar seus prprios tipos definidos pelo usurio,
chamados de classes;
Cada classe contm dados e um conjunto de
mtodos que manipulam dados;
Os componentes de dados, ou membros de
dados, de uma classe so chamados de
variveis membro ou variveis de instncia, ou
mais especificamente em C#: campos (fields)

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Programao Orientada a
OBJETOS
Assim como chamamos uma instncia de um
tipo primitivo (como um int) de varivel, ns
chamamos a instncia de um tipo definido pelo
usurio (uma classe) de objeto;
Em C# o foco da ateno est nos objetos, e
no nos mtodos;
Os substantivos em um documento de
requisitos ajudam o programador de C# a
determinar um conjunto inicial de classes com
o qual comear o processo do projeto;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Programao Orientada a
OBJETOS
Estas classes so ento utilizadas para
instanciar objetos que trabalharo juntos para
implementar o sistema;
Respondendo ltima pergunta do tpico
anterior: e as estruturas maiores de 16bytes?
Criaremos tipos definidos pelo usurio no formato
de classes, que quando instanciadas(utilizadas em
algum programa), so chamadas de objetos;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classes
O que uma classe?
Para o filsofo:
Um artefato de classificao humana;
Classificao baseada em comportamentos ou atributos
comuns;
Entre outros...
Para o programador Orientado a Objetos:
Uma construo sinttica nomeada classe que descreve
comportamentos e atributos comuns;
Uma estrutura de dados que inclui dados e funes

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classes
A palavra raiz da classificao classe
Exemplo: Carros
Todos os carros compartilham comportamentos
comuns (podem ser dirigidos, acelerados, parados)
E atributos comuns (tem 4 rodas, um motor, caixa
de cmbio, etc.);
Classes no so restritas classificao de
objetos concretos(como carros), elas podem
tambm descrever conceitos abstratos(como
tempo)
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Objetos
Um objeto uma instncia de uma classe
Objetos possuem:
Identidade: Objetos so distinguveis uns dos
outros
Comportamento: Objetos podem realizar tarefas
Estado: Objetos armazenam informao

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Objetos
Podemos usar a palavra Carro para nos referirmos ao
conceito de um carro (como uma classe) : os carros
da marca XYZ..
Em outros momentos, podemos usar a palavra Carro
com o significado de um carro especfico: meu carro..
Programadores usam o termo objeto ou instncia para
se referirem a um carro especfico;
importante entender esta diferena!
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Objetos - Identidade
Identidade a caracterstica que distingue um
objeto de todos os outros objetos da mesma
classe
Ex: duas pessoas possuem carros exatamente
do mesmo fabricante, modelo e cor;
Apesar de todas as similaridades, os nmeros de
chassi e de placa so garantidamente nicos e so
um reflexo externo de que os carros possuem
identidade;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Objetos Comportamento
Comportamento a caracterstica que torna os
objetos teis
Objetos existem para prover comportamentos
Ignoramos os trabalhos internos do carro e usamos
seu comportamento de alto nvel so teis porque
podemos dirigi-los
o comportamento de um objeto que acessvel!
Objetos da mesma classe possuem o mesmo
comportamento (ex: um carro um carro porque o
dirigimos)
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Objetos - Estado
Estado se refere ao funcionamento interno de um
objeto, que permite que ele tenha seu comportamento
definido
Um objeto bem projetado mantm o seu estado
inacessvel isso definido na classe que origina o
objeto
Conceitos de abstrao e encapsulamento
Ao usar um objeto, voc no se preocupa em como,
mas sim com o qu ele faz
Dois objetos podem conter o mesmo estado, mas
ainda assim serem dois objetos diferentes (gmeos)


Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Como criar uma classe?
Sintaxe C#:
class NomeClasse
{
Atributos;
Construtores;
Propriedades;
Mtodos(public);
Mtodos Utilitrios(private);
}

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Como criar uma classe?
Atributos e Construtores
Atributos(campos, variveis de instncia):
<modificador de acesso> <tipo> nome;
Ex: private int anoNascimento;
modificadores de acesso: public e private (mais comuns);
protected, internal, internal protected
Construtores(inicializao do objeto):
public NomeClasse( )
{

}
Argumentos so opcionais;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Como criar uma classe?
Propriedades
Propriedades (permitem a clientes externos
manipular modificar/resgatar variveis de instncia
com acesso do tipo private ):
<modificador de acesso> tipo Nome
{
get
{
...
}
set
{
...
}
}

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Como criar uma classe?
Propriedades
Exemplo de propriedade:
public int AnoNascimento
{
get
{
return anoNascimento;
}
set
{
if (value > DateTime.Now.Year)
anoNascimento = 1900;
else
anoNascimento = value;
}
}
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Como criar uma classe?
Mtodos
Mtodos (comportamentos / mensagens)
<modificador> <tipoRetorno> nomeMtodo( )
{
...
}
Argumentos so opcionais entre os (<tipo> nomeArg1,
<tipo> nomeArg2 ) ;
Exemplo:
public bool checaDeMaior(int anoNascto)
{
return (anoAtual anoNascto) >= 18 ? true : false ;
}

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Pausa para reviso:
operador condicional
O operador condicional (?:) um operador com funcionamento
muito prximo da estrutura if/else
?: o nico operador ternrio do C# - ele requer trs
operandos, que formam uma expresso condicional
O primeiro operando uma condio (uma expresso que
resulta num valor booleano bool)
O segundo o valor para a expresso condicional se a
condio resultar verdadeira (true)
O terceiro o valor para a expresso condicional se a condio
resultar falsa (false)
Pode ser usado em situaes nas quais o if/else no pode ser
usado, como argumento de mtodos ou atribuio de variveis;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Como criar uma classe?
Mtodos utilitrios
Mtodos utilitrios ou auxiliares
So mtodos usados internamente pela classe,
para auxiliar outros mtodos em suas tarefas;
Normalmente so mtodos declarados como
private, ou seja, so acessados somente por outros
mtodos membros da classe
Mtodos auxiliares, assim como os demais
mtodos, so herdados no processo de
herana/hierarquia de classes
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Implementado uma Classe
Implementar uma classe Hora;
Deve conter os atributos hora, minuto e
segundo, inteiros;
Construtor vazio que inicializa os atributos com
valor 0;
Deve disponibilizar dois mtodos pblicos:
impFormatoUniversal (24 horas) e
impFormatoPadro (12 horas)

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan

Estruturas de Dados e Algoritmos
Reviso Conceitos OO

Prof. Marcelo Charan

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Reviso OO
Arquitetos desenham plantas que guiam a
construo de imveis como: casas, prdios,
etc.;

Fotos e planta: Itacon Empreendimentos
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Reviso OO
A partir de uma planta, uma construtora pode
construir qualquer nmero de unidades daquele
projeto;

Fotos e planta: Itacon Empreendimentos
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Reviso OO
Depois que sua estrutura bsica construda, o
imvel pode ser personalizado conforme a
necessidade, vontade e gosto do cliente;
Fotos e planta: Itacon Empreendimentos
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Reviso OO
Na programao Orientada a Objetos
projetamos objetos que atendem s nossas
necessidades especficas;
Em linguagens de programao, definimos o
projeto (equivalente planta arquitetnica) dos
objetos nas estruturas chamadas Classes;
Um classe pode originar qualquer nmeros de
objetos daquele tipo, assim como uma
construtora pode construir N imveis a partir da
mesma planta;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Reviso OO
Podemos construir imveis a partir de uma mesma
planta em diferentes localidades, basta que alguns
requisitos de infra-estrutura sejam satisfeitos:
Tamanho do terreno;
Inclinao do terreno;
Acessibilidade do local;
Infra-estrutura de saneamento, abastecimento de energia
eltrica, etc.
Outros detalhes de engenharia civil;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Reviso OO
A partir de uma classe, podemos criar objetos
daquele tipo em diferentes mquinas,
ambientes, sistemas, etc, bastando que alguns
requisitos sejam satisfeitos, como por ex:
Disponibilidade de mquina virtual;
Disponibilidade de memria;
Arquitetura de processador;
Sistema operacional;
Entre outros;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Reviso OO
Depois que um objeto criado (instanciado) partir
de uma classe, podemos personaliz-lo de acordo
com as necessidades momentneas, modificando
seus atributos, e utilizando seus comportamentos
(mtodos);
Ao instanciar um objeto Aluno, podemos personalizar
aquele objeto nico para representar um nico aluno;
Podemos instanciar N objetos, conforme a
necessidade, para representar quantos alunos forem
necessrios;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Reviso OO
Reimplementar a classe Aluno
Atributos nome, sobrenome, codigoMatricula, anoIngresso,
semestreIngresso
Construtores e Propriedades
Mtodo que retorna a previso de concluso do curso (ano /
semestre)
Mtodo que retorna o nome completo
Escrever um programa que permite representar todos
os alunos como objetos;
Armazenar o conjunto de objetos em um vetor;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Composio/Agregao de
Classes
Um objeto pode ser composto de um conjunto
de partes, cujas quais podem ser outros objetos
Carro composto de rodas, motor, direo, ...
Gato composto de pernas, calda, cabea, ...
Podemos agregar objetos para criar um novo
tipo de objeto
Fazemos isso criando referncias a objetos
(classes) j existentes dentro do novo objeto;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Composio/Agregao de
Classes
Queremos armazenar a data de nascimento do
aluno;
Data pode ser encarada como um novo objeto;
Vamos definir a classe Data que implementa a
estrutura de dados que armazenar a data de
nascimento dos alunos;
Atributos dia, ms e ano;
Mtodo que retorna a string representando a data
no formato dd/mm/aaaa;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Composio/Agregao de
Classes
Modificar a classe Aluno para conter o atributo
dataNascimento, do tipo Data (classe definida
anteriormente);
Caso a data no seja informada na criao do
objeto, ajust-la para o valor padro 01/01/1990
Implementar o programa de teste do novo
objeto Aluno;
H necessidade de modificao imediata no
programa que j desenvolvemos?
Por qu?
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Atividade de Laboratrio
Criar a classe Data, respeitando os seguintes requisitos:
Atributos/Propriedades: dia, ms e ano (inteiros);
Restries:
1 <= dia <= LIMITE_MS; 1 <= ms <= 12 ; ano >= 1900;
LIMITE_MS = limite que verifica se o dia compatvel com o ms (Ex: dia
30/02 - dia 30 no um dia compatvel com o ms 02; Outro: 31/04 );
Ter o construtor vazio que inicializa o objeto com a data 01/01/1990;
Ter um construtor que inicializa o objeto com uma data especificada;
Se o dia/ms informado for incorreto, atribuir ao dia/ms o valor 01;
Ponto extra: verificar se o ano bissexto (ano%4 == 0) e aplicar a
respectiva restrio ao ms 02;
Mtodo formataStringData() que retorna a data no formato string
dd/mm/aaaa ;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Atividade de Laboratrio
Implementar uma aplicao console que cria
um vetor de objetos Data;
O vetor dever conter 31 objetos do tipo data,
cada um representando um dia especfico do
ms Janeiro;
Exibir as datas dos 31 objetos em console,
utilizando o mtodo formataStringData();
BOM TRABALHO!!!
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classe Data
A classe Data, se bem definida e estruturada,
pode ser usada:
Contextos diferentes
Console
Forms
Web
Grficos
Programas diferentes
Ex: Data publicao de um livro; Data contratao de um
funcionrio; Data fabricao de um produto;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classe Data
Implementamos uma classe reusvel
Reusabilidade ;
Quem usa, no necessariamente precisa
conhecer sua implementao Ocultamento /
Encapsulamento ;
A definio da Interface essencial para o
bom uso e funcionamento da classe;

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classe Data
Como vimos, data pode ser usada em vrios e
diferentes programas;
Existem outras estruturas que aparecem com
muita frequncia em vrios programas
diferentes, e em diferentes contextos
Web; Forms; Console; Grfico;
Ex: lista de funcionrios; lista de opes em um
form web; inventrio de itens de um jogo rpg; lista
de movimentos de um veculo em um jogo de
estratgia;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
O que vem seguir?
Nosso objetivo futuro: criar estruturas de dados
que contemplem os exemplos do slide anterior;
Para isso, vamos definir e criar estruturas para
agrupar outros objetos (dados), com um
comportamento definido, tais como: listas, filas,
pilhas, rvores e tabelas Hash;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan

Estruturas de Dados e Algoritmos
Tipos Abstratos de Dados
LISTAS LINEARES

Prof. Marcelo Charan

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Tipos Abstratos de Dados
Antes de um programa ser escrito, deveramos
ter uma idia tima de como realizar a tarefa
que est sendo implementada por ele;
Um delineamento do programa contendo seus
requisitos deveria preceder o processo de
codificao;
Quanto maior e mais complexo o projeto, mais
detalhada deveria ser a fase de delineamento;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Tipos Abstratos de Dados
Desde o incio, importante especificar cada tarefa
em termos de entrada e sada;
Neste estgio, no deveramos nos preocupar tanto
em como o programa poderia ou deveria ser feito
(detalhes de implementao), mas sim focar no que
ele deveria fazer;
O comportamento mais importante do que as
engrenagem do mecanismo que o executa;
Exemplo: se um item necessrio para realizar
algumas tarefas, o item especificado em termos das
operaes nele realizadas, em vez da estrutura
interna;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Tipos Abstratos de Dados
Depois que essas operaes so especificadas
precisamente, a implementao pode comear;
A implementao decide que estrutura de dados
deveria ser usada para tornar a execuo mais
eficiente (tempo e espao);
Um item especificado em termos de operaes
chamado de Tipo Abstrato de Dados;
Um TAD uma coleo de dados e um conjunto de
operaes que podem ser executadas nos dados;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Tipos Abstratos de Dados
TADs nos permitem separar os conceitos da
implementao;
Para definir um TAD, ser determinada uma
Estrutura de Dados e as operaes sobre esta
estrutura;
Assim, encapsulamos os dados e as
operaes sobre os dados e escondemos eles
do usurio;

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Tipos Abstratos de Dados
Em linguagens orientadas a objetos, como o
C#, h um vnculo direto com os Tipos
Abstratos de Dados
Estruturas de Dados + Operaes = CLASSE
Estruturas de Dados: atributos + propriedades
Definimos nossos prprios tipos
Operaes: aes e funes = MTODOS
Definimos mtodos, que so operaes, aes
sobre os dados (atributos) das classes
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Listas
Manipulamos, trabalhamos e convivemos com
listas diariamente:
Lista de compras
Lista de chamada
Inventrio de Itens
etc.
Listas aparecem com muita freqncia em
problemas computacionais, e normalmente com
implementao muito semelhante;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Listas
Listas so colees de itens, ordenados ou no,
agrupados em uma estrutura comum: a prpria lista;
Estes itens podem ou no ser do mesmo tipo;
Para considerarmos uma lista um TAD, devemos
definir algumas operaes sobre a lista;
Listas possuem algumas operaes comuns:
Insero de um item;
Remoo de um item;
Busca de um item;
etc (limpar lista, ordenar lista, ...);
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Listas Lineares
Uma lista linear uma lista na qual cada elemento
tem um nico sucessor;
Um elemento da linguagem de programao C# nos
lembra muito a estrutura de uma lista linear:
Array / Vetor unidimensional ;
Podemos usar o Vetor como base para a
implementao de um TAD Lista, que conter sua
estrutura de dados vetor para armazenar os itens,
e operaes mtodos para manipular estes itens;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Listas Lineares
Implementamos TADs em C# usando as
classes
No problema da lista de chamada dos alunos,
verificamos que era interessante armazenar a
ltima posio ocupada do mesmo, para
facilitar as operaes de novas incluses na
lista, bem como obtermos limites para os loops
de manipulaes do vetor;
Desta maneira, podemos definir uma classe
que representa uma lista linear;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classe ListaLinear
A classe ListaLinear pode ser composta dos
atributos:
Vetor de objetos;
ltima Posio;
Pode disponibilizar os seguintes mtodos:
Adicionar item;
Remover item;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classe ListaLinear


Exibio da Classe ListaLinear no Visual
Studio

Demonstrao de uso simples
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classe ListaLinear
Ainda esbarramos nas limitaes do
Vetor/Array
Tamanho fixo
Indisponibilidade de expanso dinmica/sob
demanda
Incluso no meio do vetor bastante
trabalhosa, pois necessrio movimentar todos
os demais itens a partir da posio de insero;
Remoo no meio do vetor idem incluso
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Estruturas dinmicas
Precisamos de uma soluo que permita
trabalharmos de forma dinmica com os
conjuntos de dados;
Possvel soluo: uma estrutura que cresce /
diminui dinamicamente conforme a
necessidade de uso em tempo de execuo;
Como implementar esta estrutura dinmica em
C#?
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Estruturas Encadeadas
So estruturas com o formato de uma cadeia de
dados interligados entre si, como os elos de uma
corrente;
Se precisarmos incluir mais um item cadeia,
simplesmente o conectamos cadeia (no incio ou
no fim), como um novo elo;
Se precisarmos incluir um item em uma posio
intermediria, abrimos a corrente e inserimos o item
no meio da mesma;
Se precisarmos remover um item, retiramos o elo
correspondente, e conectamos os restantes de forma
a manter a estrutura uniforme;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Reviso: Variveis/Tipo
Referncia
Vimos anteriormente que o C# possui tipos Valor e
tipos Referncia;
Tipos/Variveis Referncia contm referncias
objetos em memria;
Os tipos criados pelo usurio, so, entre outros, as
classes, que quando instanciadas so objetos em
memria, referenciados por uma varivel;
Quando construmos uma classe composta
(agregao) por outras classes (atividades em lab), no
fundo estamos adicionando referncias a outros
objetos como atributos de nossa nova classe;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classes Auto-referenciadas
Se podemos colocar referncias a outras
classes dentro de uma nova classe, porque no
adicionar uma referncia ela mesma como
um atributo?
Classes auto-referenciadas contm um
atributo(membro) que se refere a um objeto do
mesmo tipo da classe;
Por exemplo: classe Nodo

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classe Nodo
class Nodo
{
private int dado;
private Nodo proximo;

public Nodo ( int d )
{
//corpo do construtor
}
public int Dado
{
//get e set
}
public Nodo Proximo
{
//get e set
}
}
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classe Nodo
A classe/tipo Nodo possui duas variveis de instncia
private : dado (inteiro) e proximo, uma referncia a
Nodo;
O atributo proximo referencia um objeto do tipo
Nodo, um objeto do mesmo tipo da classe que est
sendo declarada por isso o termo classe auto-
referenciada;
O atributo proximo conhecido como um link (isto ,
proximo pode ser usado para conectar um objeto do
tipo Nodo a outro objeto do mesmo tipo;

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classe Nodo
A classe Nodo tambm tem duas propriedades:
uma para a varivel dado (chamada Dado), e
outra para a varivel proximo (chamada
Proximo);
Objetos auto-referenciais podem ser
conectados entre si para formar estruturas de
dados teis, como listas, filas, pilhas e rvores;
8 prox 12 null
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Estruturas Dinmicas
Criar e manter estruturas de dados dinmicas
exige alocao dinmica de memria
habilidade de um programa para obter mais
espao de memria em tempo de execuo
para guardar novos nodos e liberar espao
quando no for mais necessrio;
Programas em C# no liberam explicitamente
memria alocada dinamicamente, no seu lugar,
o C# execuo coleta de lixo automtica
(garbage collection);
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Estruturas Dinmicas
O operador new essencial para a alocao de memria
dinmica;
O operador new recebe como um operando um tipo de
um objeto sendo alocado dinamicamente, e retorna uma
referncia para o novo objeto criado daquele tipo. Por
exemplo, a linha

Nodo nodoAdicionar = new Nodo( 10 );

Alocar a quantidade de memria apropriada para
armazenar um Nodo e guarda uma referncia este
objeto na varivel nodoAdicionar;
Se no houver memria disponvel, o operador new
lanar uma exceo em tempo de execuo
OutOfMemoryException. O valor 10 o dado do objeto;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Listas Ligadas/Encadeadas
Uma lista ligada(encadeada) uma coleo linear
(i.e., uma sequncia) de objetos de classes auto-
referenciadas, chamados nodos (ns), conectados por
ligaes(links) de referncia- da o termo lista ligada;
Um programa acessa a lista encadeada por uma
referncia ao primeiro nodo da lista. Cada nodo
subseqente acessado pelo atributo de
referncia(de ligao, i.e., proximo) armazenado no
nodo anterior;
Por conveno, o atributo de ligao do ltimo nodo
de uma lista contm null, para marcar o final da lista;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Listas Ligadas/Encadeadas
Dados so armazenados dinamicamente na
lista ligada, ou seja, cada nodo criado
somente quando necessrio;
Um nodo pode conter dado(s) de qualquer tipo,
inclusive objetos de outras classes;
Representao visual:
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Outras Estruturas Ligadas
Pilhas e filas tambm so estruturas de dados
lineares;
Tambm podem ser implementadas utilizando
vetores (com as mesmas desvantagens que as
listas implementadas com vetores)
Pilhas e filas ligadas so verses mais confinadas
/ restritas das listas ligadas;
rvores so estruturas de dados no-lineares;

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Implementando uma Lista
Encadeada / Ligada
Um ponto de partida interessante a classe
NodoLista, que representar os nodos que
formaro a lista:

class NodoLista
{
private object dado;
private NodoLista proximo;
...
...
}
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Implementando uma Lista
Encadeada / Ligada
A classe NodoLista dever ter construtores
que contemplem as seguintes situaes:
Criao de um novo Nodo que armazenar um
dado e a referncia ao prximo Nodo;
Criao de um novo Nodo que armazenar um
dado e ser o ltimo Nodo da lista (proximo=null);
Disponibilizar as propriedades Proximo
(leitura/escrita) e Dado (somente leitura)
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Implementando uma Lista
Encadeada / Ligada
O passo seguinte definir a classe Lista, que conter
referncias para os nodos de interesse que comporo
a lista: primeiro, e opcionalmente, o ltimo;

public class Lista
{
private NodoLista primeiroNodo;
private NodoLista ultimoNodo;
private string nome;
...
...
}

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Implementando uma Lista
Encadeada / Ligada
Toda vez que uma Lista criada, por padro,
ela est vazia. Sendo assim, o(s) construtor(es)
dever inicializar o objeto Lista vazio. Em
termos prticos: os atributos primeiroNodo e
ultimoNodo apontaro para null;
O construtor poder receber um nome para a
Lista (atributo nome). Caso no receba,
inicializar o nome com o valor padro lista;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Implementando uma Lista
Encadeada / Ligada
Estamos trabalhando com o conceito de Tipos
Abstratos de Dados, que requer uma estrutura
de dados e um conjunto de operaes sobre
esta estrutura. Definiremos a seguir algumas
operaes(comportamentos) desejveis Lista:
inserirNoInicio, inserirNoFim;
removerDoInicio, removerDoFim;
estaVazia; imprime (imprime a lista em console);
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Implementando uma Lista
Encadeada / Ligada
Implementaremos seguir um programa de testes da
classe Lista, que criar um novo objeto do tipo Lista, e
far as seguintes inseres na nova lista:
valor booleano true (no incio);
um caractere $ (no incio);
valor inteiro 34567 (no final);
string bsi 2o (no final);
Imediatamente aps cada insero, dever ser
invocado o mtodo imprime() da Lista, para
acompanharmos a evoluo do objeto;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Implementando uma Lista
Encadeada / Ligada
No mesmo programa de testes, aps as inseres,
remover todos os objetos da Lista, invocando o
mtodo imprime() cada remoo, na seguinte
seqncia:
removeDoIncio(); imprime objeto removido, imprime lista;
removeDoIncio(); imprime objeto removido, imprime lista;
removeDoFim(); imprime objeto removido, imprime lista;
removeDoFim(); imprime objeto removido, imprime lista;
Verificar o funcionamento do programa, efetuando
testes e depurao do cdigo;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Pilhas
Uma pilha uma verso mais restrita da lista
encadeada;
Uma pilha recebe novos nodos e remove nodos
somente do topo;
Por esta razo, as pilhas so conhecidas como
estruturas de dados last-in (ltimo entrar), first-out
(primeira sair) LIFO ;
O nodo que est no fundo da pilha ter seu atributo
proximo apontando para null, para indicar o fundo
(fim) da pilha;

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Pilhas
As operaes primrias para manipular uma
pilha so conhecidas por push e pop ;
A operao push adiciona um nodo ao topo da
pilha;
A operao pop remove um nodo do topo da
pilha e retorna o item(dado) do nodo removido;

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Filas
Uma Fila, assim como uma pilha, uma verso mais
restrita da lista encadeada;
A Fila tem comportamento similar s filas reais que
encontramos no mundo real, como uma fila de banco;
Uma fila remove nodos somente do incio (cabea) da
fila e insere nodos somente no fim (cauda);
Por esta razo, as filas so conhecidas como
estruturas de dados first-in (primeiro entrar), first-out
(primeira sair) FIFO ;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Filas
As operaes de insero e remoo na fila
so normalmente chamadas de enfileira e
desenfileira;
Enfileira adiciona um elemento ao fim da fila
(cauda);
Desenfileira remove um elemento do incio da
fila (cabea);


Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Implementao de Pilhas e
Filas
Como visto, Pilhas e Filas so verses mais
restritas, ou mais especficas das Listas;
Tal caracterstica, nos permite aplicar um
princpio da orientao a objetos para
implementar estes tipos abstratos de dados;
O princpio em questo a herana, que nos
permite implementar estas classes estendendo
/ especializando a classe Lista;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Implementao de Pilhas e
Filas


Implementao das Classes
Pilha e Fila em Laboratrio

Execuo de testes
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Lista Duplamente
Encadeada
Ao implementarmos anteriormente a Lista Encadeada,
pudemos notar que a operao de remoo do fim da
lista um pouco mais trabalhosa, pois precisa
percorrer toda a lista para encontrar o elemento
imediatamente anterior ao ltimo isto , o penltimo;
Se o ltimo elemento soubesse quem o seu
elemento anterior, teramos uma implementao mais
facilitada da operao de remoo do fim da lista, pois
bastaria acessar o penltimo elemento a partir do
ltimo;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Lista Duplamente
Encadeada
Desta maneira, uma lista pode conter nodos que
possuem informao no somente do prximo
elemento, mas tambm do elemento anterior;
Para satisfazer esta condio, basta alterar os
elementos da Lista, no caso a classe NodoLista,
adicionando um outro atributo que apontar para o
NodoLista anterior;
A esta lista com elementos que fazem referncias a
seus sucessores e antecessores, dado o nome de
Lista Duplamente Encadeada;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Lista Duplamente
Encadeada
A lista anteriormente implementada, para
mantermos a correo da nomenclatura,
podem ser chamadas de Listas Simplesmente
Encadeadas, ou Listas Encadeadas Simples;
De forma semelhante ao ltimo elemento da
Lista Simplesmente Encadeada, que no
possui sucessor, o primeiro elemento da Lista
Duplamente Encadeada no ter um
antecessor, e por isso seu valor ser sempre
null;


Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classes Genricas
A estrutura Lista Encadeada que implementamos
possui claras vantagens sobre o uso de vetores, como
seu tamanho varivel, maior facilidade no momento
de incluir ou remover elementos no incio da estrutura,
entre outros;
Contudo, essa flexibilidade maior tem seu custo, como
por exemplo a leitura dos valores contidos na lista,
que por serem armazenados em atributos do tipo
object, nos obriga a explicitamente tratar o tipo de
cada item (typecasting) ao recebermos seu valor,
implicando um custo de performance nesta operao;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classes Genricas
O uso de object para armazenar o valor de um determinado
item tambm facilita a ocorrncia de erros (bugs) que no
sero percebidos at a execuo do programa/classe, por
exemplo:
Um desenvolvedor quer adicionar elementos de um tipo
especfico Lista, mas como a Lista permite que qualquer tipo
seja adicionado, adicionar um tipo incorreto no ser percebido
durante a compilao.
Pelo contrrio, um erro deste tipo no ser percebido at o
momento da execuo, significando que o bug no ser
encontrado at a fase de testes, ou no pior caso, durante o uso
em ambiente de produo (cliente).

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classes Genricas
Felizmente, partir do .NET Framework 2.0, estes
inconvenientes/problemas de tipagem e performance
poder ser resolvidos/remediados com uso do conceito
de Genricos (Generics);
Generics permite ao desenvolvedor criar uma
estrutura de dados que adia a seleo do seu tipo;
Os tipos associados uma estrutura de dados podem,
neste caso, ser escolhidos pelo desenvolvedor no
momento de utilizar a estrutura.
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classes Genricas
Para melhor entender o uso de Generics vamos
modificar a classe Lista para torn-la
genrica.

Implementao no Visual Studio
Exemplos de uso
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classes Collection
Trabalhamos at o momento com estruturas de
dados que agrupam elementos/itens , de forma
a tornar mais fcil a manipulao destes grupos
de objetos;
Esta necessidade de agrupar itens (que
podemos chamar de colees de itens)
aparece em boa parte (para no dizer a
maioria) dos programas e solues
computacionais para problemas concretos;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classes Collection
Tendo em vista esta recorrente apario de listas,
pilhas, filas, entre outros, em boa parte dos
programas, comearam a surgir iniciativas para
padronizar algumas destas estruturas j no ambiente
de desenvolvimento;
Desta maneira, surgiram as classes de coleo
(collection classes) dentro dos ambientes /
frameworks de desenvolvimento modernos;
Com estas classes, no lugar de criar estruturas de
dados, o programador simplesmente usa estruturas
pr-existentes, sem se preocupar em como estas
estruturas so implementadas;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classes Collection
O framework .NET prov uma srie destas classes,
dentro do pacote System.Collections;
Cada instncia de uma dessas classes conhecida
como collection, que nada mais do que um conjunto
(agrupamento) de itens;
Esta metodologia um excelente exemplo de reuso
de cdigo;
Com ela, os programadores podem codificar mais
rapidamente, e podem esperar uma excelente
performance da estrutura, maximizando a velocidade
de execuo e minimizando o consumo de memria;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classes Collection
Anterior verso 2.0 do framework .NET, j
eram disponibilizadas classes de coleo,
porm estas s armazenavam referncias para
objects, assim como nossas primeiras verses
da classe Lista, ou seja, no era possvel
especificar o tipo dos itens que seriam
armazenados nestas classes;
partir da verso 2.0, com a adoo do
conceito de generics, as classes de coleo
ganharam suas respectivas verses genricas;
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classes Collection
Framework 1.0/1.1 (No eram genricas)
Nome da
Collection
Exemplo de Uso
ArrayList
Criar arrays que podem crescer dinamicamente, como uma
lista;
HashTable
Armazenar uma coleo de pares chave/valor que so
organizados baseado no cdigo hash da chave, como um
dicionrio;
Queue
Implementar uma Fila (FIFO);
SortedList
Armazenar uma coleo de pares chave/valor que so
ordenados pela chave, como uma lista indexada;
Stack
Implementar uma Pilha (LIFO);
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Classes Collection
Genricas
Framework 2.0 ou superior
LinkedList<> - lista duplamente ligada
List<> - lista tradicional (como o ArrayList)
Queue<> - fila
SortedList<> - lista indexada
SortedDictionary<> - organiza como um dicionrio
Stack<> - pilha

Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Mtodos Importantes das
Collections <Genricas>
Classe List<Tipo>

Retorno Mtodo Descrio
void Add(tipo item) Adiciona item Lista
void Clear( ) Remove todos elementos da Lista
bool Contains(tipo item) Verifica se a lista contm um objeto
igual ao item (requer o mtodo
Equals() implementado pela classe
Tipo)
int IndexOf(tipo item) Verifica se a lista contm um objeto
igual ao item e retorna a posio do
objeto
void Insert(int posicao, tipo item) Insere o item na posio especificada
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Mtodos Importantes das
Collections <Genricas>
Classe List<Tipo>


Retorno Mtodo Descrio
bool Remove(tipo item) Remove item da Lista, caso ele
exista (se existir, remove e retorna
true, seno retorna false)
void RemoveAt(int posicao) Remove o elemento da posio
especificada
bool RemoveRange(int posicao, int
nroElementos)
Remove uma quantidade
(nroElementos) de elementos
partir da posio especificada
void Sort() Ordena os elementos da lista,
usando o mtodo CompareTo
implementado na classe Tipo pela
interface IComparable
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Mtodos/Propriedades
Importantes das Collections
<Genricas>
Classe List<Tipo>




Retorno Mtodo Descrio
Tipo[ ] ToArray() Retorna uma cpia da lista no
formato de Vetor Unidimensional
Retorno Propriedade Descrio
int Capacity Retorna/Ajusta a capacidade atual
da Lista
int Count Nmero de elementos atualmente
contidos na Lista
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Mtodos Importantes das
Collections <Genricas>
Classe Stack<Tipo>
Retorno Mtodo Descrio
void Clear( ) Remove todos elementos da Pilha
bool Contains(tipo item) Verifica se a pilha contm um objeto
igual ao item (requer o mtodo
Equals() implementado pela classe
Tipo)
Tipo Peek( ) Retorna o elemento do topo da
Pilha, sem remov-lo
Tipo Pop( ) REMOVE e retorna o elemento do
topo da Pilha
void Push(tipo item) Insere item no topo da Pilha
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Mtodos/Propriedades
Importantes das Collections
<Genricas>
Classe Stack<Tipo>




Retorno Mtodo Descrio
Tipo[ ] ToArray() Retorna uma cpia da pilha no
formato de Vetor Unidimensional
Retorno Propriedade Descrio
int Count Nmero de elementos atualmente
contidos na Pilha
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Mtodos Importantes das
Collections <Genricas>
Classe Queue<Tipo>
Retorno Mtodo Descrio
void Clear( ) Remove todos elementos da Pilha
bool Contains(tipo item) Verifica se a pilha contm um objeto
igual ao item (requer o mtodo
Equals() implementado pela classe
Tipo)
Tipo Dequeue( ) REMOVE e retorna o primeiro
elemento da Fila
void Enqueue(tipo item) Insere item no final da Fila
Tipo Peek( ) Retorna o primeiro elemento da Fila,
sem remov-lo
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan
Mtodos/Propriedades
Importantes das Collections
<Genricas>
Classe Queue<Tipo>




Retorno Mtodo Descrio
Tipo[ ] ToArray() Retorna uma cpia da pilha no
formato de Vetor Unidimensional
Retorno Propriedade Descrio
int Count Nmero de elementos atualmente
contidos na Fila
Produzido e distribudo por: Marcelo Charan http://twitter.com/marcelocharan

S-ar putea să vă placă și