Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouAndré Malta Alterado mais de 10 anos atrás
1
Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
Ponteiros Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
2
Ponteiros Um ponteiro é uma variável que contém um endereço de memória. Esse endereço de memória é normalmente a posição de uma outra variável na memória. Se uma variável contém o endereço de memória de uma outra, então a primeira variável é dita apontar para a segunda.
3
Exemplo de ponteiro Endereço na memória Variável na memória 1000 1001
1002 1003 1004 1001 1005
4
Declaração de ponteiro
Para utilizar uma variável ponteiro, ela deve ser declarada da seguinte maneira: tipo *nome_ponteiro; Exemplo: int *p;
5
Operadores de ponteiros
Existem 2 operadores unários: * - obtém o conteúdo do endereço apontado & - obtém o endereço de memória do operando.
6
Exemplo char *pont; int t; char texto[] = "marieta das graças";
pont = &texto[0]; for(t=strlen(pont)-1; t>=0; t--){ printf("%c", pont[t]); }
7
Lista Dinâmica Encadeada
8
Listas dinâmicas x estáticas
Embora os algoritmos de manipulação de listas com alocação estática sejam relativamente simples, seu uso prático é limitado, principalmente se for considerado a otimização de uso da memória. Duas situações são bastante comuns: tamanho da lista é superdimensionado, havendo neste caso um possível desperdício de memória; a lista é dimensionada com o tamanho inferior ao necessário – nesta situação ou tempo de processamento adicional deve ser inserido para criar uma nova lista, maior que a original, e copiar os dados de uma lista para outra. A solução é utilizar listas alocadas dinamicamente.
9
Lista Dinâmica Encadeada
Uma lista encadeada é constituída de nós ou nodos. Cada nó contém, no mínimo, dois campos: uma refere-se ao dado armazenado na lista naquela posição, a outra refere-se a um ponteiro a outro nó na mesma lista. O dado é a própria informação da aplicação, o ponteiro (ou ponteiros) permite o encadeamento da lista. Denomina-se o primeiro nó da lista de cabeça e o último de último.
10
Lista Dinâmica Encadeada
Em listas dinâmicas, cada novo dado inserido na lista é encapsulado em um nó, e este nó é alocado dinamicamente, ou seja, conforme necessidade do programa em execução e inserido na lista. A utilização de lista dinâmica consome um tempo maior de processamento, pois requer alocação e liberação dinâmica de memória, no entanto, na prática, o ganho e a versatilidade frente a estratégias estáticas é muito maior. NULL
11
Lista Dinâmica Encadeada
Uma lista encadeada é uma sucessão de nós onde cada nó aponta para o próximo nó da lista. O nó que possuir o valor NULL no ponteiro para próximo é o último nó da lista. É de extrema importância que seja mantida uma referência para o primeiro nó da lista, caso esta referência for NULL, significa que a lista esta vazia. Em certas situações também é útil possuir uma referência ao último nó.
12
Exemplo de estrutura de nó
struct Registro { int codigo; char nome[50]; Registro *proximo; };
13
Alocação dinâmica Malloc() – aloca memória Free() – libera memória
registro *no; no = (registro*) malloc(sizeof(registro));
14
Atividade: Operações sobre Listas Encadeadas Dinâmicas
Criar lista vazia Inserir no início de uma lista Inserir no fim de uma lista Exibir se a lista está vazia Exibir os dados do primeiro elemento Exibir os dados do último elemento Exibir todos os valores da lista Exibir o tamanho da lista Eliminar o primeiro elemento Eliminar o último elemento Eliminar o nó que possua o código digitado pelo usuário
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.