Estruturas de Dados Aula 10: Listas (parte 2) 19/04/2011

Documentos relacionados
Estruturas de Dados Aula 9: Listas (parte 1) 05/04/2011

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

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP

Estruturas de Dados Aula 11: TAD Pilha 09/05/2011

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

Métodos Computacionais. Listas Encadeadas

ias.php

Módulo 10 Listas Encadeadas

Professora Jeane Melo

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

Linguagem C: Listas Encadeadas

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

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

Lista Encadeada (Linked List)

BCC202 - Estrutura de Dados I

Algoritmos e Estruturas de Dados I

Módulo 5 Vetores e Alocação Dinâmica

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

Estruturas de Dados I

/*(Atenção: Em se tratando de uma lista estaticamente alocada, temos utilizado a estratégia de passa o tamanho máximo do vetor.)*/

INF1007: Programação 2. 2 Alocação Dinâmica. 17/02/2014 (c) Dept. Informática - PUC-Rio 1

Tipos Abstratos de Dados. Estrutura de Dados

1. Listas sequenciais versus listas ligadas. Lista sequencial

struct LISTA item quant

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

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

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

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

A linguagem C permite dois tipos de alocação de memória: Alocação estática e alocação dinâmica.

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

Aula 11 Pilha Dinâmica. prof Leticia Winkler

Árvore Binária Exemplo de Implementação

BCC202 - Estrutura de Dados I

Sistema Rodoviário Tabajara

Listas Lineares Ordenadas

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

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

Gilberto A. S. Segundo. 24 de agosto de 2011

INF 1007 Programação II

Linguagem C: Ponteiros - Alocação Dinâmica

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

INF 1007 Programação II

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

Estruturas de Dados Aula 15: Árvores 17/05/2011

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

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

INF 1007 Programação II

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

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

1ª versão. #include <stdio.h> #include <string.h> #include <stdlib.h> #define maxdiscos 1000

Tipos Abstratos de Dados

Tipos Abstratos de Dados

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

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

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

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

Transformação de Chave - Hashing

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

Métodos Computacionais. Fila

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

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

AULA 14 ESTRUTURA DE DADOS

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

Algoritmos e Estruturas de Dados I

Aula 3 Alocação Dinâmica

INF 1620 P3-25/11/05 Questão 1 Nome:

Alocação Dinâmica em C

Módulo 18 - Tabelas de Dispersão

Analise o código abaixo:

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

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

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

Das 5102 Fundamentos da Estrutura da Informação

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

LINGUAGEM C: ALOCAÇÃO DINÂMICA

Filas Exemplo de Aplicação

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

BCC202 - Estrutura de Dados I

INF 1620 P3-29/06/04 Questão 1 Nome:

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

struct arv { char info; struct arv* esq; struct arv* dir; };

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

Introdução à Computação

O que é um apontador em C (type pointer in C)?

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

DAINF - Departamento de Informática

INF 1007 Programação II

1 Exercícios com ponteiros

Métodos Computacionais. Árvores

Fila. Algoritmos e Estruturas de Dados I

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

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

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

2ª Lista de Exercícios

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

Trabalho 2 Matriz Esparsa

As duas soluções a seguir são exemplos da variedade de soluções admissíveis.

Transcrição:

Estruturas de Dados Aula 10: Listas (parte 2) 19/04/2011

Fontes Bibliográficas Livros: Projeto de Algoritmos (Nivio Ziviani): Capítulo 3; Introdução a Estruturas de Dados (Celes, Cerqueira e Rangel): Capítulo 10; Estruturas de Dados e seus Algoritmos (Szwarefiter, et. al): Capítulo 2; Algorithms in C (Sedgewick): Capítulo 3; Slides baseados nas transparências disponíveis em: http://www.dcc.ufmg.br/algoritmos/transparenc ias.php

Listas com alocação não sequencial e dinâmica Cada item é encadeado com o seguinte mediante uma variável do tipo Ponteiro. 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. Há uma célula cabeça para simplificar as operações sobre a lista Estrutura Encadeada

Listas com alocação não sequencial e dinâmica Cada item é encadeado com o seguinte mediante uma variável do tipo Ponteiro. 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. Há uma célula cabeça para simplificar as operações sobre a lista

Estrutura da Lista com Alocação não Sequencial e Dinâmica A lista é constituída de células. Cada célula contém um item da lista e um ponteiro para a célula seguinte. O registro (struct) TipoLista contém um ponteiro para a célula cabeça e um ponteiro para a última célula da lista.

Estrutura da Lista com Alocação não Sequencial e Dinâmica (2) lista.h typedef int Posicao; typedef struct tipoitem TipoItem; typedef struct tipolista TipoLista; TipoLista* InicializaLista(); void FLVazia (TipoLista* Lista); int Vazia (TipoLista* Lista); void Insere (TipoItem* x, TipoLista* Lista); TipoItem* Retira (Posicao p, TipoLista* Lista); void Imprime (TipoLista* Lista); TipoItem* InicializaTipoItem(); void ModificaValorItem (TipoItem* x, int valor); void ImprimeTipoItem(TipoItem* x);

Estrutura da Lista com Alocação não Sequencial e Dinâmica (2) arquivo.c #include <stdio.h> #include <stdlib.h> #include "lista.h" struct tipoitem int valor; /* outros componentes */ ; typedef struct celula_str Celula; struct celula_str TipoItem Item; Celula* Prox; ; struct tipolista Celula* Primeiro, Ultimo; ;

Implementação TAD Lista com Ponteiros TipoLista* InicializaLista() TipoLista* lista = (TipoLista*)malloc(sizeof(TipoLista)); return lista;

Implementação TAD Lista com Ponteiros void FLVazia (TipoLista *Lista) Lista->Primeiro = (Celula*) malloc (sizeof (Celula)); Lista->Ultimo = Lista->Primeiro; Lista->Primeiro->Prox = NULL; int Vazia (TipoLista* Lista) return (Lista->Primeiro == Lista->Ultimo);

Implementação TAD Lista com Ponteiros (2) void Insere (TipoItem* x, TipoLista *Lista) Lista->Ultimo->Prox = (Celula*) malloc(sizeof(celula)); Lista->Ultimo = Lista->Ultimo->Prox; Lista->Ultimo->Item =*x; Lista->Ultimo->Prox = NULL;

Implementação TAD Lista com Ponteiros (3) // retorna o tamanho da lista, tirando célula cabeça int tamanho (TipoLista* Lista) Celula* p; int i = 0; for (p=lista->primeiro->prox; p!=null; p=p- >Prox) i++; return i;

Implementação TAD Lista com Ponteiros (3) /* O item retirado é o seguinte apontado por p */ TipoItem* Retira (Posicao p, TipoLista *Lista) Celula* q, q2; TipoItem* item; item = (TipoItem*)malloc(sizeof(TipoItem)); int i; int t = tamanho (Lista); if (Vazia(Lista) p>=t) printf ("ERRO: Lista vazia ou posicao nao existe\n"); return 0; q = Lista->Primeiro; //encontra o elemento antes da posicao desejada for (i=0; i<p; i++) q = q->prox; q2 = q->prox; *item = q2->item; q->prox = q2->prox; if (q2->prox == NULL) Lista->Ultimo = q; free (q2); return item;

Implementação TAD Lista com Ponteiros(4) void Imprime (TipoLista* Lista) Celula* Aux; Aux = Lista->Primeiro->Prox; while (Aux!= NULL) printf ( %d\n, Aux->Item.valor); Aux = Aux->Prox;

Lista com alocação não sequencial e dinâmica: 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 ponteiros.