Universidade de São Paulo

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

Estruturas de Dados Estruturas de Dados Fundamentais

Lista de Exercícios 04

Lista de Exercícios sobre Listas Implementadas por Encadeamento

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

Matrizes Esparsas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Matrizes esparsas: definição

Tabelas Hash. informação, a partir do conhecimento de sua chave. Hashing é uma maneira de organizar dados que:

Tabelas de dispersão/hash

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

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

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

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

Exercícios: Árvores. Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de estrutura de dados em linguagem C

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

Listas e matrizes esparsas. SCC122 Estruturas de Dados

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

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

TAD dicionário. Métodos do TAD dicionário:

Listas Lineares. continuando...

Tabelas de hash Acabamos de estudar como implementar uma tabela hashing aberta e estudaremos agora como implementar uma tabela hashing fechada ou

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

Lista com descritor (continuação)

Hashing (Tabela de Dispersão)

Listas e matrizes esparsas Orthogonal List Representation (Listas Cruzadas) 21/10/2010

10.1. Aula 10: Pilhas. O conceito de pilha. Algoritmos de inserção e remoção. Exemplo: Notação Polonesa

Algoritmo da IFT 2 / 16. Algoritmo da IFT Estrutura da fila de prioridade Resolvendo empates. Algoritmo 1 Algoritmo geral da IFT

4ª Lista de Exercícios de Programação I

Aula 31: Encadeamento exterior. Modelo de encadeamento exterior. Complexidade do encadeamento exterior

Aplicações de listas e outras estruturas

Algoritmos de pesquisa. Tabelas de dispersão/hash

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

Estruturas de Dados I

MATRIZES - PARTE Mais exemplos Multiplicação de duas matrizes AULA 26

Exercícios: Vetores e Matrizes

Programação científica C++

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

4ª Lista de Exercícios de Programação I

Dicionários. TAD Orientado a conteúdo

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)

ICET CURSO: Ciência da Computação e Sistemas de Informação (Estrutura de Dados) Estudos Disciplinares Campus: Data: / / Nome:

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

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

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

CAP Exame de Admissão 16/12/2013. Instruções Gerais (leia atentamente)

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

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

Estrutura de Dados Listas

Lista de Exercícios 07 Introdução à Ciência de Computação II (SCC0201/501)

A inserção da chave 6 da árvore acima resulta na árvore abaixo.

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

Aula 2 Listas Lineares Sequenciais. prof Leticia Winkler

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

Questão 1: O histograma deve ser: [0, 1, 4, 2, 0, 3, 0,, 0, 2] Exemplo: Para a matriz

MATRIZES - PARTE Definição e Manipulação de Matrizes AULA 21

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

Complexidade de Algoritmos

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

Lista Encadeada (Linked List)

Exercícios sobre algoritmos

BAC004 Informática Teórica T2 Professora: Fabiana Costa Guedes Lista 05 Vetores e Matrizes Vetores

Tabelas Hash O Que é uma Tabela Hash? O Que é uma Tabela Hash? O Que é uma Tabela Hash? Inserindo um Novo Registro. O Que é uma Tabela Hash?

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Listas Lineares Duplamente Encadeada (LLDE)

Lista de Exercício de Linguagens de Programação Prog. Funcional

Lista de Figuras Figura 1 1: Figura 1 2: Figura 1 3: Figura 1 4: Figura 1 5: Figura 1 6: Figura 1 7: Figura 2 1: Figura 2 2: Figura 2 3: Figura 2 4:

Aula 11 Pilha Dinâmica. prof Leticia Winkler

Matrizes. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 67

Algoritmos e Estruturas de Dados I

1. Proponha algoritmos para: a. Calcular a altura dos nós de uma árvore binária dada, armazenando o valor da altura no nó.

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Transcrição:

Universidade de São Paulo Instituto de Ciências Matemáticas e Computação SCE5763 - Tipos e Estrutura de Dados - Luis Gustavo Nonato 2 a Lista de Exercícios 1. Seja A um array de inteiros. Escreva algoritmos recursivos para calcular os valores abaixo sem utilizar passagem de parâmetros por endereço: a) O maior elemento de A b) O menor elemento de A c) A soma dos elementos de A d) O produto dos elementos de A 2. Uma fila de números inteiros é armazenada em uma lista simplesmente encadeada. Defina uma estrutura de dados apropriada e construa os procedimentos para inserir, remover, iniciar na fila. 3. Repita o exercício anterior para uma pilha. 4. Considere uma lista circular duplamente encadeada. Defina uma estrutura de dados e construa procedimentos para incluir, remover e procurar por um elemento nesta lista. 5. Mostre como implementar uma pilha utilizando duas filas. Analise o tempo das operações PUSH e POP. 6. Considere duas listas simplesmente encadeada de números interios l 1 e l 2. (a) Crie uma lista l 3 que seja a união sem repetição de l 1 e l 2 (b) Crie uma lista l 4 que seja a interseção dos elementos que estão em l 1 e l 2 7. Construa um procedimento para inverter a ordem de uma lista simplesmente encadeda utilizando apenas duas variáveis auxiliares (não é permitido o uso de listas auxiliares). É possivel construir o procedimento utilizando apenas uma variável auxiliar? 8. Desejamos manipular polinômios do tipo p(x) = a 0 + a 1 x + a 2 x 2 + + a n x n. Tais polinômios podem ser representados por listas simplesmente encadeadas onde cada nó da lista possui três campos: um para o coeficiente que é um número real, um para o expoente que é um número inteiro e um campo que armazena um ponteiro para o próximo nó. Escreva programas para: Ler um polinômio e armazená-lo na lista, somar dois polinômios, multiplicar dois polinômios e derivar um polinômio. 1

9. Deque (fila de duas pontas) é uma estrutura de dados que consiste de uma lista na qual as seguintes operações são permitidas: a) PUSH(A) Insere o elemento A no início da deque. b) Pop() Remove o elemento que está no início da deque. c) Inject(A) Insere o elemento A no final da deque. d) Eject() Remove o elemento que está no final da deque. A fim de implementar as operações acima em tempo O(1) qual a melhor opção: lista sequêncial, lista simplesmente encadeada ou lista duplamente ecadeada? A partir de sua decisão, crie uma estrutura de dados e implemente as operações acima. 10. Considere o seguinte conjunto de números 1234 e as seguintes operações: (a) inserir o n o 1 em uma pilha (b) inserir o 2 na pilha (c) retirar o 2 da pilha (d) inserir o 3 na pilha (e) inserir o 4 na a pilha (f) retirar o 4 da pilha (g) retirar o 3 da a pilha (h) retirar o 1 da pilha. A sequência de saidas do procedimento acima é 2431. Considere agora a sequência 123456. a) Podemos obter as seqências 325641 e 154623 utilizando um processo semelhante ao do exemplo anterior? b) Se I e R representam respectivamente inserção e remoção da pilha o exemplo acima pode ser descrito como IIRIIRRR. Se possível descreva as sequências do item (a) em termos de I e R. c) Qual seria uma regra simples para anlisar se uma sequência de I s e R s é valida? d) Interprete a seguinte proposição: Existe uma permutação p 1 p 2... p n dos números 1234 n usando uma pilha se e somente se não existe índices i < j < k tal que p j < p k < p i. 11. Duas pilhas podem ser implementadas em um único array A da seguinte forma: A primeira pilha cresce a partir do início do array para direita e a segunda cresce a partir do final do array para a esquerda, ou seja, as pilhas crescem uma em direção a outra. Escreva os seguintes procedimentos: a) PUSH(A,i), onde A é o novo elemento a ser inserido na pilha i = 1,2. b) POP(i) que retorna o elemento que está no topo da pilha i = 1,2. 2

