Universidade Federal do Ma Curso de Ciência da Computação

Documentos relacionados
LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

1. Listas sequenciais versus listas ligadas. Lista sequencial

Estruturas de Dados. Parte dos slides a seguir são adaptações, extensões e recodificações em C dos originais:

Professora Jeane Melo

INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1

SCC 202 Algoritmos e Estruturas de Dados I. Listas Lineares Encadeadas Alocação dinâmica

CES-11. Pilhas Definição Operações Filas. Operações Deques. Definição. Operações

Lista Encadeada (Linked List)

Módulo 10 Listas Encadeadas

SCC122 - Estruturas de Dados. Lista Estática Seqüencial

Aula 11 Pilha Dinâmica. prof Leticia Winkler

Métodos Computacionais. Listas Encadeadas

Árvores Binárias. 16/11 Representação e Implementação: Encadeada Dinâmica O TAD

Conceitos. Pilhas e Filas. Conceitos e Implementação em linguagem C. Maria Adriana Vidigal de Lima. Março

Aula 7 e 8 Filas e suas Aplicações. Prof. Leticia Winkler

Estruturas de Dados I

Algoritmos e Estruturas de Dados II IEC013

Filas. Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing,

Linguagem C: Listas Encadeadas

Filas Exemplo de Aplicação

Algoritmos e Estruturas de Dados I

DAINF - Departamento de Informática

Estruturas de Dados Encadeadas

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP

TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TURMA 2008/1 2 PERÍODO MÓDULO 3 AVALIAÇÃO MP2 DATA 2/10/2008 ESTRUTURAS DE DADOS 2008/2

Pilhas. ser acessada somente por uma de suas extremidades. pelo topo. S Uma pilha é uma estrutura linear de dados que pode

Revisão de TDA, Pilhas e Filas

Listas Lineares Ordenadas

Estruturas de Dados. Módulo 11 Pilhas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 03 Pag.: 1

ESTRUTURA DE DADOS (TCC )

ESTRUTURA DE DADOS CIÊNCIA E TECNOLOGIA DO RIO. Curso de Tecnologia em Sistemas para Internet

16/11/2015 Lista Tipo de dado Lista - Implementação Lista - Implementação Lista - Implementação 3

Tipos Abstratos de Dados. Estrutura de Dados

Universidade Federal do Ma Curso de Ciência da Computação

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 04 Pag.: 1

Algoritmos e Estruturas de Dados I

INF 1007 Programação II

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Aula 2 Listas Lineares Sequenciais. prof Leticia Winkler

Aula 10 Alocação Dinâmica de Memória Listas Encadeadas. prof Leticia Winkler

Filas: conceitos e implementações

Árvores Binárias. 9/11 e 11/11 Conceitos Representação e Implementação

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio

Árvores Binárias de Busca

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura

Lista com descritor (continuação)

Árvores. Sérgio Carlos Portari Júnior

AULA 14 ESTRUTURA DE DADOS

Tipos Abstractos de Dados (TADs) e Java

Estruturas de Dados Aula 16: Árvores com Número Variável 13/06/2011

Fila. Algoritmos e Estruturas de Dados I

3.2.2 Pilha (LIFO - last in, first out) - Inserção e remoção apenas no final da lista.

Estruturas de dados. IPC2 1999/2000 F. Nunes Ferreira

Algoritmos e Estrutura de Dados II

ÁRVORE BINÁRIA DE BUSCA TDA-ABB

CES-11. Algoritmos e Estruturas de Dados. cios. Exercícios. Exercícios

LP II Estrutura de Dados Estruturas Heterogêneas e Listas Lineares Estáticas. Prof. José Honorato Ferreira Nunes

Listas (Parte 2) Túlio Toffolo BCC202 Aula 10 Algoritmos e Estruturas de Dados I

Métodos Computacionais. Variações de Listas Encadeadas

Das 5102 Fundamentos da Estrutura da Informação

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

Algoritmos e Estrutura de Dados. Aula 05 Estrutura de Dados: Listas (Parte II) Prof. Tiago A. E. Ferreira

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Pesquisa em memória primária: hashing. Algoritmos e Estruturas de Dados II

Listas e matrizes esparsas. SCC122 Estruturas de Dados

Pilhas. Algoritmos e Estruturas de Dados I. José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP

Estruturas de Dados. Filas em que a prioridade de remoção não é cronológica. Maior prioridade não é do elemento que ingressou primeiro

Introdução à Computação

Árvores Binárias de Busca (ABB) 18/11

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Pilha e Fila. Pilha em C. Definir o registro que representará cada elemento da pilha.

Aula 5 e 6 Pilhas e suas Aplicações. prof Leticia Winkler

ADT - Árvores. ADT Árvores Definição

