Prévia do material em texto
Disciplina: Estrutura de dados Professor: Sergio Branco Equipe: Amanda dos S. Oliveira – Curso: Eng. Produção – Período: Décimo Bruno Pontes Araújo - Curso: Eng. Mecânica Período: Quarto Fábio Luís Paiva – Curso: Eng. Produção – Período: Décimo Flávio Magalhães Ribeiro – Curso: Eng. Civil – Período: Nono Natanael Sinésio da Silva - Curso: Eng. Mecânica - Período: Terceiro Ponteiros Vetores Estrutura de dados Conceituar Ponteiros e Vetores em Estrutura de Dados Estruturas de dados Conceito: São maneiras de organizar os dados de são formas de distribuir e relacionar os dados disponíveis, de modo a tornar mais eficientes os algoritmos que manipulam esses dados. Objetivo: É principal para o desenvolvimento de programas e algoritmos. Assim como um número pode ser representado em vários sistemas diferentes, também um conjunto de dados relacionados entre si pode ser descrito através de várias estruturas de dados distintas Uma estrutura de dados (ED), em ciência da computação, é uma coleção tanto de valores (e seus relacionamentos) quanto de operações (sobre os valores e estruturas decorrentes). É uma implementação concreta de um tipo abstrato de dado (TAD) ou um tipo de dado (TD) básico ou primitivo. Assim, o termo ED pode ser considerado sinônimo de TD, se considerado TAD um hipônimo de TD, isto é, se um TAD for um TD. Conceituar Ponteiros e Vetores em Estrutura de Dados Estruturas de dados No decorrer da pesquisa foi identificado critérios para escolha e estudo de uma estrutura de dados que incluem eficiência para buscas e padrões específicos de acesso, necessidades especiais para manejo de grandes volumes, ou a simplicidade de implementação e uso. Ou seja, EDs eficientes são cruciais para a elaboração de algoritmos, diversas linguagens possuem ênfase nas EDs, como evidenciado pela POO, e aplicações distintas usufruem de ou requerem EDs específicas (e.g. um compilador usa uma Tabela de dispersão para identificadores e na mespaces, enquanto uma Árvore B ou Árvore AA [en] é apropriada para acessos randômicos). Em termos de EDs, os TDs e TADs são definidos indiretamente pelas operações e usos, e propriedades destas operações e usos: e.g. o custo computacional e o espaço que pode representar e ocupa na memória. Conceituar Ponteiros e Vetores em Estrutura de Dados O ponteiro nada mais é do que uma variável que guarda o endereço de outra variável. Declaração de ponteiros A declaração de ponteiros é feita da seguinte forma: int *ptr Conforme qualquer variável em C, o ponteiro deve ser declarado antes de ser usado. Basta inserir o operador indireto (*) após o tipo da variável: int *ptr; Essa declaração define a variável ptr como um ponteiro para uma variável do tipo int (número inteiro). A declaração de ponteiro não tem o mesmo significado da declaração de uma variável. Ela indica apenas o tipo de objeto de dados apontado e, desde que contém endereço de memória, o tamanho em bytes que ocupa não tem relação com o tamanho do objeto apontado. O tamanho do ponteiro é fixo e depende apenas do modelo de memória do sistema (2 bytes ou 4 bytes, normalmente). Para declarar mais de um ponteiro por linha, usa-se um operador indireto (*) para cada char *ch1, *ch2; (são ponteiros para o tipo char). Se um operador for omitido (exemplo: char *ch1, ch2;), a variável correspondente não será ponteiro e, certamente, provocará erro de execução se usada como tal. OBS: O ponteiro pode ser declarado para qualquer tipo legal de variável em C (char, int, float, double, etc), além de void, que seria um genérico, podendo apontar para qualquer tipo de dado. Ponteiros Conceituar Ponteiros e Vetores em Estrutura de Dados Inicialização de ponteiros: Para se inicializar um ponteiro é necessário apenas atribuir-se um endereço de memória. A simples declaração de um ponteiro não o faz útil. É necessária a indicação da variável para a qual ele aponta. int var; int *ptr; var = 10; ptr = &var; Na sequência acima, são declarados uma variável tipo int (var) e um ponteiro para o mesmo tipo (ptr). A terceira linha atribui o valor 10 a var e a última linha inicializa o ponteiro ptr. Observa-se o uso do operador de endereçamento (&) para inicialização do ponteiro. Isso significa, no código ptr = &var, que ptr passa a conter o endereço de var, não o seu valor. Supondo que o sistema é endereçado por 2 bytes, a Figura 2.1 acima dá uma ideia gráfica dessa associação: o conteúdo de ptr é 4052, que é o endereço do primeiro byte da variável var (ptr ocupa 2 bytes por causa do endereçamento do sistema e var também ocupa 2 bytes, mas por ser do tipo int. O valor 4052 para a posição de memória de var é apenas ilustrativo. Na prática, dependerá do local de memória onde o programa foi carregado. Com ptr apontando para var, é possível realizar operações com esta última de forma indireta, a partir de ptr. Exemplos a seguir. Acrescentando a linha int newVar = *ptr; ao código anterior, o valor de newVar é 10, que é o valor de var lido indiretamente através de ptr. Ponteiros Conceituar Ponteiros e Vetores em Estrutura de Dados E a linha *ptr = 20; modifica o valor de var para 20, ou seja, altera de forma indireta através de ptr. É importante lembrar que um ponteiro declarado e não inicializado poderá ter conteúdo nulo ou aleatório, a depender da alocação sistema. Nessa condição, se o conteúdo apontado for modificado, algumas posições de memória terão seus valores indevidamente alterados e as consequências serão imprevisíveis. Agora veremos um exemplo completo de utilização de ponteiros: #include <stdio.h> #include <stdio.h> int main ( ) { int a; int b; int c; int *ptr; /* declara um ponteiro para um inteiro */ /* um ponteiro para uma variável do tipo inteiro */ a = 100; b = 2; c = 3; ptr = &a; /* ptr recebe o endereço da variável a */ printf(“Valor de ptr: %p, Conteúdo de ptr: %d\n”, ptr, *ptr); printf(“B: %d, C: %d \n”, b, c); a = 200; printf(“Valor de ptr: %p, Conteúdo de ptr: %d\n”, ptr, *ptr); system(“pause”); } Ponteiros Conceituar Ponteiros e Vetores em Estrutura de Dados Vetores Um vetor ou arranjo é uma estrutura de dados que armazena uma sequência de objetos sendo todos do mesmo tipo e também posições consecutivas da memória principal do computador. São estruturas lineares e estáticas, ou seja, são compostas por um número finito e pré-determinado de valores. Qualquer elemento do vetor pode ser alcançado diretamente, sem passar pelos elementos anteriores (o décimo elemento pode ser alcançado sem que seja necessário passar antes pelo primeiro). Declaração e inicialização de um vetor: A declaração de um vetor em uma estrutura pode ser da seguinte forma: Nome_Vetor: vetor[tamanho]tipo Assim temos como exemplo de declarações: VET: vetor [10] numérico MEDIA: vetor [3] numérico Tomemos o primeiro exemplo (inteiro vet [10]) onde declaramos que estamos criando um vetor para números chamado de VET com dez posições. Desta forma o computador entende que deve alocar 10 espaços para 10 números inteiros que serão inseridos conforme especificado no programa. Conceituar Ponteiros e Vetores em Estrutura de Dados Vetores Exemplificado no programa VET:vetor [10] numérico INDICE:numérico INDICE<-0 para INDICE de 0 até VET<9 passo 1 faça exibe Escreva um número recebe VET [INDICE] fecha_para para INDICE de 0 até VET<9 passo1 faça exibeVET [INDICE] recebe VET [INDICE] fecha_para Conforme vimos, o primeiro laço para vai entender que ao entrar índice<-0, quando o usuário digitar o primeiro valor será alocado este valor em vetor. Quando chegar ao final do para ele fará o teste, se o índice continuar menor do que 10 ele entra no laço e recebe o segundo valor, chegando ao final do laço e fazendo novamente o processo até obter os dez valores quando sai do laço.No segundo laço acessamos estes dados e exibimos na tela aplicando o mesmo princípio do primeiro laço. Operações com Vetores Podemos trabalhar com vetores numéricos, executando operações sobre eles da mesma forma como executaríamos com variáveis numéricas comuns. Devemos ter atenção que ao declararmos um determinado vetor, com um índice específico, estamos fazendo referência a um número. Conceituar Ponteiros e Vetores em Estrutura de Dados Estruturas de dados Estrutura de Dados Nádia Mendes dos Santos; Geraldo Nunes da Silva Júnior; Otílio Paulo da Silva Neto Curso Técnico em Informática. Teresina – PI 2013. HOROWITZ, E.; SAHNI, S. Fundamentos de Estruturas de Dados. Rio de Janeiro, Ed. Campus, 1986. PINTO, Wilson Silva. Introdução ao Desenvolvimento de Algoritmos e Estrutura de dados. Ed. Érica LTDA. Livro: Estruturas de Dados, Autor: Paulo Veloso/Cleusio dos Santos/Paulo Azeredo/Antonio Furtado, 1984, Editora Campus, ISBN 85-7001-352-3 Referências Bibliográficas