Algoritmos e Estruturas de Dados I

Documentos relacionados
MCTA001 Algoritmos e Estruturas de Dados I Aula 02: Ponteiros e estruturas

MCTA028 Programação Estruturada Aula 07: - Mapa de memória de um processo - Ponteiros (parte 1)

MCTA028 Programação Estruturada Aula 09: - Ponteiros (parte 2)

- Mapa de memória de um processo - Ponteiros

Aula 07: - Mapa de memória de um processo - Ponteiros (parte 1)

MCTA028 Programação Estruturada Aula 09: - Ponteiros (parte 2)

Aula 13: Listas encadeadas (estruturas lineares)

Aula 07: Algoritmos de busca e Listas encadeadas

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

Lista Encadeada (Linked List)

Estruturas de Dados I

Algoritmos e Estruturas de dados

Algoritmos e Estruturas de Dados II IEC013

ESTRUTURA DE DADOS VARIÁVEIS E PONTEIROS

Estrutura de Dados. Aula 07 Alocação Dinâmica

Professora Jeane Melo

Ponteiros. Baseado nos slides do Prof. Mauro.

PRIMEIRA AVALIAÇÃO IDENTIFICAÇÃO. Nome: 22/09/2010

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

Estruturas de Dados Estruturas de Dados Fundamentais

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 4: Listas Estáticas e Dinâmicas

LINGUAGEM C: ALOCAÇÃO DINÂMICA

ALOCAÇÃO DINÂMICA DE MEMÓRIA

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

Princípios de Desenvolvimento de Algoritmos MAC122

Aula 02: Custos de um algoritmo e funções de complexidade

Modulo 12: alocação dinâmica de memória

Programação I Ponteiros e alocação dinâmica de memória. Prof. Carlos Alberto

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

Lista de Exercícios sobre Listas Implementadas por Encadeamento

Alocação dinâmica de Memória

Ponteiros e Alocação Dinâmica. Prof. Péricles Miranda

Alocação Dinâmica de Memória

Lista de Exercícios 04

(a) Indique, em português, o que realiza a seguinte função. [4 pontos]

MCTA001 Algoritmos e Estruturas de Dados I. Aula 08 Árvores (parte 1) Laboratório

Algoritmos e Estruturas de Dados I

Linguagem C Ponteiros

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

Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores

Alocação Dinâmica de Memória. Programação II

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

MCTA028 Programação Estruturada Aula 03: - Funções e procedimentos - Vetores e matrizes

LINGUAGEM C: PONTEIROS

Linguagem C: Listas Encadeadas

Vetores e matrizes. MCTA028 Programação Estruturada. Material preparado a partir de slides dos profs. Jesús Mena-Chalco e Fabrício Olivetti

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

Aula 25: Alocação Dinâmica

1. Se v é um vetor, qual a diferença conceitual entre as expressões v[70] e v+70? [2 ponto]

ANHANGUERA ESTRUTURA DE DADOS AULA 06 LISTAS CIRCULARES E DUPLAMENTE ENCADEADAS. Prof. Thomás da Costa

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

Estrutura de Dados Listas

O que é um jogo digital?

Laboratório de Programação II

Programação Computacional Aula 16: Alocação Dinâmica de Memória

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

Matrizes esparsas: definição

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Programação Procedimental GBC /1 Prof. Renan Cattelan Prática 10. Estruturas e alocação dinâmica

Aula 19 Árvores Rubro-Negras

AULA 6. Conceitos. Melhores momentos. Conceitos. Conceitos. Conceitos. Conceitos

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

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

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

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

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

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

Paradigmas de Linguagens

MCTA028 Programação Estruturada Aula 03: - Funções e procedimentos - Vetores e matrizes

Carlos Eduardo Batista. Centro de Informática - UFPB

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

Métodos Computacionais. Listas Encadeadas

Alocação Dinâmica. Introdução à Computação

SCC Algoritmos e Estruturas de Dados I

MC3305 Algoritmos e Estruturas de Dados II. Aula 06 Árvores. Prof. Jesús P. Mena-Chalco.

i a[i]

MC-102 Aula 19 Ponteiros II

INF 1620 P2-01/11/03 Questão 1 Nome:

Aula 13 Árvores Rubro-Negras

Ponteiros e alocação dinâmica de memória. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Estruturas de Dados. Profa. Juliana Pinheiro Campos

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Aula 7 Encadeamento de Memória

Ponteiros. Introdução e Alocação Dinâmica

1. Selecione a Estrutura de Dados que melhor representa os diretórios ou pastas de arquivos do computador.

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