Listas ordenadas. Listas ordenadas. Listas ordenadas. Listas ordenadas. Listas ordenadas. Listas ordenadas. Definição

BCC202 - Estrutura de Dados I

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

Estruturas de Dados. Listas Dinâmicas Duplamente Encadeadas & Variantes. Listas Duplamente Encadeadas

Módulo 4. Listas Encadeadas. Algoritmos e Estruturas de Dados II C++ (Rone Ilídio)

Análise de Algoritmos

I Alocação dinâmica de memória é utilizada para alocar espaço de memória para armazenar conteúdos de variáveis;

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Árvores. Prof. César Melo DCC/ICE/UFAM

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

Pesquisa Sequencial e Binária

INF1010 Lista de Exercícios 2

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Estruturas de dados elementares

Lista Ligada. Nó de Lista Ligada

Pilha. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

struct Nodo { int struct Nodo struct Nodo typedef struct Nodo *PNodo; int ConstruirLista (PNodo *H, PNodo *T) { int Criar

Pilhas. Prof. Túlio Toffolo BCC202 Aula 11 Algoritmos e Estruturas de Dados I

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

Pilhas e Filas. Prof. Walteno Martins Parreira Júnior.

Fila. 26 e 31/8/2008 Representação/Implementação: Seqüencial estática Encadeada dinâmica Exercícios/Aplicações

AULA 13 ESTRUTURA DE DADOS

Matrizes esparsas: definição

AVALIAÇÃO DE CONHECIMENTO ESPECÍFICO

Busca em Memória Secundária. Busca em Memória Secundária

Transcrição:

Universidade Federal do Ma Curso de Ciência da Computação Estrutura de Dados Prof. Anselmo C. de Paiva Depto de Informática Limitações dos vetores Vetores Simples, Rápidos Mas, é necessário especificar o tamanho no momento da construção Lei de Murphy: Construa um vetor com espaço para n elementos e você sempre chegará à situação em que necessita de n+1 elementos Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 2 Encadeadas Utilização flexível da memória memória é alocada dinamicamente para cada elemento a medida que for necessária cada elemento da lista inclui um ponteiro para o próximo Lista Encadeada Cada item( tipo ) da lista contém: o item de dado (ponteiro para a estrutura que realmente guarda os dados) - campo um ponteiro pra o próximo item da lista - campo Encadeadas A estrutura Coleção possui em substituição ao vetor de ponteiros para dados um ponteiro para a lista Inicializado com NULL Coleção Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 3 Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 4 Encadeadas Insere o primeiro elemento na lista Aloca espaço para um Atribui endereço do dado para o ponteiro do Atribui NULL parao campo do Atribui o endereço do novo para o campo da Coleção Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 5 Insere o segundo item Encadeadas Aloca espaço para um Atribui endereço do dado para o ponteiro do Atribui NULL parao campo do Atribui o endereço do novo para o campo da Collection Atribui o campo do novo com o valor de Atribui o endereço do novo ao campo da Collection Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 6

Encadeadas - Implementação operação ADD Coleção Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 7 struct struct *; Node; struct _collection_ Node ; Collection; int AddToCollection( Collection *c, void *item ) Node *new = malloc( sizeof(node) ); new->item = item; new-> = c->; c-> = new; return TRUE; Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 8 Collection Head Ligadas Tempo para inserção Constante - independente do número de elementos na lista n Tempo de Consulta Pior caso - n Data Next Item 2 Data item Next Pilhas e Filas como Ligadas Pilha - Implementação mais simples Adiciona e retira somente no início da lista Last-In-First-Out (LIFO) semantics Fila First-In-First-Out (FIFO) Mantém um ponteiro para o final da lista struct struct t_ *; Node; tail struct _collection_ Node *, *tail; Node; Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 9 Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 10 - Duplamente encadeadas Podem ser percorridas nas duas direções struct struct *prev, *; Node; struct _collection_ Node *; Collection; tail prev prev prev Operações sobre Ligadas 1. Criar lista vazia 2. Inserir primeiro elemento 3. Inserir no início de uma lista 4. Acessar primeiro elemento 5. Acessar último elemento 6. Tamanho da lista 7. Inserir valor v na posição p+1 Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 11 Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 12

1- Criação da lista vazia SLList *CreateCollection (void ) SLList *l = (SLList*) malloc(sizeof(sllist)); assert(l); l->numitens = 0; l-> = NULL; return l; 2) Inserção do primeiro item void AddFirstToCollection( SLList *l, void *item) Node *newnode= (Node *) malloc(sizeof(node)); newnode-> =item; newnode-> = NULL; l-> =newnode; l->numitens ++; Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 13 3) Inserção no início 4) Acesso ao primeiro elemento void AddToCollection( void *First( SLList *l) SLList *l, void *item) return l->->; Node *newnode = (Node *) malloc(sizeof(node )); 5) Acesso ao último elemento void *Last(SLList *l) assert( newnode); Node *cur; newnode-> = item; if(l -> == NULL ) newnode -> = l->; return NULL; l-> = newnode ->; l->numitens++; cur = l->; while(cur ->!= NULL ) cur = cur ->; return cur ->; Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 14 6) Qualo número de elementos? int NumElem( SLList *l ) if( l-> == NULL ) return 0; else current = l; nelem := 1; while(current->!= NULL) nelem++; current = current->; 7) Inserção do valor v depois do elemento apontado pork void InsertAfter( Node * k, void *item) Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 15 Node *newnode; newnode = (Node) malloc(sizeof(node)); newnode -> = item; newnode-> = k->; k-> = newnode; Outras Operações Eliminar elemento da posição k+1 Eliminar primeiro elemento Eliminar valor v Inserir valor v antes do elemento apontado por p Criar uma lista com registros numerados Eliminar sucessor de p Imprimir recursivamente Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 16 Lista Especificação do TAD Uma lista L de elementos do tipo T é uma sequência de elementos T, em conjunto com as seguintes operações: Construir uma lista vazia Determinar quando a lista está vazia ou não Determinar quando a lista está cheia ou não Encontraro número de elementos na lista Limpar uma lista para torná-la uma lista vazia Inserir um elemento em uma posição especificada Remover um elemento de uma posição especificada Substituirum elemento em uma posição especificada Percorrera lista, realizando uma certa operação em cada entrada da lista Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 17 Duplamente Encadeadas (LDE) Lista linear encadeada onde cada elemento sabe onde está localizado os seus dois vizinhos. Possui um ponteiro para o próximo() e para o anterior(previous) Permite movimentação bidirecional ao longo da lista Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 18

