A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -

Apresentações semelhantes


Apresentação em tema: "Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -"— Transcrição da apresentação:

1 Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -

2 Programação II – Prof. Mateus Raeder Tipos de dados Tipos primitivos –inteiro, real, lógico (boolean), caracter Estrutura de dados –Conjunto de informações agrupadas de uma forma coerente (com alguma relação entre elas) Ex.: lista de chamada da turma Tipos de dados Primitivos : a partir dos quais podemos definir os demais Estrutura de dados : constituídos de dados primitivos e/ou estruturas

3 Programação II – Prof. Mateus Raeder Tipo Abstrato de Dados (TAD) Um tipo abstrato de dados é a especificação matemática de um conjunto de dados e das operações que podem ser executadas sobre estes dados Os TADs definem o que cada operação faz, mas não como faz –assim, um mesmo tipo abstrato de dado pode ser implementado de diferentes formas TADs são materializados pela estruturas de dados. –Lista Encadeada (implementação com referências) –Lista com alocação estática (implementação usando arrays) Em Java: TAD pode ser expresso por uma interface

4 Programação II – Prof. Mateus Raeder Listas Lineares A Lista Linear é uma estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem existente entre eles Uma lista linear é um conjunto de n > 0 nós L[1], L[2],..., L[n], onde: –Se n>0, L[1] é o primeiro nó –Para 1

5 Programação II – Prof. Mateus Raeder Listas Lineares Ordenação implícita –L[1] e L[n] são, respectivamente, o primeiro e o último nó –se 1 < k < n, então: L[k] é precedido por L(k-1) L[k] é seguido por L(k+1) –Se n=0, dizemos que a lista é vazia n

6 Programação II – Prof. Mateus Raeder Estrutura dos nós Estrutura interna é abstraída

7 Programação II – Prof. Mateus Raeder Exemplos de aplicações com listas Notas de alunos Cadastro de funcionários de uma empresa Itens em estoque de uma empresa Dias da semana Vagões de um trem Letras de uma palavra Pessoas esperando o ônibus Cartas de baralho Torcedores do grêmio

8 Programação II – Prof. Mateus Raeder Listas Lineares: Classificação Listas lineares Listas lineares gerais SEM restrição de inserção e remoção de elementos Listas particulares COM restrição de inserção e remoção de elementos

9 Programação II – Prof. Mateus Raeder Listas lineares Nas listas lineares gerais, a inclusão e remoção de elementos pode ser realizada em qualquer posição da lista. Essas listas não apresentam nenhuma restrição de acesso. Casos particulares de listas: –Pilha –Fila –Deque

10 Programação II – Prof. Mateus Raeder Listas: tipos de armazenamento O tipo de armazenamento de uma lista linear pode ser classificado de acordo com a aposição relativa na memória (contígua ou não) de dois nós consecutivos na lista –Lista linear com alocação estática de memória Chamada de Lista Sequencial Nós em posições contíguas de memória Geralmente representado por arrays Útil para implementar filas e pilhas (controle de início e fim)

11 Programação II – Prof. Mateus Raeder Listas: tipos de armazenamento O tipo de armazenamento de uma lista linear pode ser classificado de acordo com a aposição relativa na memória (contígua ou não) de dois nós consecutivos na lista –Lista linear com alocação dinâmica de memória Chamada de Lista Encadeada Posições de memória são alocadas a medida que são necessárias Nós encontram-se aleatoriamente dispostos na memória e são interligados por ponteiros, que indicam o próximo nó –Nós precisam de um campo a mais

12 Programação II – Prof. Mateus Raeder Listas: tipos de armazenamento n n Lista sequencial Lista encadeada

13 Programação II – Prof. Mateus Raeder Listas Lineares Gerais Sem restrição de acesso (inserções ou remoções podem ser realizadas em qualquer posição, inlusive no meio da lista) –Ex.: Lista de chamada dos alunos da turma Cada nó é formado por campos que armazenam as características distintas das listas Cada nó possui uma chave (campo) identificador –Lista Ordenada: os nós encontram-se ordenados segundo os valores de suas chaves –Lista Não Ordenada: os nós não estão ordenados

14 Programação II – Prof. Mateus Raeder Operações sobre listas lineares Verificar se lista está cheia Verificar se lista está vazia Inserção de um nó na i-ésima posição Inserção de nó no final da lista Exclusão do i-ésimo nó Acesso ao i-ésimo nó Exibir conteúdo dos nós da lista Alteração do i-ésimo nó Localizar nó através da chave Combinação de duas ou mais listas Classificação da lista Cópia da lista

15 Programação II – Prof. Mateus Raeder Listas Lineares Gerais com Alocação Estática ou Listas Sequenciais

