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

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

ALGORITMOS E ESTRUTURAS DE DADOS

Apresentações semelhantes


Apresentação em tema: "ALGORITMOS E ESTRUTURAS DE DADOS"— Transcrição da apresentação:

1 ALGORITMOS E ESTRUTURAS DE DADOS
Bruno Silva

2 Listas Encadeadas Características: Tamanho da lista não é pré-definido
Cada elemento guarda quem é o próximo Elementos não estão contíguos na memória info NULL Vetor x Listas: Vetor: tamanho pré-definido, sabe qual o próximo, contíguo na memória Lista: não tem tamanho pré-definido, cada um guarda quem é o próximo, espalhados pela memória Figura Cada elemento armazenado numa lista guarda um ponteiro para o próximo elemento. O último elemento da lista possui um ponteiro inválido, indicando o término da estrutura. Com isto, a partir do primeiro elemento e percorrendo-se os ponteiros, pode-se acessar todos os elementos da lista. Portanto, numa lista encadeada, as informações não estão armazenadas de forma contínua na memória. Cada informação tem seu espaço de memória e é ligada à outra através de um enlace (ponteiro). Cada elemento é uma estrutura: informações + próximo da fila. Filas e pilhas dividem características comuns: Primeiro, ambas têm regras específicas para referenciar elementos às estruturas de dados. Segundo, operações de restauração são por natureza destrutivas, isto é, acessar um elemento em uma pilha ou fila requer sua retirada. info NULL prox info prox info info NULL prox Algoritmos e Estrutura de Dados I

3 Sobre os Elementos da Lista
Elemento: guarda as informações sobre cada elemento. Para isso define-se cada elemento como uma estrutura que possui: campos de informações ponteiro para o próximo elemento info prox Algoritmos e Estrutura de Dados I

4 Sobre a Lista Uma lista pode ter uma célula cabeça
info prox NULL Último Uma lista pode ter um apontador para o último elemento Algoritmos e Estrutura de Dados I

5 Cria Lista Vazia NULL Cabeça Último Algoritmos e Estrutura de Dados I

6 Inserção de Elementos na Lista
info prox NULL Último 3 opções de posição onde pode inserir: 1ª. posição última posição Após um elemento qualquer E Algoritmos e Estrutura de Dados I

7 Inserção na Primeira Posição
info NULL prox prox info prox info prox info NULL Último Algoritmos e Estrutura de Dados I

8 Inserção na Última Posição
prox info prox info prox info NULL info NULL prox Último Algoritmos e Estrutura de Dados I

9 Inserção Após o Elemento E
info NULL prox prox info prox info prox info NULL Último Elem E Algoritmos e Estrutura de Dados I

10 Retirada de Elementos na Lista
info prox NULL Último 3 opções de posição de onde pode retirar: 1ª. posição última posição Um elemento qualquer E Algoritmos e Estrutura de Dados I

11 Retirada do Elemento na Primeira Posição da Lista
prox info prox info prox info NULL Último Algoritmos e Estrutura de Dados I

12 Retirada do Elemento E da Lista
prox info prox info prox info NULL Anterior Elem E Último Algoritmos e Estrutura de Dados I

13 Retirada do Último Elemento da Lista
prox info prox info prox info NULL NULL Anterior Último Algoritmos e Estrutura de Dados I

14 Estrutura da Lista Usando Apontadores
typedef int TipoChave; typedef struct { int Chave; /* outros componentes */ } TipoItem; typedef struct Celula_str *Apontador; typedef struct Celula_str { TipoItem Item; Apontador Prox; } Celula; Apontador Primeiro; Apontador Ultimo; } TipoLista; Algoritmos e Estrutura de Dados I

15 Operações sobre Lista Usando Apontadores
void IniciaVazia(TipoLista *Lista) { Lista->Primeiro = (Apontador) malloc(sizeof(Celula)); Lista->Ultimo = Lista->Primeiro; Lista->Primeiro->Prox = NULL; } int Vazia(TipoLista Lista) return (Lista.Primeiro == Lista.Ultimo); void Insere(TipoItem x, TipoLista *Lista) Lista->Ultimo->Prox = (Apontador) malloc(sizeof(Celula)); Lista->Ultimo = Lista->Ultimo->Prox; Lista->Ultimo->Item = x; Lista->Ultimo->Prox = NULL; Algoritmos e Estrutura de Dados I

16 Operações sobre Lista Usando Apontadores
void Imprime(TipoLista Lista) { Apontador Aux; Aux = Lista.Primeiro->Prox; while (Aux != NULL) printf("%d\n", Aux->Item.Chave); Aux = Aux->Prox; } Algoritmos e Estrutura de Dados I

17 Operações sobre Lista Usando Apontadores
Vantagens: Permite inserir ou retirar itens do meio da lista a um custo constante (importante quando a lista tem de ser mantida em ordem). Bom para aplicações em que não existe previsão sobre o crescimento da lista (o tamanho máximo da lista não precisa ser definido a priori). Desvantagem: Utilização de memória extra para armazenar os apontadores. Algoritmos e Estrutura de Dados I


Carregar ppt "ALGORITMOS E ESTRUTURAS DE DADOS"

Apresentações semelhantes


Anúncios Google