Lista de Exercícios 04

Documentos relacionados
Lista de Exercícios sobre Listas Implementadas por Encadeamento

BCC202 - Estrutura de Dados I

Estrutura de Dados. Ricardo José Cabeça de Souza Parte 9

BCC202 - Estrutura de Dados I

Universidade de São Paulo

Filas. Prof. Túlio Toffolo BCC202 Aula 12 Algoritmos e Estruturas de Dados I

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)

Estrutura de dados - Listas Encadeadas

Tipos e Estruturas de Dados Profa. Graça Nunes Lista de Exercícios (Listas Encadeadas, Duplamente Encadeadas e Circulares)

Listas Lineares. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Programação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Estruturas de Dados Estruturas de Dados Fundamentais

ESTRUTURA DE DADOS LISTAS LINEARES

Lista Encadeada (Linked List)

Lista de Exercícios sobre Tipos Abstratos de Dados (TAD) e Estruturas de Dados em C

Estruturas de Dados I

Introdução a Programação. Listas Encadeadas

Listas Encadeadas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

BCC202 - Estrutura de Dados I

Listas Lineares Ordenadas

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

Pilhas e Filas. Nádia Félix e Hebert Coelho

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

ESTRUTURA DE DADOS VETORES E LISTAS LINEARES

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

Listas Lineares. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.1

Aplicações de listas e outras estruturas. SCC-502 Algoritmos e Estruturas de Dados I

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

Algoritmos e Estruturas de Dados I

Matrizes esparsas: definição

Linguagem C: Listas Encadeadas

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

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

LISTAS LINEARES. Estrutura de Dados

Estrutura de Dados Listas

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Listas Lineares. continuando...

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

12. Filas Interface do tipo fila

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

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

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

Pesquisa Linear. Adriano J. Holanda 15/3/2016

REVISÃO DE PILHAS E FILAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Módulo 10 Listas Encadeadas

Estruturas de Dados Filas

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Fila e Deque. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

Estruturas de Dados II

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

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

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

Listas - Outras. Listas Circulares Nós Cabeça Listas Duplamente Ligadas/Encadeadas Aplicações

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Algoritmos e Estruturas de Dados II Lista de Exercícios de Listas Lineares

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

1. Faça um programa que leia uma string digitada pelo usuário e salve em um arquivo em branco.

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

Estruturas de Dados Aula 11: TAD Pilha

FICHA 8 PILHAS E FILAS

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

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

Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa

Transcrição:

Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM Disciplina: BCC202 - Estruturas de Dados I Professor: Túlio Toffolo (www.decom.ufop.br/toffolo) Lista de Exercícios 04 Listas com Arrays e Ponteiros (Lista Encadeada) 1) Considere listas implementadas por arranjos, então pede-se para implementar funções que: b. Dividir uma lista em várias (k) c. Copiar uma lista d. Ordenar (sort) ima lista por ordem crescente/decrescente 2) Escreva uma função em C para trocar os elementos m e n de uma lista (m e n podem ser chaves ou mesmo ponteiros para os elementos a escolha é sua). 3) Escreva uma função em C para trocar os elementos de índice m e n de uma lista. 4) Escreva uma rotina, inssub(l1,i1,l2,i2,len) para inserir os elementos da lista l2, começando no elemento i2 e continuando por len elementos na lista l1, começando na posição i1. Nenhum elemento da lista l1 deverá ser removido ou substituído. Se i1 >= length(l1) (onde length(l1) indica o número de nós na lista), ou se i2 + len > length(l2), ou se i1 < 0, ou se i2 < 0, ou se i1 +len > maxlength(l1) (onde maxlenght(l1) indica o número máximo de nós na lista l1), imprima uma mensagem de erro. A lista l2 deve permanecer inalterada. 5) Você foi contratado pela Google para refazer o Orkut. A sua primeira tarefa é implementar uma estrutura de dados para representar as relações de amizade dentro do Orkut. Ou seja, para cada pessoa cadastrada você tem que armazenar a sua lista de amigos. Considere que cada pessoa no Orkut tem um identificador único que é um número inteiro. a. Declare os tipos necessários para a implementação dessa estrutura. b. Escreva um procedimento para cadastrar dois amigos: void Relaciona(int Amigo1, int Amigo2, TipoOrkut* porkut) Considere que o Amigo1 já está cadastrado no Orkut, enquanto o Amigo2 pode ou não já estar cadastrado. 6) Se você tem de escolher entre uma representação por lista encadeada ou uma representação usando posições contíguas de memória para um vetor, quais informações são necessárias para você selecionar uma reprentação apropriada? Como esses fatores influenciam a escolha da representação? 7) Considere listas implementadas por encadeamento simples, então pede-se para implementar funções que: b. Concatenar/intercalar (Merge) duas listas c. Dividir uma lista em várias (k) d. Copiar uma lista e. Ordenar (sort) ima lista por ordem crescente/decrescente BCC202 Lista 04 Página 1 de 5