1. Listas sequenciais versus listas ligadas. Lista sequencial

1/36 LISTAS. Programação II

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

Ponteiros & tabelas (cont.) K&R: Capítulo 5

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Aplicações de listas Outras estruturas

Listas Lineares. continuando...

Professor: Jó Ueyama Estagiário PAE: Heitor Freitas

Essencialmente, um ponteiro nada mais é do que uma variável que ao invés de conter um valor, contém um endereço de memória.

Programação Estruturada Prof. Rodrigo Hausen Agregados de Dados Heterogêneos (structs)

Estrutura de Dados. Estrutura de Dados Recursividade. Exemplo: 5! = 5 x 4! 4! = 4 x 3! 3! = 3 X 2! 2! = 2 x 1! 1! = 1 x 0!

Alocação Dinâmica em C

Transcrição:

Algoritmos e Estruturas de Dados I Aula 09 Revisão + Simulado Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 1Q-2019 1

Vetores 2

Vetores 3

Vetores vetor 4

Vetores... vetor... 5

Ponteiros 6

Processo na memória INSTRUÇÕES PILHA (STACK) Armazena o código compilado (na linguagem máquina) Armazena as variáveis ao longo da execução do programa. Espaço de memória principal gerenciado pelo SO. [~bytes] [~Mbytes] [~Toda a memória RAM] Alocação estática int x; double M[10][20]; char *c; HEAP Alocação dinâmica double M = malloc(...); 7

Ponteiros? Processo na memória INSTRUÇÕES PILHA (STACK) HEAP Em Java e Python o uso é transparente. Não precisa se preocupar de alocar e liberar memória 8

Fenômeno: Stack Overflow Processo na memória INSTRUÇÕES PILHA (STACK) HEAP 9

Endereços A memória de qualquer computador (arquitetura de Von Neumann) é uma sequência de bytes. Cada byte armazena um de 256 possíveis valores. Os bytes são numerados sequencialmente e o número de um byte é o seu endereço (*) Fonte: http://codingfox.com/3-1-computer-memory-and-data-representation/ 10

Endereços Em c o endereço de um objeto é dado pelo operador & Se x é uma variável, então &x é o seu endereço int s = -999 int* p = &s p s 0x89422-9999 0x60001 0x89422 p = 0x89422 &p = 0x60001 *p = -9999 p aponta para a s p é o endereço de s p aponta a s *p é o mesmo que escrever s 11

Structs 12

Linguagem C: Tipos de dados Tipos de dados primários. Tipos de dados derivados. Tipos definidos pelo usuário. (*) Fonte: http://www.studytonight.com/c/datatype-in-c.php 13

Por que precisamos saber de structs? Em determinadas aplicações é necessário associar diferentes dados a um objeto. Objeto: Ponto em 3D x y z Ponto 1 Ponto 2 Ponto 3 Ponto 4 Ponto 5... 14

Por que precisamos saber de structs? Podemos usar 3 vetores para armazenar as posições de cada ponto no espaço 3D Vx Vy Vz void plot3d(double Vx[], double Vy[], double Vz[]) {... } 15

Por que precisamos saber de structs? Podemos usar 7 vetores para armazenar as posições de cada ponto no espaço 3D e a sua cor RGB Vx Vy Vz Vr Vg Vb Va void plot3d(double Vx[], double Vy[], double Vz[], ) {... } 16

Por que precisamos saber de structs? Por que não simplificar? Vx Vy void plot3d(struct Ponto3D V[], int n) {... } Vz Vr Vg Vb Va As structs fornecem uma forma simples para programar 17

Estruturas Uma estrutura para armazenar um ponto 3D Uma estrutura para armazenar um ponto 3D e sua cor (RGBA) 18

Maior segmento de reta 2D Crie um programa, na linguagem C, em que dada uma sequência de n pares de números reais, apresente o comprimento do maior segmento de reta. Deve ser obrigatoriamente utilizada a estrutura: struct Ponto2D { double x; double y; }; Exemplo de entrada: 5 11 22 00 33 44 Saída: 5.66 Apresente apenas os 2 primeiros digitos após o ponto decimal Obs.: Não use colchetes. Use apenas ponteiros. 19

Exemplo de segmentos de reta Maior segmento 20

Maior segmento de reta 2D pow(2,2) sqrt(2) 21

Maior segmento de reta 2D 22

Área do Menor Triângulo Crie um programa, na linguagem C, em que dada uma sequência de n (n>=3) pares de números reais, apresente a área do menor triângulo composto por 3 pontos. Deve ser obrigatoriamente utilizada a estrutura: struct Ponto2D { double x; double y; }; Exemplo de entrada: 3 15 15 20 30 28 30 Saída: 60.00 Apresente apenas os 2 primeiros digitos após o ponto decimal Obs.: Não use colchetes. Use apenas ponteiros. 23

