Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Slides:



Advertisements
Apresentações semelhantes
Christiano Lima Santos
Advertisements

LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Estruturas de Dados Marcio Gonçalves.
TECNOLOGIA EM REDES DE COMPUTADORES Algoritmos e programação de computadores Aula /08/2011 Professor Leomir J. Borba-
Introdução a Programação
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Variáveis Dinâmicas Caixas de Nós
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Estruturas de Dados e Algoritmos
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
LPG - I: Alocação Dinâmica de Memória - Ponteiros
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Algoritmos e Estruturas de Dados II
Linguagem C Strings.
Robson Godoi / Sandra Siebra
Ponteiros.
Listas Encadeadas.
O Portal do Estudante de Computação
GAUSS COM PIVOTEAMENTO
Paradigmas de programação
Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
Algoritmos e Estruturas de Dados
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Variáveis, Tipos de Dados e Constantes
Programação Orientada a Objetos em Delphi
LISTAS DUPLAMENTE ENCADEADAS
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Linguagem de Programação II Parte IX
Definição de Tipos Estruturas e Ponteiros
Listas duplamente encadeadas Estrutura: tDado = integer; { ou real, char, etc.} tPtNo = ^tNo; tNo = record Ant: tPtNo Dado: tDado; Prox: tPtNo; end; var.
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
CADEIA DE CARACTERES (Strings)
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Alocação Dinâmica de Memória
Introdução ao uso de vatores na linguagem PASCAL.
Aula 3 Vetores e Listas. Arrays (vetores) Array – sequência de elementos do mesmo tipo. Tamanho do Array – seu número de elementos (número fixo) Consequência:
Estruturas de Dados Aula 5: Matrizes
Estruturas de Dados Aula 9: Listas (parte 1)
Ambiente de Execução - Rotinas
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Aula 04 – 22/03 Listas Duplamente Encadeada – Listas Encadeada Circular – Lista Duplamente Encadeada Circular.
“Introdução a Computação” Capítulo II Estruturas de Dados
VARIÁVEIS COMPOSTAS HOMOGÊNEAS UNIDIMENSIONAIS (VETORES)
Aula 06 – 05/04 Árvores binárias.
Prof. Alessandro Gonçalves
Programação de Computadores I – Arquivos
Professor Ulisses Vasconcelos
Estruturas de Dados + Algoritmos = Programas
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Aula Prática 12 Listas Encadeadas Monitoria
© Copyright 2007 Algoritmos e Estruturas de Dados - Todos os direitos reservados Estruturas de Dados Dinâmicas IF672 - Algoritmos e Estruturas de Dados.
Leandro Almeida  As declarações abaixo alocam memória para diversas variáveis.  A alocação é estática, pois acontece antes que o programa.
AULA 09 PROGRAMAÇÃO I. Estruturas de Dados Heterogêneas 10/08/2010 Programação I 2 Objetivo: Estudar os tipos de dados heterogêneos:  Registros;  Arrays.
Estrutura de Dados Aula 3 - Listas
Ponteiros. Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1.
Linguagem de Programação
COMPILADORES 07 Prof. Marcos.
INE5408 Estruturas de Dados Listas Encadeadas Simples.
Arrays Outline 7.1 Introdução 7.2 Arrays 7.3 Declarando e Criando Arrays 7.4 Exemplos usando arrays 7.5 Ordenando arrays 7.6 Procurando em.
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Transcrição da apresentação:

Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Vetores Bidimensionais - Matrizes Parecido com estrutura de vetores porem mais elaborada Estrutura que consiste de linhas e colunas que unidas damos o nome de células Semelhante a tabelas Primeiro índice representa a linha e o segundo a coluna.

Declarações em Delphi/Pascal Matriz estática MatrizEstatica: array [0..1, 0..3] of string; MatrizEstatica: array [0..1] of array[0..3] of string; Matriz dinâmica MatrizDinamica: array of array of string; SetLength( MatrizDinamica, 2, 3 ); // 2 linhas 3 colunas

Acesso aos valores da matriz Matriz[1][4] // Acesso a linha 1 coluna 4 Matriz[2] // Acesso a todos os elementos linha 2 Percorrer os elementos de uma matriz for Linha := Low(Matriz) to High(Matriz) do begin for Coluna := Low(Matriz[Linha]) to High(Matriz[Linha]) do ShowMessage( Matriz[Linha, Coluna] ); end;

Aplicação de Matrizes Manipulação de imagens – informação de cores de pixel Rotinas de criptografia – cálculos Sistemas de geolocalização – cálculo de coordenas Desenvolvimento de jogos – lógica Estrutura de tabelas em banco de dados - linhas(registros) colunas (campos)

Listas encadeadas Listas encadeadas simples – Listas duplamente encadeadas – Listas Circulares

Ponteiros Memória do computador e um grande vetor de bytes Cada byte é uma unidade de memória conhecida como célula Exemplo de uso de identificadores. Ponteiro Variável 1258 Casa Azul 849 Casa Amarela 98577 Casa do Vizinho