8) Considere listas implementadas por encadeamento duplo, entao pede-se para implementar funções que: b. Concatenar/intercalar (Merge) duas listas c. Dividir uma lista em várias (k) d. Copiar uma lista e. Ordenar (sort) ima lista por ordem crescente/decrescente 9) Escreva uma função em C para trocar os elementos m e n de uma lista simplesmente encadeada (m e n podem ser chaves ou mesmo ponteiros para os elementos a escolha é sua). 10) Agora escreva uma função em C para trocar os elementos m e n de uma lista duplamente encadeada (m e n podem ser chaves ou mesmo ponteiros para os elementos a escolha é sua). 11) Escreva uma rotina, inssub(l1,i1,l2,i2,len) para inserir os elementos da lista l2, começando no elemento i2 e continuando por len elementos na lista l1, começando na posição i1. Nenhum elemento da lista l1 deverá ser removido ou substituído. Se i1 > length(l1) + 1 (onde length(l1) indica o número de nós na lista), ou se i2 + len 1 > length(l2), ou se i1 < 1, ou se i2 < 1, imprima uma mensagem de erro. A lista l2 deve permanecer inalterada. 12) Escreva uma função em C, search(l,x), que receba um ponteiro l para uma lista de inteiros e um inteiro x, e retorne um ponteiro para um nó contendo x, se existir, e o ponteiro nulo, caso contrário. Escreva outra função, searchinsert(l,x), que inclua x em l se ele não for encontrado, e retorne sempre um ponteiro para um nó contendo x. 13) Suponha que uma string de caracteres seja representada por uma lista de caracteres individuais. Escreva um conjunto de funções para manipular estas listas como segue (l1, l2 e list são ponteiros para um nó de cabeçalho de uma lista representando uma string de caracteres, str é um vetor de caracteres e i1 e i2 são inteiros): a. strcnvcl(str) para converter a string de caracteres, str, numa lista. Essa função retorna um ponteiro para um nó de cabeçalho. b. strcnvlc(list,str) para converter uma lista em uma string de caracteres. c. Strcmpl(l1,l2) para comparar duas strings de caracteres, representadas or listas. Essa função retorna -1 se a string de caracteres representada por l1 é menor que a string representada por l2; 0 se são iguais, e 1 se a string representada por l1 é maior. 14) Considere a implementação de listas encadeadas utilizando apontadores vista em sala. Escreva um procedimento Troca(TipoLista* plista, TipoCelula* p) que, dado um apontador para uma célula qualquer (p), troca de posição essa célula com a sua célula seguinte da lista, como mostrado na figura abaixo. (Obs. Não vale trocar apenas o campo item! Você deverá fazer a manipulação dos apontadores para trocar as duas células de posição). Não esqueça de tratar os casos especiais. BCC202 Lista 04 Página 2 de 5

Antes: X Y p Y X 15) Considere a implementação de listas encadeadas utilizando apontadores vista em sala e responda as seguintes perguntas: a. Escreva uma função void Inverte(TipoLista *Lista) que, dada uma lista com um número qualquer de elementos, inverte a ordem dos elementos da lista, como exemplificado na figura abaixo. (Obs. Não vale trocar apenas os campos item ou usar uma lista / fila / pilha auxiliar! Você deverá fazer a manipulação dos apontadores para trocar as células de posição). b. Qual é a ordem de complexidade da sua função. Explique. Antes: 1 2 3 4 4 3 2 1 16) Escreva uma função void MoveMenor(TipoLista Lista) que, dada uma lista com um número qualquer de elementos, acha o menor elemento da lista e o move para o começo da lista, como exemplificado na figura abaixo. (Obs. Não vale trocar apenas os campos item ou usar uma lista / fila / pilha auxiliar! Você deverá fazer a manipulação dos apontadores para trocar as células de posição). Qual é a ordem de complexidade da sua função. Explique. Antes: 10 21 04 13 04 10 21 13 BCC202 Lista 04 Página 3 de 5