Exemplo de triângulos para 4 pontos 24

Área de um triângulo https://www.mathopenref.com/coordtrianglearea.html 25

Área do Menor triângulo 26

Área do Menor triângulo 27

Listas 28

Definição Suporemos que os objetos armazenados nos nós são do tipo int. A estrutura de nós pode ser definida como: 3 7 29

Imprimir uma lista (rec) 30

Busca por um elemento p r Busca (dado um elemento) x x O(n) Se o elemento não existir, na lista, a função devolve NULL. 31

Outros tipos de listas encadeadas: Lista circular p 7-3 4 A última célula aponta para a primeira 0 8 13 32

Outros tipos de listas encadeadas: Lista duplamente encadeada q p 7 9-2 NULL 75 NULL Cada célula contém o endereço da célula anterior e o da seguinte 33

4) Eliminar elemento em uma posição Dado um ponteiro para o primeiro nó de uma lista ligada, e um número inteiro p. Elimine da lista o nó que está na posição p da lista. A função deve devolver um ponteiro ao primeiro elemento da lista. Assuma que a posição p sempre será uma posição válida. Uma posição igual a 0 indica o início da lista. Uma posição igual a 1 indica o nó seguinte ao início da lista e assim por diante. O ponteiro dado pode ser nulo, o que significa que a lista inicial está vazia. Obs.: Deve implementar apenas a função eliminarelementoemumaposicao Entrada Saída Descrição 5 11 22 33 44 55 2 11 22 44 55 Na lista ligada de 5 nós, composta pelos elementos: 11 22 33 44 55 Deve ser eliminado o elemento da posição 2. Resultando a lista: 11 22 44 55 34

4) Eliminar elemento em uma posição 35

5) Inverter uma lista ligada Dado um ponteiro para o primeiro nó de uma lista ligada, crie uma função que permita inverter a ordem na lista. Isto é, as ligações devem ser invertidas. O último elemento da lista deve apontar a NULL. A função deve devolver um ponteiro ao primeiro elemento da lista. O ponteiro dado pode ser nulo, o que significa que a lista inicial está vazia. Obs.: Deve implementar apenas a função inverterlistaligada Entrada Saída Descrição 5 11 22 33 44 55 55 44 33 22 11 A lista ligada de 5 elementos, composta por: 11 22 33 44 55 NULL Deve ser transformada na lista: 55 44 33 22 11 NULL 36

5) Inverter uma lista ligada 37

6) Comparar duas listas ligadas Dados dois ponteiros para os primeiros nós de duas listas ligadas, crie uma função que permita comparar os dados nos nós das listas para verificar se eles são iguais. As listas são iguais apenas se tiverem o mesmo número de nós e os nós correspondentes tiverem os mesmos dados. O ponteiro dado pode ser nulo, o que significa que a lista está vazia. Obs.: Deve implementar apenas a função compararlistasligadas Entrada Saída Descrição 2 11 22 1 11 0 Dadas as duas listas: Lista 1: 11 22 NULL Lista 2: 11 NULL 2 55 66 2 55 66 1 A resposta deve ser 0 dado que são listas diferentes. Dadas as duas listas: Lista 1: 55 66 NULL Lista 2: 55 66 NULL A resposta deve ser 1 dado que são listas iguais. 38

6) Comparar duas listas ligadas 39

7) Valor em uma determinada posição Dado um ponteiro para o primeiro nó de uma lista ligada e um inteiro que representa uma posição p, crie uma função que permita obter o valor do nó dada na posição p, contando de trás para frente. Assuma que a posição p sempre será uma posição válida. Uma posição igual a 0 indica o último elemento da lista. Uma posição igual a 1 indica o penúltimo e assim por diante. O ponteiro dado pode ser nulo, o que significa que a lista está vazia. Obs.: Deve implementar apenas a função valoremposicao Entrada Saída Descrição 5 11 22 33 44 55 1 44 Na lista ligada de 5 elementos, composta por: 11 22 33 44 55 NULL O elemento na posição 1 (de trás para frente) é 44 40

7) Valor em uma determinada posição 41