16 Programação II – Prof. Mateus Raeder Lista Sequencial Alocação estática!! Suponhamos uma lista geral de números inteiros L que, em certo momento, possui os seguintes 7 elementos: Declarando um array de inteiros de nome L com MAX=10 elementos (L[0..MAX-1]), teremos a seguinte lista:

17 Programação II – Prof. Mateus Raeder Exercício Lista Sequencial Dada a lista acima, realize as operações abaixo (cumulativamente) e desenhe a lista resultante em cada passo: –Inserir 7 no final –Retirar o primeiro elemento –Retirar o valor 8 da lista (valor, não posição) –Inserir -4 no início –Retirar o elemento na quinta posição 93

18 Programação II – Prof. Mateus Raeder Operações sobre Listas Sequenciais public boolean isEmpty() –verifica se a lista está vazia public boolean isFull() –verifica se a lista está cheia public int getSize() –retorna o número de nós da lista public int get(int index) –retorna nó da posição index

19 Programação II – Prof. Mateus Raeder Operações sobre Listas Sequenciais public boolean insert(int element) –insere dado no final da lista public boolean insert(int element, int pos) –insere dado na posição especificada public boolean remove(int index) –remove nó na posição especificada public void print() –exibe o conteúdo da lista

20 Programação II – Prof. Mateus Raeder Lista Sequencial Supondo a existência da classe SequentialList, desenhe a lista criada através do código abaixo (a saída do programa): public static void main(String args[]){ SequentialList l = new SequentialList(5); l.insert(1); l.insert(2); l.insert(4); l.insert(3, 2); l.remove(0); l.print(); }

21 Programação II – Prof. Mateus Raeder Lista Sequencial public class SequentialList { private int list[]; private int last = -1; /* Método Construtor */ public SequentialList(int size) { list = new int[size]; } //demais métodos... }

22 Programação II – Prof. Mateus Raeder Lista Sequencial Verificar se está vazia, se está cheia e o tamanho –Vazia: /* Retorna: - true se a lista está vazia - false caso contrário */ public boolean isEmpty() { if (last == -1) return true; else return false; }

23 Programação II – Prof. Mateus Raeder Lista Sequencial Verificar se está vazia, se está cheia e o tamanho –Cheia: /* Retorna: - true se a lista está cheia - false caso contrário */ public boolean isFull() { if (last == list.length - 1) return true; else return false; }

24 Programação II – Prof. Mateus Raeder Lista Sequencial Verificar se está vazia, se está cheia e o tamanho –Tamanho: /* Retorna o número de elementos na lista */ public int getSize() { return last + 1; //pois começa em 0 }

25 Programação II – Prof. Mateus Raeder Lista Sequencial Retornar uma posição específica /* Retorna o elemento na posição especificada. */ public int get (int index) { if(isEmpty()){ System.out.println(ERRO: Lista vazia!); return 0; } if(index last){ System.out.println(ERRO: Índice inválido!); return 0; } return list[index]; }

26 Programação II – Prof. Mateus Raeder Lista Sequencial Inserir elementos –No final /* Retorna true se o elemento foi inserido no final da lista e false caso contrário. */ public boolean insert (int element) { if(isFull()) return false; //não conseguiu inserir: lista cheia last++; list[last] = element; //insere o elemento return true; }

27 Programação II – Prof. Mateus Raeder /* Retorna true se o elemento foi inserido na lista e false caso contrário. */ public boolean insert (int element, int pos) { if (isFull() || pos last + 1) return false; for (int i = last + 1; i > pos; i--) { list[i] = list[i - 1]; } last++; list[pos] = element; return true; } Lista Sequencial Inserir elementos –Em uma determinada posição

28 Programação II – Prof. Mateus Raeder /* Retorna true se foi possível remover e false caso contrário */ public boolean remove (int index) { if (isEmpty()) return false; if (index last) return false; int numberofElements = last - index; if (numberofElements > 0) { System.arraycopy(list, index + 1, list, index, numberofElements); } last--; return true; } Lista Sequencial Remover elementos –Em uma determinada posição

29 Programação II – Prof. Mateus Raeder public void print() { for (int i = 0; i <= last; i++) System.out.println(list[i]); } Lista Sequencial Exibir elementos de uma lista

30 Programação II – Prof. Mateus Raeder Exercícios: Lista Sequencial No método main de uma classe qualquer, crie um objeto SequentialList representando uma lista sequencial de números. Realize, então, as seguintes operações: –* inserir os números 23, -3, 1, 50 e 5; –imprimir todos os números da lista; –* inserir o número 4 no fim da lista; –* ler um número e inseri-lo no início da lista; –imprimir o tamanho da lista; –* excluir o elemento da posição 9; –* excluir o elemento da posição 3; –* inserir o número 10 na segunda posição da lista. Desenhe como fica a lista após a realização de cada operação marcada com um * (inclusive o ponteiro last)


Carregar ppt "Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -"

Apresentações semelhantes


Anúncios Google