17) (Extraído e modificado de [3] apud [2]) Implemente o tipo abstrato de dados Area, cuja finalidade é gerenciar uma área interna de memória de forma que o maior e o menor elemento possam ser removidos dessa área a um custo O(1). A estrutura de dados que deve ser utilizada é uma lista linear duplamente encadeada implementada por cursores. Os cursores são números inteiros que representam posições em um arranjo e são utilizados para simular os apontadores da implementação tradicional das listas lineares duplamente encadeadas. A utilização de cursores evita a alocação e a liberação dinâmica de itens de memória, sendo mais eficiente em aplicações muito dinâmicas em que o número máximo de itens é conhecido. O tipo abstrato de dados Area possui as seguintes operações: a. Criar uma área de memória interna vazia. b. Obter o número de células ocupadas na área de memória c. Inserir um item de dado na área interna de memória, mantendo os itens ordenados. d. Retirar o primeiro item da área de memória. e. Retirar o último item da área de memória f. Imprimir o conteúdo da área de memória. A retirada de um item de uma lista duplamente encadeada pode ser realizada a um custo constante, desde que se conheça previamente o endereço do item na lista. Ao manter a lista ordenada, os elementos de menor e de maior chave estão na primeira e na última posição respectivamente. A figura abaixo ilustra uma lista com capacidade máxima de sete itens. Após a realização de várias inserções e remoções, os itens contidos na lista apresentada na figura acima possuem as chaves 1, 3, 5 e 7. Os itens de dados da lista linear duplamente encadeada são armazenados em um vetor do tipo Celula. Cada entrada do vetor contém uma estrutura que armazena um item de dado, um cursor que aponta para a célula que sucede aquela entrada (prox) e um cursor que aponta para a célula que antecede aquela entrada (ant). Além disso, são representados dois cursores, primeiro e ultimo, que apontam para a primeira e para a última célula da lista, respectivamente. Para facilitar o controle de quando a lista se encontra cheia ou vazia, utilize os campo numcelocupadas, que indica quantas células da lista estão ocupadas. O código abaixo mostra a declaração do tipo abstrato de dados Area. As células armazenados na estrutura Area precisam ser mantidas ordenadas. Observe que você deverá implementar uma função que permita comparar dois itens, visto que os itens são inseridos e mantidos ordenados. #define TAMCELS 7 int chave; /* outros campos */ } Item; Item item; int prox, ant; } Celula; Celula itens[tamcels] ; int celulas Disp, primeiro, ultimo; int numcelocupadas; }; BCC202 Lista 04 Página 4 de 5

Somente o que foi apresentado até agora não é suficiente para implementar o tipo abstrato de dados Area. Isso porque, para incluir um novo item de dado na lista, é necessário haver células disponíveis a fim de que a inserção seja realizada. Assim, para gerenciar a lista de células disponíveis em determinado instante, basta incluir um cursor na representação da estrutura de dados Area, o qual irá apontar para a primeira célula disponível. Tal cursor foi denominado celulasdisp. Como a lista ilustrada pela figura acima possui capacidade para sete itens/células e numcelocupadas = 4, então existem três células disponíveis. A primeira delas é apontada por celulasdisp, ou seja, o índice zero do vetor de itens, a segunda é indicada pelo cursor prox da célula apontada por celulasdisp, ou seja, o índice três do vetor de itens/células. A terceira e última célula disponível é apontada pelo cursor prox da segunda e se encontra no índice cinco do vetor de itens/células. Ela é a última, pois o seu cursor prox possui o valor -1, o que indica a falta de um sucessor para ela. Dessa forma, antes de incluir um novo item de dado em Area, remove-se a primeira célula da lista de disponíveis (apontada por celulasdisp) e a insere ordenamente na lista linear duplamente encadeada que armazena os itens de dados de Area (o custo desta inserção não é O(1), pode ser O(n) no pior caso). Já ao remover um item de dados de Area, a célula que continha tal item deve ser inserida na lista de disponíveis. Para que a inserção e a remoção da lista de disponíveis seja realizada a um custo constante, elas devem ser realizadas na posição apontada por celulasdisp. Exercícios extraídos de (Referências) [1] Aaron M. Tenenbaum, Yedidyah Langsam, Moshe J. Augenstein, Estruturas de Dados Usando C, Makron Books/Pearson Education, 1995. [2] N. Ziviani, F.C. Botelho, Projeto de Algoritmos com implementações em Java e C++, Editora Thomson, 2006. [3] F.C. Botelho, Comunicação Pessoal, Belo Horizonte, MG, Brazil, 2003. BCC202 Lista 04 Página 5 de 5