8) Eliminar elementos duplicados Dado um ponteiro para o primeiro nó de uma lista ligada com elementos organizados na ordem crescente. Crie uma função que permita eliminar o mínimo dos nós para que a lista não contenha nenhum valor repetido. A função deve devolver um ponteiro ao primeiro elemento da lista. O ponteiro dado pode ser nulo, o que significa que a lista está vazia. Obs.: Deve implementar apenas a função eliminarelementosduplicados Entrada Saída Descrição 7 11 22 22 33 44 44 55 11 22 33 44 55 A lista ligada de 7 elementos, composta por: 11 22 22 33 44 44 55 NULL Deve ser transformada na lista: 11 22 33 44 55 NULL 42

8) Eliminar elementos duplicados 43

9) Intercalar duas listas ligadas Dados dois ponteiros para os primeiros nós de duas listas ligadas, crie uma função que permita intercalar os dados nos nós das listas de tal forma a criar uma (nova) terceira lista ligada mas organizada na forma crescente. Os dados em ambas as listas iniciais estão organizados na sua forma crescente. O ponteiro dado pode ser nulo, o que significa que a lista está vazia. Obs.: Deve implementar apenas a função intercalarlistasligadas Entrada Saída Descrição 2 11 44 4 22 33 55 66 11 22 33 44 55 66 Dadas as duas listas: Lista 1: 11 44 NULL Lista 2: 22 33 55 66 NULL 1 99 1 99 99 99 Dadas as duas listas: Lista 1: 99 NULL Lista 2: 99 NULL O resultado de intercalar as duas listas deve ser: 11 22 33 44 55 66 NULL O resultado de intercalar as duas listas deve ser: 99 99 NULL 44

9) Intercalar duas listas ligadas 45

10) Segundo menor elemento Dado um ponteiro para o primeiro nó de uma lista ligada. Crie uma função que permita devolver o valor do segundo menor elemento presente na lista ligada. Considere que a lista inicial sempre terá no mínimo 2 elementos. Obs.: Deve implementar apenas a função segundomenorelemento Entrada Saída Descrição 5 11 99 44 33 66 33 A lista ligada de 5 elementos, composta por: 11 99 44 33 66 NULL 3 44 44 44 44 Tem como segundo menor valor: 33 A lista ligada de 3 elementos, composta por: 44 44 44 NULL Tem como segundo menor valor: 44 46

10) Segundo menor elemento 47

Resumo Listas Listas com com arranjos arranjos ---- Listas Simples Simples para para usar usar Alocação Alocação em em bloco bloco contínuo contínuo Acesso Acesso aa um um item item em em tempo tempo constante constante -- Requer Requer saber saber aa quantidade quantidade de de itens itens previamente previamente (para (para alocação) alocação) -- Inserção/Remoção Inserção/Remoção requer requer deslocamentos deslocamentos -- Expansão Expansão custosa custosa (realocar (realocar ee copiar) copiar) Listas Listas ligadas/encadeadas/enlaçadas ligadas/encadeadas/enlaçadas -- Não Não requer requer conhecer conhecer aa quantidade quantidade de de itens itens previamente previamente -- Inserção Inserção ee remoção remoção não não requer requer deslocamentos deslocamentos -- Acesso Acesso aa uma uma posição posição necessita necessita percorrer percorrer aa lista lista -- Memória Memória extra extra para para os os ponteiros ponteiros

listas e árvores 49

Vetor (array): Elementos contiguos na memória. Todos do mesmo tipo de dado Listas ligadas: Elementos não necessariamente contiguos na memória. Podem ter atributos diferentes. Árvores: Elementos não necessariamente contiguos na memória. Podem ter atributos diferentes. 50

Structs Para uma lista ligada: Para uma lista duplamente ligada e também para uma árvore em que cada nó tenha no máximo 2 ligações: 51

Varredura Como seria a varredura e-r-d? 52

Varredura Na figura abaixo, os nós estão numeradas na ordem da varredura e-r-d. 5 3 1 0 8 4 2 6 9 7 53

Custos de algoritmos 54

O número de comparações, no algoritmos, depende dos inteiros registrados no vetor. No melhor caso: o elemento está na primeira posição No pior caso: o elemento está na última posição ou não está no vetor. No caso médio? 55

Busca de um elemento Seja f uma função de complexidade tal que f(n) é o número de elementos consultados. Melhor caso: Quando o elemento procurado é o primeiro consultado Pior caso: Quando o elemento procurado é o último consultado ou Não está presente no vetor Caso médio: 56

(*) Fonte: http://algs4.cs.princeton.edu/14analysis/ 57

http://bigocheatsheet.com/ 58

Simulado 59

Q1 (a) Devolve a diferença entre o maior e o menor valor presente no vetor V. (b) Para qualquer caso o número de comparações é proporcional a 2n. 60

Q2 61

Q3 62

Q4 63