20
Profa. Juliana Mafra ([email protected]) ESTRUTURA DE DADOS 23 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco

ESTRUTURA DE DADOS

  • Upload
    markku

  • View
    28

  • Download
    1

Embed Size (px)

DESCRIPTION

Faculdade de Informática e Tecnologia de Pernambuco. ESTRUTURA DE DADOS. Profa. Juliana Mafra ([email protected]). 23 de Setembro de 2009. Estruturas Elementares. Listas Lineares. Listas Lineares. - PowerPoint PPT Presentation

Citation preview

Page 1: ESTRUTURA DE DADOS

Profa. Juliana Mafra([email protected])

ESTRUTURA DE DADOS

23 de Setembro de 2009

Faculdade de Informática e Tecnologia de Pernambuco

Page 2: ESTRUTURA DE DADOS

Estruturas Elementares

ESTRUTURA DE DADOS Profa. Juliana Mafra2

Listas Lineares

Page 3: ESTRUTURA DE DADOS

Listas Lineares

3

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.

ESTRUTURA DE DADOS Profa. Juliana Mafra

Sequência de nós

Page 4: ESTRUTURA DE DADOS

Listas Lineares

4

Estrutura interna é abstraída

ESTRUTURA DE DADOS Profa. Juliana Mafra

Page 5: ESTRUTURA DE DADOS

TAD Listas Lineares: Operações

5

• 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

Page 6: ESTRUTURA DE DADOS

TAD Listas Lineares: Operações

6

• 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

Page 7: ESTRUTURA DE DADOS

Listas Lineares: Classificação

7 ESTRUTURA DE DADOS Profa. Juliana Mafra

Listas Lineares

Listas Lineares Gerais

Listas Lineares Particulares (Pilhas, Filas)

- SEM restrição para inserção e remoção de elementos

- COM restrição para inserção e remoção de elementos

Page 8: ESTRUTURA DE DADOS

Listas Lineares: Classificação

8

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

Page 9: ESTRUTURA DE DADOS

Listas Lineares: Implementações

9

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

Page 10: ESTRUTURA DE DADOS

Implementação de Listas: Arranjos

10

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.

ESTRUTURA DE DADOS Profa. Juliana Mafra

...a1 a2 a3 an1 2 3 n

#define MAX 10 typedef int telem; typedef struct { telem v[MAX]; int n; } tlista;

Page 11: ESTRUTURA DE DADOS

Inserção em Listas: Arranjos

11

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.

ESTRUTURA DE DADOS Profa. Juliana Mafra

...

2 3 4 7 8 9 10 13

..2 3 4 7 8 9 10 135

int inserir (tlista *L, int pos, 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); }

Page 12: ESTRUTURA DE DADOS

Remoção em Listas: Arranjos

12

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.

ESTRUTURA DE DADOS Profa. Juliana Mafra

...2 3 4 7 8 9 10 13

...2 4 5 7 8 9 10 13

5

int remover (tlista *L, int pos, 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); }

Page 13: ESTRUTURA DE DADOS

Listas usando Arranjos: Vantagens e Desvantagens

13

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

Page 14: ESTRUTURA DE DADOS

Implementação de Listas: Apontadores

14

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)

ESTRUTURA DE DADOS Profa. Juliana Mafra

5L 8 1

Indicador do fim da lista (referência null)

dado|prox dado|prox

typedef int telem; typedef struct no { telem dado; struct no* prox; } tno typedef tno* tlista

Page 15: ESTRUTURA DE DADOS

Implementação de Listas: Apontadores

15

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

2 3 4 7 8 9 10 135

Page 16: ESTRUTURA DE DADOS

Inserção em Listas: Apontadores

16

Se a lista estiver vazia:

Inserindo um novo elemento, teremos:

ESTRUTURA DE DADOS Profa. Juliana Mafra

L 9novo nó

void inserir(tlista *L, telem valor){ tlista novo; novo = (tlista) malloc(sizeof(tno)); novo->dado = valor; novo->prox = NULL; *L = novo;}

Page 17: ESTRUTURA DE DADOS

Inserção em Listas: Apontadores

17

Se a lista não estiver vazia, para inserir no fim da lista teremos:

ESTRUTURA DE DADOS Profa. Juliana Mafra

9novo nó

3L 1 2

último nó?NÃO

último nó?NÃO

último nó?SIM

void inserirFim(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;

Page 18: ESTRUTURA DE DADOS

Inserção em Listas: Apontadores

18

Para inserir um nó entre dois outros nós:

ESTRUTURA DE DADOS Profa. Juliana Mafra

void inserirMeio(tlista *L, int pos,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; }

novo nó

5

4 7anterior anterior.prox

... ...

anterior.prox

Page 19: ESTRUTURA DE DADOS

Remoção em Listas: Apontadores

19

Para excluir um nó entre dois outros nós;

ESTRUTURA DE DADOS Profa. Juliana Mafra

nó atual

1 29anterior anterior.prox.prox

... ...

anterior.prox

int remover(tlista *L, int pos){ tlista ant, 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;}

Page 20: ESTRUTURA DE DADOS

Listas usando Apontadores: Vantagens e Desvantagens

20

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