Ponteiros ou apontadores são tipos de dados utilizados para acessar endereços de memória. Os ponteiros são a base para a alocação dinâmica de memória O valor do ponteiro corresponde a uma posição na memória onde o dado(valor) esta armazenado. Variável (qualquer que seja) e um conjunto de células de memória. A variável é composta por nome, tipo, conteúdo e endereço Cada variável ocupa uma quantidade de n de células Integer = 4; Boolean = 1;

Utilizamos o ^ (circunflexo) antes do tipo de dado para declarar uma variável do tipo ponteiro Ptr: ^Integer; Utilizamos o ^ (circunflexo) depois da variável para acessar o valor do ponteiro. Ptr^:= 28; ShowMessage( IntToStr( Ptr^));

Utilizamos o @ para obter o ponteiro de uma variável Ptr: ^Integer; Int: Inteiro; Ptr:= @Int; Ponteiros tipados que são muito comuns. PInt: ^Integer; PStr: ^string; PPes: ^TPessoa;

Para alocar memória para um ponteiro utilizamos a função New() Para alocar memória para um ponteiro utilizamos a função New(). Essa função aloca um ponteiro com base no tamanho do tipo de dados TPessoa = record; Nome: string; end; Pessoa:= ^TPessoa; New(Pessoa); Pessoa^.Nome := ‘Fulano’; ShowMessage(Pessoa^.Nome); Para liberar a memoria alocada com a função New() utilizamos a função Dispose() Dispose(Pessoa);

var Numero: Integer; Flag: Char; Ptr: ^Integer;

Uso pratico de ponteiros Usado com a API do Windows onde vários métodos tem como parâmetros ponteiros de memória. No desenvolvimento de componentes para o Delphi. Integrações com DLLs. Utilizado por componentes do Delphi(TList, TCLientDataSet. etc). No Delphi as referências a classes são ponteiros. Recursos de RTTI.

Prática download do projeto DisplayPointers Declarar uma variável string e acessar o seu valor através de ponteiros Uso Debug Declara uma variável do tipo record e acessar através de ponteiros

Listas encadeadas É uma lista com agrupamento de itens conhecidos como nós(blocos de memória) Os nós possuem um tipo de variável especial chamada ponteiro. O ponteiros apontam para o próximo item do agrupamento Os nós possuem dois campos: O Dado(valor) e o Ponteiro(posição de memória do próximo nó)

A listas deve ser identificada pelo primeiro nó(cabeça) e a partir desse nó os outros itens podem ser visitados até o final da lista Os vetores sequencias eram acessados pelo índice pois estavam alocados sequencialmente na memória. As listas encadeadas possuem seus itens em posições NÃO sequencias na memória o que justifica o uso de ponteiros. Observe que os ponteiros intercalam cada nó com o seu vizinho de modo a criar uma lista em memória O final da lista encadeada é identificada pelo valor nil do ponteiro.

Representação gráfica de uma lista com nós

Representação gráfica de inserção na lista

Representação gráfica de exclusão na lista

Estrutura de um nó PApontador = ^TItem; TItem = record Valor: string; Proximo: PApontador; end;

Incluindo itens na lista PrimeiroNo: PApontador; ... var NoAuxiliar: PApontador; begin New( NoAuxiliar ); // alocando espaço na memória   NoAuxiliar.Proximo:=PrimeiroNo; NoAuxiliar.Valor:= InputBox('', 'Digite uma string', ''); PrimeiroNo:= NoAuxiliar; end;

Excluir item na lista – Parte 1 var NoAuxiliar, NoASerExcluido, NoAnterior: PApontador; begin if (PrimeiroNo.Proximo = nil) or (PrimeiroNo.Valor = ValorASerExcluido) then NoAuxiliar:= PrimeiroNo; PrimeiroNo:= PrimeiroNo.Proximo; Dispose( NoAuxiliar ); end else continua

Excluir item na lista – Parte 2 begin NoAuxiliar:= PrimeiroNo; while ( NoAuxiliar.Proximo <> nil ) do if ( NoAuxiliar.Proximo.Valor = ValorASerExcluido ) then NoAnterior:= NoAuxiliar; // pega o item anterio NoASerExcluido := NoAuxiliar.Proximo NoAnterior.Proximo:= NoASerExcluido.Proximo; Exit(); end; NoAuxiliar:= NoAuxiliar.Proximo;

Percorrer itens na lista var NoAuxiliar: PApontador; begin   NoAuxiliar:= PrimeiroNo; while ( NoAuxiliar <> nil ) do ShowMessage( NoAuxiliar.Valor ); NoAuxiliar:= NoAuxiliar.Proximo; end;

Liberar nós alocados var NoAuxiliar: PApontador; begin   NoAuxiliar:= PrimeiroNo; while ( NoAuxiliar <> nil) do Dispose( NoAuxiliar );   NoAuxiliar:= NoAuxiliar.Proximo; end;

Observações Para identificar o final de uma lista encadeada simples verificamos se o ponteiro tem o valor nil Sempre quanto efetuarmos operações de inclusão ou exclusão de nós devemos nos certificar de que o ponteiro do nó esteja sendo preenchido corretamente

Prática download do Mostrar os exemplos implementados no programa DisplayPointers

Exercícios Download : aula03 – exercícios