Operações sobre LDE 1. Criar lista vazia 2. Inserir numa das extremidades 3. Inserir apósum elemento da lista 4. Inserir antes de um elemento da lista 5. Remover um elemento da lista 6. Localizar um elemento da lista Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 19 typedef struct _dl_ struct _dl_ *, prev; void * ; DLNode; typedef struct _dllist_ DLNode*; DLList DLList *Create (void ) /* 1- Cria lista vazia */ DLList *l = (DLList *)malloc(sizeof(dllist)); assert(l); l-> = NULL; return l; /* 2) Inserção no início da lista */ void AddInListBegin(DLList *l, void *item) DLNode *newnode=(dlnode *) malloc(sizeof (DLNode) ); newnode->prev = NULL; newnode-> =item; if(l->!= NULL) l->->prev = newnode; newnode-> = l->; l-> = newnode; Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 20 voidaddinlistend(dllist *l, void *item) // Inserção no final DLNode *newnode = ( DLNode *)malloc(sizeof(dlnode)); DLNode *last; last=getlastnode(l); newnode-> = item; newnode -> = NULL; newnode->prev = last; if (last!= NULL) last-> =newnode; else l-> =newnode; Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 21 5) Remover um elemento da lista int Remove(DLList *l, DLNode *elm) DLNode *prev=elm->prev, *=elm->; if (prev!= NULL) prev-> = ; else l-> = ; if(!=null) ->prev= prev; free(elm); Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 22 6) Inserir após um elemento da lista int InsAfterElm( DLList *l, DLNode *ref, void * ) DLNode *newnode = (DLNode *)malloc(sizeof(dlnode )); DLNode *=ref->, *prev=ref; newnode-> = ; newnode-> = ; newnode->prev = prev; if(prev!= NULL) prev-> =newnode; else l-> =newnode; if(!=null) ->prev = newnode; Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 23 7) Inserir antes de um elemento da lista int InsBefElm( DLList *l, DLNode *ref, void * ) DLNode *newnode = (DLNode *)malloc(sizeof(dlnode )); DLNode *=ref, *prev=ref->prev; newnode-> = ; newnode-> = ; newnode->prev = prev; if(prev!= NULL) prev-> =newnode; else l-> =newnode; if(!=null) ->prev = newnode; Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 24

Encadeadas Circulares O último elemento recebe o endereço do primeiro(lista simplesmente encadeada) O campo do último elemento aponta para o primeiro e o campo previous do primeiro aponta para o último Duplamente Encadeadas O que muda?? A forma de identificaro último elemento da lista - agora é o elemento cujo campo é iguala. Não precisa entrar na lista somente pelo, agora basta saber o endereço de um Node e pode percorrera lista. Nesse caso para qdo o campo for igual ao Node fornecido Exercícios Escreva os algoritmos para as seguintes operações em listas circulares duplamente encadeadas Buscadeelemento Remoçãode um elemento Inserção após um elemento. Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 25 Prof. Anselmo C. de Paiva -DEINF-UFMA - Estrutura de Dados 26