12. Podemos generalizar o problema anterior da seguinte forma: Considere N pilhas armazenadas em um único array A. Sejam Base[i] e Top[i] as posições da base e do topo da i-ésima pilha em A. As operações de inclusão e remoção na i-ésima pilha podem ser descritas como: Insere: Top[i]++; if (Top[i] > Base[i+1]) printf("pilha %d cheia",i); else A[Top[i]] = X; Remove: if (Top[i] == Base[i]) printf("pilha %d cheia",i); else { X = A[Top[i]]; Top[i]--; } a) Note que de acordo com o procedimento acima mesmo que ainda exista espaço disponível em A a mensagem de pilha cheia será mostrada. Qual seria uma solução para este problema? b) Suponha que queiramos armazenar 4 pilhas em um array A de tamanho 12 e que todas as pilhas estajam inicialmente distribuidas de forma uniforme em A (igualmente espaçadas) tal que Top[i] = Base[i], i=1,2,3,4. Faça um esquema gráfico para ilustrar como ficarão distribuidas as pilhas (utilizando a solução proposta no ítem (a)) depois da seguinte sequência de inclusões e remoções: I 3 I 3 I 2 I 4 R 2 I 3 I 1 I 3 R 1 R 3, onde I k e R k representam inclusões e remoçõe na pilha k. 13. Uma matriz quadrada é dita triangular inferior (superior) se e somente se todos os elementos acima (abaixo) da diagonal principal são zeros (obs: a diagonal principal pertence ao triângulo de elementos possivelmente não nulos). Dadas A n triangular inferior e C n triangular superior, responda às seguintes questões: (a) Qual o número mínimo de elementos nulos em A n e C n? (b) Qual a relação entre i e j para a ij pertencente ao triângulo nulo de A n? (c) Para n muito grande, é conveniente armazenar apenas os termos distintos de zero num vetor. Supondo C n armazenada por colunas em um vetor B, determine f(i, j) tal que valha a identidade C[i, j] = b f(i,j), para C[i, j] fora do triângulo nulo de C n. (d) Qual a economia de espaço obtida armazenando C no vetor B? 14. Sejam A e B duas matrizes triangulares superiores de ordem n. (a) Qual o número total de elementos não nulos nos triângulo superiores. 3

(b) Determine um esquema para armazenar os triângulos superiores de A e B em uma matriz C[1..n, 1..n + 1]. Sugestão: Coloque o triângulo de A como triângulo superior de C e a tranposta de B como triângulo inferior de C. 15. Uma matriz quadrada é dita tridiagonal se e somente se seus elementos não nulos se situam exclusivamente na região formada pela diagonal principal e as duas diagonais diretamente adjacentes (uma acima e outra abaixo da diagonal principal). Determine um esquema para armazenar os elementos possivelmente não nulos de uma matriz tridiagonal A n num vetor B, respondendo: (a) Qual será a dimensão mínima de B? (b) Como determinar o valor de A[i, j] a partir de B? (c) Qual a relação entre i e j para A[i, j] pertencente à banda de elementos possivelmente não nulos de A n? 16. Uma matriz esparsa A com t elementos não nulos poder ser armazenada em uma matriz E t 3 da seguinte forma: As posicões E[0, 0], E[0, 1] e E[0, 2] armazenam o número de linhas, número de colunas e o número de elementos não nulos da matriz A. Os elementos E[i, 0], E[i, 1] e E[i, 2], i = 1,..., t; armazenam os índices de linha, coluna e o valor dos elementos não nulos respectivamente. (a) Armazene a matriz abaixo utilizando a representação acima. 0 0 7 0 0 11 0 8 0 0 0 0 0 3 0 1 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 (b) Quando a representação acima deixa de ser vantajosa em relação ao gasto de memória? 17. Considere duas matrizes esparsas A e B representadas como no exercício anterior. Escreva algoritmos para: (a) Calcular a matriz S = A + B (b) Calcule a matriz T = A t (transposta de A). (c) Qual a complexidade no pior caso para os algoritmos acima? 18. Construa uma estrutura de dados para representar uma matriz esparsa utilizando listas encadeadas. Utilize dois vetores de ponteiros para gerenciar as cabeças das listas de linhas e colunas. Faça uma análise de complexidade de espaço. 4

19. Considere os elementos 10,22,31,4,15,28,17,88,59. Insira estes elementos em uma tabela hash de comprimento m = 11 utilizando a função hash h (x) = x%m. Resolva as colisões com endereçamento aberto utilizando: (a) hash linear (b) hash quadrático h(x, i) = (h (x) + i + 3i)%m (c) hash duplo com h(x, i) = (h (x) + ih 1 (x))%m, onde h 1 (x) = 1 + (x%(m 1)) 20. Suponha que um elemento x deve ser procurado em uma tabela hash com posições {0, 1,..., m 1}. O esquema de procura é o seguinte: 1) Faça i = h(x), j = 0 2) Verifique se o elemento esta na posiç~ao i. Se estiver ou se a posiç~ao for vazia termine a busca sen~ao 3) Faça j = (j + 1)%m e i = (i + j)%m e volte para 2) Mostre que o esquema acima é um exemplo de hash quadrático. 5