Tipos Abstratos de Dados. Estrutura de Dados

Documentos relacionados
BCC202 - Estrutura de Dados I

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

Introdução. Ponteiros

3. Linguagem de Programação C

Centro Universitário Franciscano Curso de Sistemas de Informação Disciplina de algoritmos e programação II. Ponteiros

Essencialmente, um ponteiro nada mais é do que uma variável que ao invés de conter um valor, contém um endereço de memória.

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Introdução a Programação. Ponteiros e Passagem de Argumentos por Referência

TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Princípios de Desenvolvimento de Algoritmos MAC122

Alocação Dinâmica em C

Ponteiros e Tabelas. K&R: Capítulo 5

ponteiros INF Programação I Prof. Roberto Azevedo

Ponteiro. Ponteiro. Objetivo. Compreender a definição e dominar a implementação de ponteiros em C.

Introdução à Programação

Introdução à Computação

Programação Estruturada

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio

Programação I Ponteiros e alocação dinâmica de memória. Prof. Carlos Alberto

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Reinaldo Gomes Alocação Dinâmica

ESTRUTURA DE DADOS (TCC )

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Módulo 5 Vetores e Alocação Dinâmica

Programação II. Vetores e Alocação Dinâmica. Bruno Feijó Dept. de Informática, PUC-Rio

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

11a. Aula Ponteiros e Vetores

Ponteiros. Introdução e Alocação Dinâmica

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

Ponteiros. Baseado nos slides do Prof. Mauro.

Ponteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Ponteiros. Introdução

1/34 GESTÃO DINÂMICA DE MEMÓRIA

Métodos Computacionais. Vetores e Matrizes Dinâmicas

Ponteiros. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

ESTRUTURAS DE DADOS (LEI, LM, LEE) PROGRAMAÇÃO III (LTSI) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2017/2018

Estruturas de Dados. Profa. Juliana Pinheiro Campos

Ponteiros & tabelas (cont.) K&R: Capítulo 5

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória

Fundamentos de Programação

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

INF 1007 Programação II

Linguagem C. Ponteiros. Alex Vidigal Bastos.

INF1007: Programação 2. 2 Alocação Dinâmica. 17/02/2014 (c) Dept. Informática - PUC-Rio 1

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Linguagem C Ponteiros

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

Ponteiros em C. Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1

Ponteiros. prof. Fabrício Olivetti de França

Aula 25: Alocação Dinâmica

Modulo 12: alocação dinâmica de memória

MC-102 Aula 21 Registros

Estrutura de dados 1. Ponteiros

A sintaxe para se declarar uma variável do tipo ponteiro é dada por:

Algoritmos e Estruturas de dados

Programação de Computadores II. Cap. 5 Alocação Dinâmica

SSC304 Introdução à Programação Para Engenharias. Alocação Dinâmica. GE4 Bio

Alocação Dinâmica e Apontadores. Cláudio E. C. Campelo

13. ALOCAÇÃO DINÂMICA DE MEMÓRIA

Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Alocação Dinâmica de Memória

Introdução a Ponteiros e Vetores em C

Ponteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória

- Mapa de memória de um processo - Ponteiros

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

Métodos Computacionais. Tipos Estruturados

Programação de Computadores II. Cap. 5 Vetores

Ponteiros e Alocação de Memória

Aula 17: Ponteiros e Alocação Dinâmica em C

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Curso de Programação C em Ambientes Linux Aula 05

Plano de Aula Segunda-feira Tarde 13/10/2014 Objetivo: Introduzir o conceito de alocação dinâmica na memória e registros / structs.

Métodos Computacionais. Listas Encadeadas

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Alocação Dinâmica. Introdução à Computação

Professor: Jó Ueyama Estagiário PAE: Heitor Freitas

1. Revisão de Vetores, Ponteiros, Funções e Estruturas em C

SCC 202 Prova 1. 28/9/2010 Resolução e Comentários

Estrutura de Dados. Aula 07 Alocação Dinâmica

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Alocação Dinâmica de Memória. Programação II

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Linguagem C: Ponteiros - Alocação Dinâmica

Estruturas Dinâmicas - Ponteiros

Programação II. Ponteiros. Bruno Feijó Dept. de Informática, PUC-Rio

Introdução a Programação de Jogos

Aula 24 Ponteiros, vetores e structs

Alocação Dinâmica de Memória

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Programação de Computadores II

Professora Jeane Melo

Transcrição:

Tipos Abstratos de Dados

Tipo Abstrato de Dados ou TAD Idéia principal: desvincular o tipo de dado (valores e operações) de sua implementação: O que o tipo faz e não como ele faz! Vantagens da desvinculação: 1. Integridade dos dados 2. Facilidade de manutenção 3. Reuso Tipo abstrato de dados: definido matematicamente pelo par (V,O) onde V é um conjunto de valores e O um conjunto de operações sobre estes valores.

Tipo Abstrato de Dados Com TAD s, a programação tem 2 fases: 1. Aplicação: apenas as operações definidas de maneira abstrata são utilizadas; não é permitido o acesso direto aos dados (o usuário só tem acesso as operações) 2. Implementação: codificação das operações em uma linguagem de programação que dê suporte ao TAD definido Formalmente, um TAD consiste de 2 partes: Definição dos valores: em geral, consiste de uma cláusula de definição e outra de condição Definição dos operadores: cabeçalho (parâmetros e resultado), pré condições (opcionais) e pós condições

