1 / 20

ESTRUTURA DE DADOS

Faculdade de Informática e Tecnologia de Pernambuco. ESTRUTURA DE DADOS. Profa. Juliana Mafra (jmafra.pe@gmail.com). 23 de Setembro de 2009. Estruturas Elementares. Listas Lineares. Listas Lineares.

markku
Download Presentation

ESTRUTURA DE DADOS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS Profa. Juliana Mafra (jmafra.pe@gmail.com) 23 de Setembro de 2009

  2. Estruturas Elementares Listas Lineares ESTRUTURA DE DADOS Profa. Juliana Mafra

  3. Listas Lineares • A Lista Linear é a estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem existente entre eles. • Uma lista linear, é um conjunto de n>= 0 nós L[1], L[2], ..., L[n] , onde: – Se n>0, L[1] é o primeiro nó, – Para 1 < k <= n, o nó L[k] é precedido por L[k-1]. • Observe que existe uma ordenação implícita: se n > 0 temos que: – L[1] é o primeiro nó da lista. – L[n] é o último nó da lista. – se 1 < k < n L[k] é precedido por a(k-1) e seguido por a(k+1). – se n = 0 dizemos que a lista é vazia. Sequência de nós ESTRUTURA DE DADOS Profa. Juliana Mafra

  4. Listas Lineares • Estrutura interna é abstraída ESTRUTURA DE DADOS Profa. Juliana Mafra

  5. TAD Listas Lineares: Operações • Criar uma lista vazia • Verificar se uma lista está vazia • Obter o tamanho da uma lista • Obter/modificar o valor do elemento de uma determinada posição na lista • Obter a posição de elemento cujo valor é dado ESTRUTURA DE DADOS Profa. Juliana Mafra

  6. TAD Listas Lineares: Operações • Inserir um novo elemento após (ou antes) de uma determinada posição na lista • Remover um elemento de uma determinada posição na lista • Exibir os elementos de uma lista • Concatenar duas listas ESTRUTURA DE DADOS Profa. Juliana Mafra

  7. Listas Lineares: Classificação Listas Lineares Gerais - SEM restrição para inserção e remoção de elementos Listas Lineares Listas Lineares Particulares (Pilhas, Filas) - COM restrição para inserção e remoção de elementos ESTRUTURA DE DADOS Profa. Juliana Mafra

  8. Listas Lineares: Classificação • Listas lineares gerais: – A inclusão e remoção de elementos pode ser realizada em qualquer posição da lista. Essas listas não apresentam nenhuma restrição de acesso • Casos particulares de listas: – Pilha: Inserções e remoções são realizadas em apenas um extremo (topo); – Fila: inserções realizadas em um extremo (fim) e remoções em outro (início). ESTRUTURA DE DADOS Profa. Juliana Mafra

  9. Listas Lineares: Implementações • Várias estruturas de dados podem ser usadas para representar listas lineares, cada uma com vantagens e desvantagens particulares. • As duas representações mais utilizadas são as implementações por meio de arranjos e de apontadores. ESTRUTURA DE DADOS Profa. Juliana Mafra

  10. a1 a2 a3 ... Implementação de Listas: Arranjos • Os itens da lista são armazenados em posições contíguas de memória. • A lista pode ser percorrida em qualquer direção. • Os itens são armazenados em um array de tamanho suficiente para armazenar a lista. • O i-ésimo item da lista está armazenado na i-ésima posição do array, 1 ≤ i ≤ n. an #define MAX 10 typedefint telem; typedefstruct { telem v[MAX]; int n; } tlista; 1 2 3 n ESTRUTURA DE DADOS Profa. Juliana Mafra

  11. 2 3 4 7 8 9 10 13 5 2 3 4 7 8 9 10 13 .. ... Inserção em Listas: Arranjos • A inserção de um novo item no meio da lista requer um deslocamento para a direita de todos os itens localizados após o ponto de inserção. int inserir (tlista *L, intpos, telem dado) { int i; /* lista cheia ou posição inválida */ if ( (L->n == MAX - 1) || (pos > L->n + 1) ) return (0); for (i=L->n; i>=pos; i--) L->v[i + 1] = L->v[i]; L->v[pos] = dado; (L->n)++; return (1); } ESTRUTURA DE DADOS Profa. Juliana Mafra

  12. 2 3 4 7 8 9 10 13 5 2 4 5 7 8 9 10 13 ... ... Remoção em Listas: Arranjos • A remoção de um item da lista requer um deslocamento para a esquerda de todos os itens localizados após o ponto de remoção. int remover (tlista *L, intpos, telem *dado) { int i; /* posição inválida */ if ( (pos > L->n) || (pos < 0) ) return (0); *dado = L->v[pos-1]; for (i=pos; i< (L->n); i++) L->v[i] = L->v[i + 1]; (L->n)--; return (1); } ESTRUTURA DE DADOS Profa. Juliana Mafra

  13. Listas usando Arranjos: Vantagens e Desvantagens • Vantagem: • Acesso direto indexado a qualquer elemento da lista. • Economia de memória (não utiliza apontadores). • Desvantagens: • Custo para inserir ou retirar itens da lista, que pode causar um deslocamento de todos os itens, no pior caso; • Tamanho máximo da lista pré-estimado (definido em tempo de compilação). ESTRUTURA DE DADOS Profa. Juliana Mafra

  14. Implementação de Listas: Apontadores • A lista é constituída de nós. • Cada nó contém um item da lista e um apontador para o nó seguinte. • Toda lista possui um apontador externo L que aponta para o primeiro nó da lista (o início da lista) typedefint telem; typedefstruct no { telem dado; struct no* prox; } tno typedeftno* tlista L 5 8 1 dado|prox dado|prox Indicador do fim da lista (referência null) ESTRUTURA DE DADOS Profa. Juliana Mafra

  15. 2 3 4 7 8 9 10 13 5 Implementação de Listas: Apontadores • Permite utilizar posições não contíguas de memória. • É possível inserir e retirar elementos sem necessidade de deslocar os itens seguintes da lista. • O acesso é sequencial, ou seja, a busca inicia por um nó, depois vai pra outro nó, e assim por diante, até que se encontre o nó procurado. • Para inserir um elemento, basta criar um nó, encontrar a posição desejada e inseri-lo; ESTRUTURA DE DADOS Profa. Juliana Mafra

  16. L 9 novo nó Inserção em Listas: Apontadores • Se a lista estiver vazia: • Inserindo um novo elemento, teremos: void inserir(tlista *L, telem valor){ tlista novo; novo = (tlista) malloc(sizeof(tno)); novo->dado = valor; novo->prox = NULL; *L = novo; } ESTRUTURA DE DADOS Profa. Juliana Mafra

  17. L 3 1 2 último nó?NÃO último nó?NÃO último nó?SIM 9 novo nó Inserção em Listas: Apontadores • Se a lista não estiver vazia, para inserir no fim da lista teremos: voidinserirFim(tlista *L, telem valor){ tlista novo, ant, atual; ant = NULL; atual = *L; while (atual != NULL){ ant = atual; atual = atual->prox; } novo = (tlista) malloc(sizeof(tno)); novo->dado = valor; novo->prox = NULL; ant->prox = novo; ESTRUTURA DE DADOS Profa. Juliana Mafra

  18. ... ... 4 7 anterior.prox anterior 5 novo nó anterior.prox Inserção em Listas: Apontadores • Para inserir um nó entre dois outros nós: voidinserirMeio(tlista *L, intpos,telem valor){ tlista novo, ant, atual; int n; n = 1; atual = *L; while ((n<=pos-1) && (atual!=NULL)) { ant = atual; atual = atual->prox; n++; } novo = (tlista) malloc(sizeof(tno)); novo->dado = valor; novo->prox = ant->prox; ant->prox = novo; } ESTRUTURA DE DADOS Profa. Juliana Mafra

  19. ... ... 1 9 2 anterior nó atual anterior.prox.prox anterior.prox Remoção em Listas: Apontadores • Para excluir um nó entre dois outros nós; int remover(tlista *L, intpos){ tlistaant, atual; int n; if (vazia(*L)) return 0; /* erro: lista vazia */ atual = *L; n = 1; while ((n<=pos-1) && (atual!=NULL)) { ant = atual; atual = atual->prox; n++; } ant->prox = atual->prox; free(atual); return 1; } ESTRUTURA DE DADOS Profa. Juliana Mafra

  20. Listas usando Apontadores: Vantagens e Desvantagens • 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. ESTRUTURA DE DADOS Profa. Juliana Mafra

More Related