APONTADORES ou PONTEIROS

Apontadores ou Ponteiros (1) Ponteiro ou Apontador: variável que contém o endereço de memória de uma outra variável ou estrutura de dados A variável ponteiro armazena o endereço do espaço de memória que é alocado durante a execução real do programa Um apontador fornece então uma maneira indireta de acessar o valor de uma variável do programa

Apontadores ou Ponteiros (2) Alocação estática: ái previsão iã no pior caso da quantidade de memória a ser usada; reserva de memória ói em tempo de compilação/tradução ã Alocação dinâmica: alocação de memória para o componente quando ele começa a existir durante a execução do programa Apontadores permitem: Representar estruturas de dados complexas; Passagem de valores como argumentos de funções Trabalhar com memória alocada dinamicamente

Implementando Apontadores Um apontador pode apontar para uma área de memória associada a qualquer q tipo de dado, incluindo os registros (records) Um dos usos mais comuns dos apontadores é exatamente para referenciar tipos estruturados como registros. A sintaxe básica em C é: TipoDado *NomePonteiro;

Exemplo 1: como os apontadores funcionam? (C) #include <stdio.h> void main(){ int *iptr; iptr = malloc(sizeof *iptr); *iptr = 10; printf( the value is %d, *iptr); free(iptr); /* free((char *) iptr */ }

Análise do Programa (1) A declaração em C: int *iptr; declara um tipo de variável chamado iptr, que é um apontador (denotado por *) para um integer. A variável iptr não contém um valor numérico; ela irá armazenar endereços de memória de uma variável criada dinamicamente (pelo uso da declaração malloc vista adiante...)

Análise do Programa (2) Note que neste instante, AINDA NÃO EXISTE ESPAÇO DE MEMÓRIA ALOCADO com iptr, i.e. não existe nenhum espaço de memória associado ao apontador! iptr O comando malloc(sizeof *iptr); cria um novo espaço dinâmico apontado por iptr (i.e, ele é criado quando o programa rodar na máquina) A variável do tipo apontador iptr aponta para o endereço do espaço de memória usado para guardar um valor inteiro iptr

Análise do Programa (3) O comando *iptr = 10; escreve no espaço de memória apontado ( ou associado a) por iptr, um valor inteiro 10 iptr 10 O comando free (iptr); desaloca (libera) o espaço de memória apontado (ou associado a) por iptr, retornando esse espaço para o sistema. O apontador iptr só poderá ser usado novamente se for associado a outra declaração malloc() iptr

Exemplo 1 modificado... (C) #include <stdio.h> void main(){ int *iptr; iptr = malloc(sizeof *iptr); *iptr = 10; printf( o valor e %d, *iptr); free(iptr); iptr = NULL; if (iptr == NULL) printf( iptr não referencia nada ); else printf( O valor da referência de iptr é %d, *iptr); }

Valor NULL Se o apontador não faz referência a nenhuma posição de memória, ele deve receber o valor NULL como atribuição A declaração iptr = NULL; faz exatamente isso. Isto é, o apontador é válido, existe, mas não está apontando para nenhuma posição de memória ou variável dinâmica A declaração if (iptr == NULL) é um exemplo de teste muito comum com apontadores:

Valores e apontadores (C) #include <stdio.h> void main(){ int *iptr1, *iptr2; iptr1 = malloc(sizeof *iptr1); iptr2 = malloc(sizeof *iptr2); *iptr1 = 10; *iptr2 = 25; printf( Valor de iptr1: %d, *iptr1); printf( Valor de iptr2: %d, *iptr2); free( iptr1 ); iptr1 = iptr2; *iptr1 = 3; printf( Valor de iptr1: %d, *iptr1); printf( Valor de iptr2: %d, *iptr2); free( iptr2 ); }

Analisando o programa... malloc(sizeof *iptr1); malloc(sizeof *iptr2); *iptr1 = 10; *iptr2 = 25; iptr1 iptr2 iptr1 iptr2 10 25

Analisando o programa... free(iptr1); iptr1 = iptr2; iptr1 iptr2 25 *iptr1 = 3; iptr1 iptr2 3

Resultado da execução Valor de iptr1: 10 Valor de iptr2: 25 Valor de iptr1: 3 Valor de iptr2: 3

Resumo Ponteiros Um ponteiro pode referenciar qualquer tipo de dado na memória, mesmo estruturas mais complexas; Em C, a instrução malloc aloca espaço de memória para ser usado pelo ponteiro p A instrução free(p) desaloca o espaço de memória associado ao ponteiro p

Resumo Ponteiros Um ponteiro pode ser associado id a um espaço de memória usando malloc, ou através da atribuição de um valor por um ponteiro de mesmo tipo (ex, iprt1 = iptr2; ) Pode se atribuir um valor NULL a um ponteiro para indicar que ele não aponta para nenhum espaço de memória O valor do espaço de memória associado ao ponteiro pode ser lido ou alterado através da sintaxe *iprt1 Um ponteiro pode Estrutura ser declarado Dados e referenciar i i d ã f i id (li