CAP-241 Computação Aplicada I Aula 5 Estruturas de Dados Elementares Parte I Arranjos, Listas, Pilhas e Filas. Dr. Gilberto Ribeiro de Queiroz

Tamanho: px
Começar a partir da página:

Download "CAP-241 Computação Aplicada I Aula 5 Estruturas de Dados Elementares Parte I Arranjos, Listas, Pilhas e Filas. Dr. Gilberto Ribeiro de Queiroz"

Transcrição

1 CAP-241 Computação Aplicada I Aula 5 Estruturas de Dados Elementares Parte I Arranjos, Listas, Pilhas e Filas Dr. Gilberto Ribeiro de Queiroz São José dos Campos, 14 de Abril de 2016

2 Visão Geral da Aula Estruturas de dados Elementares: Listas. Pilhas. Filas. Árvores. Filas de Prioridade Containers da Biblioteca STL Considerações Finais. Leituras Complementares. Exercícios.

3 Estruturas de Dados Assim como na matemáwca, conjuntos possuem um papel importante na Ciência da Computação: A diferença básica, é que os conjunto manipulados por algoritmos podem crescer ou diminuir com o tempo, ou até mesmo modificar os valores de itens. Conjuntos em computação possuem uma natureza dinâmica. O projeto de algoritmos, quase sempre, depende de algum Wpo de representação para o conjunto de dados, seja ele de entrada ou saída, ou até mesmo um conjunto manwdo de forma temporária durante o processamento do algoritmo. Além disso, cada algoritmo possui seus requisitos na hora de manipular conjuntos.

4 Estruturas de Dados Exemplo: Um famoso algoritmo para computação dos pontos de intersecção entre conjuntos de segmentos de reta, precisa de um conjunto auxiliar para: ü Inserir eventos, que representam pontos extremos dos segmentos ou pontos de intersecção já detectados; ü Obter o evento com menor valor de abscissa (ou ordenada); ü Remover eventos já processados; ü Verificar se um dado evento já se encontra no conjunto.

5 Estruturas de Dados Uma das técnicas fundamentais para construção de bons algoritmos consiste em organizar o conjunto de dados manipulados de forma que as operações sobre esses dados sejam realizadas de forma eficiente. As estruturas de dados são abstrações uwlizadas para organizar os dados de forma a propiciar um uso eficiente por parte dos algoritmos. Estruturas de dados mais elementares para organização dos dados que iremos ver no curso: arranjos, listas, pilhas, filas e árvores. Estas estruturas representam os exemplos clássicos de Wpos abstratos de dados (TAD).

6 Terminologia Básica Os elementos de um conjunto serão representados por objetos, que podem conter diversos atributos. Em algumas situações, assumiremos que um desses atributos possui um papel especial: iden<ficar o objeto chave (key). A chave, em geral, irá pertencer a um conjunto totalmente ordenado: números reais strings (ordem lexicográfica). Essa noção de ordem total é importante pois nos permite definir o menor e maior elementos de um conjunto, o próximo elemento maior que um dado elemento do conjunto. Os objetos podem conter também alguns atributos especiais, uwlizados exclusivamente pelas estruturas de dados.

7 Arranjos (arrays) Um arranjo representa uma quanwdade fixa de elementos de dados que são armazenados de forma conbgua na memória e são acessíveis através de índices.

8 Vetores: são arranjos unidimensionais. Matrizes: são arranjos bidimensionais.

9 Arranjos em Linguagens de Programação Arranjos EstáWcos: Suportados por Wpos primiwvos da linguagem de programação. Este Wpo de arranjo possui um tamanho fixo em tempo de compilação, ou seja, precisamos adivinhar o tamanho do arranjo que precisaremos usar em tempo de compilação. Em C e C++, temos a condição de criar vetores e matrizes mulwdimensionais com essas caracteríswcas. int primos[3] = { 2, 3, 5 }; primos double valores[2][3] = { { 8, 5, 3 }, { 1, 7, 6 } }; valores

10 Arranjos em Linguagens de Programação Arranjos Dinâmicos: Este Wpo de arranjo possui um tamanho fixo, mas que pode ser definido em tempo de execução. Suportados com o uso de funções ou operadores da linguagem capazes de alocar blocos de memória em tempo de execução: Em C temos a família de funções: malloc, calloc, realloc e free. Em C++, temos os operadores new, new[], delete e delete[]. Algumas linguagens oferecem estruturas para representação de matrizes dinâmicas, isto é, uma matriz cuja as dimensões podem ser especificadas em tempo de execução. Já estudamos como funciona a alocação dinâmica de memória em C.

11 Arranjos em Linguagens de Programação Arranjos Dinâmicos: Este Wpo de arranjo possui um tamanho fixo, mas que pode ser definido em tempo de execução. Suportados com o uso de funções ou operadores da linguagem capazes de alocar blocos de memória em tempo de execução: Em C temos a família de funções: malloc, calloc, realloc e free. Em C++, temos os operadores new, new[], delete e delete[]. Algumas linguagens oferecem estruturas para representação de matrizes dinâmicas, isto é, uma matriz cuja as dimensões podem ser especificadas em tempo de execução. Como funciona a alocação dinâmica de memória em C++?

12 Propriedades dos Arranjos Um vetor possui uma organização sequencial implícita, isto é, através da posição que cada elemento ocupa. O i-ésimo elemento de um vetor V, pode ser acessado através da seguinte notação: V[i]. A grande importância da estrutura de dados arranjo é que ela tem uma correspondência com a memória do computador: o código de máquina gerado por um compilador a parwr de um programa em linguagem de alto nível para acesso aos itens é eficiente. comentar exercício E-5.1.

13 Listas (Lists)

14 Listas Uma lista pode ser usada para organizar um conjunto de elementos sequencialmente. elemento Item de dado L I S T A ligações

15 Formas do Encadeamento Encadeamento simples: L I S T A cabeça cauda Encadeamento duplo: L I S T A cabeça cauda

16 TAD Lista: Operações Usuais Um TAD lista pode ser definido através das seguintes operações: ü search(l, k): procura o primeiro elemento com chave k na lista L. ü insert(l, x): insere o elemento x no início da lista L. ü erase(l, x): remove o elemento x da lista L e apaga o item x.

17 TAD Lista: Operações Usuais Outras operações possíveis: ü splice(l 1, L 2 ): emenda os elementos da lista L 2 ao final da lista L 1. ü split(l, x): parte a lista L em duas listas, uma terminando no elemento x e outra começando no elemento x. ü merge(l 1, L 2 ): junta duas listas ordenadas em uma só, também ordenada.

18 TAD Lista: Operações Usuais Outras operações possíveis: ü pred(l, x): retorna o elemento da Lista L que precede o elemento x. ü succ(l, x): retorna o elemento da Lista L que sucede o elemento x.

19 Lista x Vetor Qual a diferença entre uma lista e um vetor?

20 Vantagens x Desvantagens Quais são as vantagens e desvantagens deste Wpo de representação?

21 Lista Encadeada Simples (slist) L I S T A cabeça cauda

22 Lista Encadeada Simples (slist) Implementação por meio de ponteiros. L I S T A cabeça cauda Quais seriam as operações usuais sobre este Wpo de lista?

23 Lista Encadeada Simples (slist) Operações: slist(): construtor de lista vazia. ~slist(): o destrutor da lista irá apagar todos os seus elementos. push_front(v): insere o valor v no início da lista. front(): acessa o primeiro elemento da lista.

24 Lista Encadeada Simples (slist) Operações: insert_after(pos, v): insere o valor v na lista, após o elemento que ocupa a posição pos. erase_after(pos): remove o elemento após o elemento que ocupa a posição pos. find(v): retorna o elemento que contém o valor informado, ou nulo caso não exista um elemento.

25 Lista Encadeada Simples (slist) Operações: clear(): apaga todos os elementos da lista. empty(): retorna verdadeiro se a lista eswver vazia, caso contrário, retorna falso.

26 Obs.: Para não nos complicarmos com os templates por hora, vamos implementar uma lista encadeada simples com números inteiros. Atenção: Uma versão uwlizando templates pode ser encontrada no site do curso: hlp:// estruturas_dados

27 TAD slist: representação interna Cada elemento da lista será representado pela seguinte estrutura: struct item { }; int data; item* next; data 9 next ponteiro p/ próximo item da lista

28 TAD slist: representação interna Por sua vez, a lista será representada por uma classe com um único membro de dados privado: class slist {... private: }; item* head_; head_: ponteiro para a cabeça da lista.

29 TAD slist: definição class slist { public: Estrutura aninhada struct item { int data; item* next; };... };

30 class slist { public: TAD slist: definição... Construtor slist(); ~slist();... Destrutor };

31 class slist { public:... TAD slist: definição void push_front(int v); item* front() const;... };

32 class slist { public:... TAD slist: definição item* insert_after(item* pos, int v); void erase_after(item* pos); item* find(int value) const;... };

33 class slist { public:... void clear(); TAD slist: definição bool empty() const;... };

34 TAD slist: definição class slist {... Tornando estes dois operadores privados, sem fornecer uma implementação, fará com que os objetos slist não possam ser copiáveis private: slist(slist&); slist& operator=(slist&); private: }; item* head_; C++ é uma linguagem onde o idioma de cópia é algo natural, no entanto, demanda extrema atenção do projewsta de uma classe. Você sabe como funciona esse sistema de cópia?

35 Usando o TAD slist slist l; // cria uma lista vazia l.push_front(2); 2 l.push_front(7); 7 2 l.push_front(3); l.push_front(5); l.push_front(9);

36 Usando o TAD slist slist::item* x = l.find(7); head_ if(x) l.erase_after(x); x head_ x

37 x = l.find(5); Usando o TAD slist head_ if(x) x = l.insert_after(x, 8); x head_ x

38 TAD slist: implementação slist(): construtor de lista vazia. slist::slist() : head_(nullptr) { } head_ 0x bits

39 TAD slist: implementação ~slist(): o destrutor da lista irá apagar todos os seus elementos. slist::~slist() { clear(); } head_ head_

40 TAD slist: implementação push_front(int v): insere um elemento no início da lista. void slist::push_front(int v) { head_ = new item{v, head_}; } Lista l contendo 1 elemento l.push_front(7); 7 new item{v, head_}; head_ 2 novo elemento 2 head_ 7 2 head_ = new item{v, head_};

41 TAD slist: implementação front(): acessa o primeiro elemento da lista. slist::item* slist::front() const { return head_; } head_ 7 2

42 TAD slist: implementação insert_after(pos, v): insere um elemento na lista logo após outro elemento. slist::item* slist::insert_after(item* pos, int v) { assert(pos); item* nn = new item {v, pos->next}; pos->next = nn; } return nn;

43 TAD slist: implementação erase_after(item* pos): remove um elemento após o elemento informado. void slist::erase_after(item* pos) { assert(pos && pos->next); item* dn = pos->next; pos->next = dn->next; } delete dn;

44 TAD slist: implementação find(v): retorna o elemento que contém o valor informado, ou nulo caso não exista um elemento. slist::item* slist::find(int v) const { item* i = head_; x = l.find(5); while(i) { head_ 9 if(i->data == v) break; i } } i = i->next; return i; head_ 9 i 5 3 7

45 TAD slist: implementação clear(): apaga todos os elementos da lista. void slist::clear() { while(item* i = head_) { head_ = head_->next; } } delete i;

46 l.clear(); TAD slist: implementação head_ clear(): apaga todos os elementos da lista. i void slist::clear() { while(item* i = head_) { head_ = head_->next; } } delete i; i i i 5 head_ 3 7 head_ 3 7 head_ 3 7 i head_

47 TAD slist: implementação empty(): diz se a lista encontra-se ou não vazia. bool slist::empty() const { return head_ == nullptr; }

48 Qual o espaço de armazenamento da nossa estrutura slist para uma lista contendo n elementos? sizeof(t) = k e sizeof(t*) = v f(n) = n * (k + v) + v supondo k == v, f(n) = k(2n + 1) O(n)

49 Qual a complexidade da operação push_front(v)? O(1)

50 Qual a complexidade da operação front(v)? O(1)

51 Qual a complexidade da operação insert_after(pos, v)? O(1)

52 Qual a complexidade da operação erase_after(pos)? O(1)

53 Qual a complexidade da operação find(v)? O(n)

54 Qual seria a complexidade de uma operação count() que retornasse o número de elementos da lista? Quais estratégia poderíamos uwlizar para implementar esta operação?

55 Se manwvéssemos um ponteiro extra para a cauda da lista, quais outras operações poderíamos ter? Qual o custo delas? push_back?, back?, pop_back?

56 Uma lista encadeada simples nos permite realizar de forma eficiente uma travessia sequencial unidirecional. Quando precisamos de uma estrutura dinâmica que possibilite a travessia bidirecional, uwlizamos listas duplamente encadeadas.

57 Lista Duplamente Encadeada (list) L I S T A cabeça cauda

58 Lista Duplamente Encadeada (list) Implementação por meio de ponteiros. L I S T A cabeça cauda Quais seriam as operações usuais sobre este Wpo de lista?

59 Lista Duplamente Encadeada (list) Operações: list(): construtor de lista vazia. ~list(): o destrutor da lista irá apagar todos os seus elementos. push_front(v): insere o valor v no início da lista. front(): acessa o primeiro elemento da lista.

60 Lista Duplamente Encadeada (list) Operações: next(x): retorna o próximo elemento da lista. previous(x): retorna o elemento anterior ao elemento x na lista. insert(pos, v): insere o valor v na lista, antes do elemento que ocupa a posição pos. erase(x): remove o elemento x.

61 Lista Duplamente Encadeada (list) Operações: find(v): retorna o elemento que contém o valor informado, ou nulo caso não exista um elemento. clear(): apaga todos os elementos da lista. empty(): retorna verdadeiro se a lista eswver vazia, caso contrário, retorna falso.

62 Obs.: Para não nos complicarmos com os templates por hora, vamos implementar uma lista duplamente encadeada para números inteiros. Atenção: Uma versão uwlizando templates pode ser encontrada no site do curso: hlp:// estruturas_dados

63 TAD list: representação interna Cada elemento da lista será representado pela seguinte estrutura: struct item { item* next; item* prev; int data; }; data 9 ponteiro p/ o item anterior ponteiro p/ próximo item da lista

64 TAD list: representação interna Por sua vez, a lista será representada por uma classe com um único membro de dados privado: class list {... private: }; item* head_; head_: ponteiro para a cabeça da lista.

65 TAD list: definição class list { public: Estrutura aninhada }; struct item { item* next; item* prev; int data; };...

66 TAD list: definição class list { public:... Construtor list(); ~list();... Destrutor };

67 TAD list: definição class list { public:... item* next(item* x) const; item* previous(item* x) const;... };

68 TAD list: definição class list { public:... void push_front(int v); item* front() const;... };

69 TAD list: definição class list { public:... item* insert(item* pos, int v); void erase(item* x); item* find(int value) const;... };

70 TAD list: definição class list { public:... void clear(); bool empty() const;... };

71 TAD list: definição class list {... Tornando estes dois operadores privados, sem fornecer uma implementação, fará com que os objetos list não possam ser copiáveis private: list(list&); list& operator=(list&); private: }; item* head_;

72 Usando o TAD list list l; // cria uma lista vazia l.push_front(2); l.push_front(7); l.push_front(3); l.push_front(5); l.push_front(9);

73 Usando o TAD list list::item* x = l.find(7); if(x) l.erase(x);

74 x = l.find(5); Usando o TAD list if(x) x = l.insert(x, 8);

75 TAD list: implementação list(): construtor de lista vazia. list::list() : head_(nullptr) { }

76 TAD list: implementação ~list(): o destrutor da lista irá apagar todos os seus elementos. list::~list() { clear(); }

77 TAD list: implementação next(item* x): retorna o elemento seguinte ao elemento x na lista. list::item* list::next(item* x) const { return x->next; }

78 TAD list: implementação previous(item* x): retorna o elemento anterior ao elemento x na lista. list::item* list::previous(item* x) const { return x->prev; }

79 TAD list: implementação push_front(int v): insere um elemento no início da lista. void list::push_front(int v) { item* nn = new item{head_, nullptr, v}; if(head_) head_->prev = nn; } head_ = nn;

80 TAD list: implementação front(): acessa o primeiro elemento da lista. list::item* list::front() const { return head_; }

81 TAD list: implementação insert(item* pos, int v): insere um elemento na lista antes de outro elemento. list::item* list::insert(item* pos, int v) { assert(pos); item* nn = new item {pos, pos->prev, v}; pos->prev = nn; if(nn->prev) nn->prev->next = nn; else head_ = nn; } return nn;

82 TAD list: implementação erase(item* x): remove o elemento informado. Void list::erase(item* x) { assert(x); if(x->prev) x->prev->next = x->next; else head_ = x->next; if(x->next) x->next->prev = x->prev; } delete x;

83 TAD list: implementação find(v): retorna o elemento que contém o valor informado, ou nulo caso não exista um elemento. list::item* list::find(int v) const { item* i = head_; while(i) { if(i->data == v) break; } i = i->next; } return i;

84 TAD list: implementação clear(): apaga todos os elementos da lista. Void list::clear() { while(item* i = head_) { head_ = head_->next; } } delete i;

85 TAD list: implementação empty(): diz se a lista encontra-se ou não vazia. bool list::empty() const { return head_ == nullptr; }

86 Qual o espaço de armazenamento da nossa estrutura list para uma lista com n elementos? sizeof(t) = k e sizeof(t*) = v f(n) = n * (k + 2v) + v supondo k == v, f(n) = k(3n + 1) O(n)

87 Listas: Considerações Finais

88 Ordem dos Elementos Se os elementos da lista encontram-se ordenados, a ordem linear da lista corresponde à ordem da chave do elemento de dados: O menor elemento corresponde ao elemento da cabeça da lista. O maior elemento corresponde ao elemento da cauda.

89 Travessia Bidirecional Acrescentando um ponteiro para a cauda da lista (tail_), numa lista duplamente encadeadas, poderíamos: realizar uma travessia por qualquer uma das extremidades da lista Acrescentar operações para inserção e remoção ao final da lista.

90 Listas Circulares Listas Encadeada Simples: Podemos adotar a convenção de que a ligação (ponteiro) do úlwmo nó aponte para o primeiro nó da lista head_ Listas Duplamente Encadeadas: A ligação para o próximo nó do úlwmo elemento aponta para o primeiro; e a ligação do elemento anterior no caso do primeiro elemento aponta para o úlwmo. head_ tail_

91 Outras Estratégias de Implementação Elemento SenWnela: Podemos uwlizar alguns objetos especiais, conhecidos como dummy ou sen.nelas, para facilitar a implementação das listas. Neste caso criamos um elemento extra que pode simplificar a escrita das operações. Devemos uwlizar este recurso com bastante cuidado pois em uma aplicação com um grande número de pequenas listas esse espaço extra pode penalizar o sistema.

92 Outras Estratégias de Implementação Implementação de listas por meio de arranjos: Implementação por meio de vetores paralelos.

93 Implementação: vetores paralelos items next Primeiro Item: items[next[head]] Segundo Item: items[next[next[head]]] spare: marcador do próximo espaço vago. dummy: marcador especial do final da lista head 0 dummy 1 spare 6 cabeça cauda

94 Você já pensou num bom uso para a abstração de listas por meio de arranjos? free list Alocação Dinâmica de Memória

95 Listas em Linguagens de Programação Em algumas linguagens de programação esta estrutura de dados é um Wpo primiwvo da linguagem: Lisp, Python, Haskell. Em C++, temos esta estrutura por meio da biblioteca STL, escrita com o próprio core da Linguagem C++: std::list, std::forward_list

96 Quizz Qual o resultado da seguinte operação: sizeof(list::item)? Cuidado: alinhamento e padding das estruturas!

97 Pilhas (Stacks) Uma pilha nada mais é do que uma lista onde as inserções, remoções e acessos ocorrem sempre em uma única extremidade.

98 Pilhas: operações Um TAD pilha pode ser definido através das seguintes operações: push: insere um novo item no topo da pilha. pop: remove um item do topo da pilha. top: retorna o elemento no topo da pilha push(p) P push(i) P I A H L I P pop() H L I P

99 Qual a políwca de acesso implementada por uma pilha? Uma pilha implementa uma políwca do Wpo: o úlwmo a entrar será o primeiro a sair last in, first out (LIFO).

100 Quais são os usos da estrutura de dados pilha?

101 A Linguagem Lua e o uso de Pilhas Exemplo.lua c = terralib.coord2d:new(1.0, 2.0) x = c:getx() void lua_pop (lua_state *L, int n): pops n elements from the stack. Ligação Lua<->C++: coord2d.cpp void lua_pushnumber (lua_state *L, lua_number n): pushes a float with value n onto the stack. static int Coord2D_getX(lua_State* L) { te::gm::coord2d* c = *(te::gm::coord2d**)lua_touserdata(l, 1); lua_pushnumber(l, c->x); return 1; }

102 Como podemos implementar uma estrutura de dados pilha? Vetores Apontadores

103 Pilha: implementação por meio de vetor Esta implementação demanda: Um vetor para os itens. Marcador do topo da pilha Número Máximo de Itens topo 5 tamanho 6 itens 6 5 A 4 H 3 L 2 I 1 P

104 Discussão Aula 31/03/2015 stack.hpp: implementação de pilhas em C/C++ através de vetores.

105 Pilhas: implementação por meio de apontadores topo item próximo A Atenção: esta representação está usando um elemento senwnela ou dummy ou nil. T S I L

106 Qual a complexidade das operações sobre uma pilha? push: insere um novo item no topo da pilha. O(1) pop: remove um item do topo da pilha. O(1) top: retorna o elemento no topo da pilha. O(1)

107 Filas (Queues) Uma fila nada mais é do que uma lista onde as inserções são feitas numa extremidade e as remoções ocorrem na outra extremidade.

108 Filas: operações Um TAD fila pode ser definido através das seguintes operações: enqueue: enfileira um novo item. dequeue: remove um item do início da fila. first: retorna o primeiro elemento da fila A L A enqueue(f) F I enqueue(i) F I F L dequeue() I

109 Qual a políwca de acesso implementada por uma fila? Uma fila implementa uma políwca em que o elemento a ser removido é sempre aquele que entrou primeiro, ou seja, o primeiro a entrar será o primeiro a sair first in, first out (FIFO). => ordem de chegada!

110 Quais são os usos da estrutura de dados fila?

111 Como podemos implementar uma estrutura de dados fila? Vetores x Apontadores

112 Filas: implementação por meio de arranjos Esta implementação demanda três variáveis: Um vetor para os itens. Um marcador do incio da fila e outro do final. Invariantes: head_ == tail_ => fila vazia head_ == tail_ + 1 => fila cheia Obs.: Nossa fila será circular! head_ 0 tail_ 4 size_ 6 q_ F I L A

113 Filas: implementação por meio de arranjos Qual o couidado especial que devemos ter para diswnguir fila cheia de fila vazia? Invariantes: head_ == tail_ => fila vazia head_ == tail_ + 1 => fila cheia Obs.: Nossa fila será circular! head_ 0 tail_ 4 size_ 6 q_ F I L A

114 Operação: Enfileira void queue::enqueue(char c) { std::size_t pos = (tail_ + 1) % size; if(pos == head_) throw std::logic_error("queue overflow!"); q_[tail_] = c; } tail_ = pos;

115 Operação: Desenfileira char queue::dequeue() { if(head_ == tail_) throw std::logic_error("queue underflow!"); char c = q_[head_]; head_ = (head_ + 1) % size; } return c;

116 Filas: implementação por meio de arranjos head_ 0 tail_ enqueue('g') head_ 0 tail_ G enqueue('i') head_ 0 tail_ G I

117 Filas: implementação por meio de arranjos head_ 0 tail_ G I enqueue('l') head_ 0 tail_ G I L enqueue('b') head_ 0 tail_ G I L B

118 Filas: implementação por meio de arranjos head_ 0 tail_ G I L B enqueue('e') head_ 0 tail_ G I L B E enqueue('r') (tail_ + 1) % size_ == head_ => Fila Cheia! Obs.: Nossa fila terá no máximo n - 1 elementos!

119 Filas: implementação por meio de arranjos head_ 0 tail_ dequeue() head_ == tail_ => Fila Vazia!

120 Filas: implementação por meio de arranjos head_ 0 tail_ G I L B E dequeue() head_ 1 tail_ G I L B E dequeue() head_ 2 tail_ G I L B E

121 Filas: implementação por meio de arranjos head_ 2 tail_ G I L B E dequeue() head_ 3 tail_ G I L B E dequeue head_ 4 tail_ G I L B E

122 Filas: implementação por meio de arranjos head_ 4 tail_ G I L B E dequeue() head_ 5 tail_ G I L B E dequeue head_ == tail_ => Fila Vazia!

123 Filas: implementação por meio de arranjos head_ 4 tail_ G I L B E enqueue('r') head_ 4 tail_ G I L B E R enqueue('t') head_ 4 tail_ T I L B E R

124 Discussão queue.hpp: implementação de filas em C++ através de vetores.

125 Filas: implementação por meio de apontadores head item próximo F I tail L L

126 Discussão lqueue.hpp: implementação de filas em C++ através de apontadores.

127 Qual a complexidade das operações sobre uma fila? enqueue: enfileira. O(1) dequeue: desenfileira. O(1) first: retorna o elemento do início da fila. O(1)

128 Considerações Finais

129 Considerações Finais As estruturas vistas nesta aula possuem ampla aplicação na Ciência da Computação. DiscuWremos diversos algoritmos nas próximas aulas que precisarão do apoio dessas estruturas. Também iremos aprofundar nas estruturas de dados de árvores. O projeto da biblioteca STL de C++ é um dos melhores exemplos do uso de técnicas de programação e paradigmas para desenvolvimento de estruturas de dados genéricas eficientes.

130 Considerações Finais Alexander Stepanov Meng Lee David Musser ProjeWstas e Desenvolvedores da biblioteca C++ Standard Template Library (STL)

131 Referências Bibliográficas

132 Referências Bibliográficas CORMEN, T.H.; LIESERSON, C.E.; RIVEST, R.L.; STEIN, C. Introduc<on to Algorithms. 2ª Edição. Mit Press, HOROWITZ, E.; SAHNI, S.; RAJASEKARAN, S. Computer Algorithms. 1ª Edição. Computer Science Press, p. ZIVIANI, N. Projeto de Algoritmos: com implementações em PASCAL e C. 2ª Edição. Editora Thomson, p.

133 Referências Bibliográficas IERUSALIMSCHY, R.; FIGUEIREDO, L. H.; CELES, W. Passing a Language through the Eye of a Needle. ACM Queue, v. 9, n. 5, maio, pp , RAYMOND, E. S. The Lost Art of C Structure Packing. Online. Disponível em: <hlp:// Acesso: 12 de Abril de SAKS, D. Padding and Rearranging Structure Members. Dr. Dobb s, 19 set Online. Disponível em: hlp:// Acesso: 12 de Abril de 2016.

134 Referências Bibliográficas Al Stevens Interviews Alex Stepanov. Dr. Dobb's Journal. Online. Disponível em: < hlp:// Acesso: 12 de Abril de 2016.

135 Exercícios

136 Exercícios E-5.1. Em C e C++ existe alguma diferença práwca em usar laços que processem uma matriz pelas linhas ou pelas colunas? E-5.2. Se estendermos a pergunta do exercício E-5.1 aos compiladores Fortran, qual seria a resposta?

137 Exercícios E-5.3. ParWndo da implementação de listas encadeadas simples (slist), disponível no site do curso, acrescente as seguintes operações: remove(v): remove da lista o primeiro elemento a conter o valor v. Qual a complexidade desta operação? splice_after(pos, L): transfere os elementos da lista L para a lista operada, colocando os elementos de L após a posição pos. A lista L ficará vazia ao final. O tempo desta operação deverá ser O(k), onde k representa o número de elementos da lista L. reverse(): inverte a ordem dos elementos da lista em tempo O(n). Atenção: Existem duas versões da lista encadeada simples: uma para números inteiros e outra para Wpos gerais usando templates. Se você optar pela lista de inteiros, terá que trocar a implementação pelo Wpo char.

138 Exercícios E-5.4. Implemente uma lista duplamente encadeada por meio de apontadores. Esta lista deverá possibilitar: Recuperar o primeiro elemento (front). Recuperar o úlwmo elemento (back). Recuperar o sucessor do elemento x (next). Recuperar o antecessor do elemento x (previous). Inserir na cabeça da lista (push_front). inserir na cauda (push_back). inserir antes de uma posição específica x (insert). Remover um elemento específico (erase). Remover o primeiro elemento (pop_front). Remover o úlwmo elemento (pop_back). Fundir os elementos de uma lista L 2 ao final da lista L 1 (splice). ParWcionar uma lista L em duas listas, uma terminando no elemento x e outra começando no elemento x (split). Reverter os elementos da lista (reverse). Juntar duas listas ordenadas em uma só, também ordenada (merge). Limpar a lista (clear). Dizer se a lista é ou não vazia (empty). Atenção: Existem duas versões da lista duplamente encadeada: uma para números inteiros e outra para Wpos gerais usando templates. Nenhuma delas suporta todas essas operações.

139 Exercícios E-5.5. UWlizar o TAD Pilha para implementar uma calculadora aritméwca com notação polonesa. Você deverá ler uma expressão na forma de string com a notação infixa e transformá-la em uma string com a notação pós-fixa. A parwr da notação pós-fixa, use uma pilha para te ajudar a implementar a avaliação da expressão. Considere apenas as operações aritméwcas básicas. Ex: Entrada: 5 * (((9 + 8) * (4 * 6)) + 7) Transformação: * * 7 + *

140 Exercícios Especiais A entrega não é obrigatória!

141 Exercícios Especiais E-5.6. Uma pilha permite inserir e remover elementos apenas numa extremidade (topo da pilha). Uma fila permite inserir em uma extremidade (cauda) e remover da outra (cabeça). Projete e implemente um deque (double-ended queue) por meio de arranjos, de forma a permiwr inserções e remoções nas duas extremidas. As quatro operações para inserir e remover elementos dos dois lados do deque devem ter complexidade O(1).

142 Exercícios Especiais E-5.7. Projete um alocador de memória em C uwlizando listas de espaço vazio. Sua API deve ser formada pelas seguintes funções: void *my_malloc(unsigned nbytes): Aloca um bloco de nbytes e retorna um ponteiro para o início do bloco; void my_free(void *ap): Libera um bloco de memória. void print_available_mem(): Imprime na tela a lista de blocos vazios:

143 Exercícios Especiais E-5.8. Projete um alocador de memória para pequenos objetos em C++. Os blocos de memória gerenciados devem ser de tamanho fixo e compa veis com o tamanho do objeto que uwlizará esse alocador. Dica: além do projeto do alocador, você terá que sobrecarregar os operadores new, new[], delete e delete[] na classe de seus objetos.

144 Fim!

Estrutura de Dados: Aula 3 - Linguagem C

Estrutura de Dados: Aula 3 - Linguagem C Estrutura de Dados: Aula 3 - Linguagem C Uso de Memória Alocação de memória Estática Ocorre em tempo de compilação no momento em que se define uma variável ou estrutura é necessário que se definam seu

Leia mais

Algoritmos e Estruturas de Dados 2005/2006

Algoritmos e Estruturas de Dados 2005/2006 Pilhas e Filas Algoritmos e Estruturas de Dados 005/006 Pilhas Pilha estrutura de dados linear em que a inserção e a remoção de elementos de uma sequência se faz pela mesma extremidade, designada por topo

Leia mais

Algoritmos e Estruturas de Dados 2007/2008

Algoritmos e Estruturas de Dados 2007/2008 Pilhas e Filas Algoritmos e Estruturas de Dados 007/008 Pilhas Pilha estrutura de dados linear em que a inserção e a remoção de elementos de uma sequência se faz pela mesma extremidade, designada por topo

Leia mais

Algoritmos e Estruturas de Dados

Algoritmos e Estruturas de Dados Pilhas e Filas Algoritmos e Estruturas de Dados 009/00 Obs: slides marcados com (*) não foram apresentados na aula teórica, mas são parte da bibliografia a estudar! Pilhas Pilha estrutura de dados linear

Leia mais

IV Escola de Inverno Maratona de Programação UNIFEI Intermediário I

IV Escola de Inverno Maratona de Programação UNIFEI Intermediário I IV Escola de Inverno Maratona de Programação UNIFEI 2016 Intermediário I C++ STL - Standard Template Library C++ STL A STL (Standard Template Library) é uma biblioteca de algoritmos e estruturas de dados

Leia mais

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

Pilhas. ser acessada somente por uma de suas extremidades. pelo topo. S Uma pilha é uma estrutura linear de dados que pode Pilhas e Filas Pilhas Uma pilha é uma estrutura linear de dados que pode ser acessada somente por uma de suas extremidades. Uma pilha é uma lista LIFO (do inglês last-in-first out) o último a entrar é

Leia mais

Estruturas de Dados - Filas

Estruturas de Dados - Filas Estruturas de Dados - Filas Leandro Tonietto ltonietto@unisinos.br Algoritmos e Estruturas de Dados em C++ Unisinos http://www.inf.unisinos.br/~ltonietto/jed/aed/filas.pdf Abr-8 Uma fila (queue) é uma

Leia mais

Estruturas de Dados Encadeadas

Estruturas de Dados Encadeadas CURSO: Ciência da Computação DATA: / / 2016 PERÍODO: 4 o. PROFESSOR: Andrey DISCIPLINA: Técnicas Alternativas de Programação AULA: 14 APRESENTAÇÃO Na aula de hoje vamos apresentar e discutir conceitos

Leia mais

Estruturas de Dados Filas

Estruturas de Dados Filas Estruturas de Dados Filas Roteiro Introdução Definição de Fila (Queue) Aplicações Operações sobre Fila Implementação de Fila Com vetores Com listas encadeadas Exercícios Introdução Estamos acostumados

Leia mais

Estrutura de Dados Listas

Estrutura de Dados Listas Universidade Federal da Paraíba Centro de Informática Departamento de Informática Estrutura de Dados Listas 1 Tiago Maritan tiago@ci.ufpb.br Conteúdos Abordados O Conceito de Listas Listas com Representação

Leia mais

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

Pilhas e Filas. Nádia Félix e Hebert Coelho Pilhas e Filas Nádia Félix e Hebert Coelho Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura de Dados Série de Livros Didáticos - Informática - UFRGS Pilhas e filas Listas lineares

Leia mais

PCC104 - Projeto e Análise de Algoritmos

PCC104 - Projeto e Análise de Algoritmos PCC104 - Projeto e Análise de Algoritmos Marco Antonio M. Carvalho Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade Federal de Ouro Preto 27 de setembro de 2018 Marco Antonio

Leia mais

Recursividade UFOP 1/48

Recursividade UFOP 1/48 BCC 201 - Introdução à Programação I Recursividade Guillermo Cámara-Chávez UFOP 1/48 Introdução I Recursividade: é um método de programação no qual uma função pode chamar a si mesma Muitas estruturas têm

Leia mais

Estruturas de Dados - STL

Estruturas de Dados - STL Estruturas de Dados - STL Baseada na apresentação do prof. João Bittencourt Leandro Tonietto ltonietto@unisinos.br Algoritmos e Estruturas de Dados em C++ Unisinos http://www.inf.unisinos.br/~ltonietto/jed/aed/estruturadados-stl.pdf

Leia mais

Aplicações de listas e outras estruturas

Aplicações de listas e outras estruturas 19/1/11 Aplicações de listas e outras estruturas SCC- Algoritmos e Estruturas de Dados I Prof. Thiago A. S. Pardo Grandes números Problema: lidar com números muito grandes Em C, inteiros (mesmo long int)

Leia mais

PCC104 - Projeto e Análise de Algoritmos

PCC104 - Projeto e Análise de Algoritmos PCC104 - Projeto e Análise de Algoritmos Marco Antonio M. Carvalho (baseado nas notas de aula do prof. Túlio A. M. Toffolo) Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade

Leia mais

Estruturas de Dados Pilhas, Filas, Listas

Estruturas de Dados Pilhas, Filas, Listas Estruturas de Dados Pilhas, Filas, Listas Fabio Gagliardi Cozman Thiago Martins PMR3201 Escola Politécnica da Universidade de São Paulo Estruturas de Dados Pilhas, Filas, Listas Introdução Estruturas de

Leia mais

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

CES-11. Pilhas Definição Operações Filas. Operações Deques. Definição. Operações CES-11 Pilhas Definição Operações Filas Definição Operações Deques Definição Operações PILHAS, FILAS E DEQUES As listas lineares admitem inserção e eliminação em qualquer posição. Pilhas, filas e deques

Leia mais

Capítulo 8: Abstrações de dados

Capítulo 8: Abstrações de dados Capítulo 8: Abstrações de dados Ciência da computação: Uma visão abrangente 11a Edition by J. Glenn Brookshear Copyright 2012 Pearson Education, Inc. Estruturas de dados básicas Matriz homogênea Matriz

Leia mais

S U M Á R I O. Definição de Estrutura de Dados. Vetores. Listas Ligadas. Pilhas. Filas

S U M Á R I O. Definição de Estrutura de Dados. Vetores. Listas Ligadas. Pilhas. Filas ESTRUTURA DE DADOS DEBORAH FERREIRA S U M Á R I O Definição de Estrutura de Dados 1 Vetores 2 Listas Ligadas 4 Pilhas 6 Filas 8 D E F I N I Ç Ã O D E E S T R U T U R A D E D A D O S Estruturas de dados

Leia mais

Lista de Exercícios sobre Listas Implementadas por Encadeamento

Lista de Exercícios sobre Listas Implementadas por Encadeamento Lista de Exercícios sobre Listas Implementadas por Encadeamento 1) 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

Leia mais

Estruturas de Dados Pilhas, Filas, Listas

Estruturas de Dados Pilhas, Filas, Listas PMR2300 Escola Politécnica da Universidade de São Paulo Introdução Estruturas de dados são objetos que armazenam dados de forma eficiente, oferecendo certos serviços para o usuário (ordenação eficiente

Leia mais

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

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB Estrutura de Dados Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Listas e Filas Estruturas de Dados 2 Estrututuras de dados lineares Pilhas (stack) Estrutura de dados onde a inserção

Leia mais

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

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 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 Tópicos Introdução Alocação sequencial Listas lineares,

Leia mais

ASSOCIAÇÃO PARAIBANA DE ENSINO RENOVADO FACULDADE PARAIBANA DE PROCESSAMENTO DE DADOS ESTRUTURA DE DADOS

ASSOCIAÇÃO PARAIBANA DE ENSINO RENOVADO FACULDADE PARAIBANA DE PROCESSAMENTO DE DADOS ESTRUTURA DE DADOS ASSOCIAÇÃO PARAIBANA DE ENSINO RENOVADO FACULDADE PARAIBANA DE PROCESSAMENTO DE DADOS ESTRUTURA DE DADOS INTRODUÇÃO O que é uma Estrutura de Dados (ED)?? Tipos de Dados? Estruturas de Dados e? Tipos Abstratos

Leia mais

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

Aplicações de listas e outras estruturas. SCC-502 Algoritmos e Estruturas de Dados I Aplicações de listas e outras estruturas SCC-52 Algoritmos e Estruturas de Dados I Grandes números Problema: lidar com números muito grandes Em C, inteiros (mesmo long int) são limitados Como somar números

Leia mais

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

Aula 7 e 8 Filas e suas Aplicações. Prof. Leticia Winkler Aula 7 e 8 Filas e suas Aplicações Prof. Leticia Winkler 1 Definição de Fila (Queue) São estruturas de dados do tipo FIFO (first-in first-out) - o primeiro elemento a ser inserido, será o primeiro a ser

Leia mais

Aplicações de listas Outras estruturas

Aplicações de listas Outras estruturas Aplicações de listas Outras estruturas SCC-22 Algoritmos e Estruturas de Dados I Lucas Antiqueira Grandes números 2 Grandes números Problema: lidar com números muito grandes Em C, inteiros (mesmo long

Leia mais

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

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta Algoritmos e Estruturas de Dados Prof. Marcelo Zorzan Profa. Melissa Zanatta Assuntos da Aula Alocação de Memória Alocação estática de memória Alocação dinâmica de memória Malloc, Calloc, Free, Realloc

Leia mais

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

Aplicações de listas e outras estruturas. SCC-502 Algoritmos e Estruturas de Dados I Aplicações de listas e outras estruturas SCC-52 Algoritmos e Estruturas de Dados I Grandes números Problema: lidar com números muito grandes Em C, inteiros (mesmo long int) são limitados Como somar números

Leia mais

O container vector funciona como um vetor comum, ou seja, os blocos de objetos estão contíguos, permitindo acesso aleatório.

O container vector funciona como um vetor comum, ou seja, os blocos de objetos estão contíguos, permitindo acesso aleatório. Capítulo 29 class O container vector vai ser apresentado em detalhes. Os demais containers serão apresentados de uma forma simplificada, pois as suas características são semelhantes a vector.

Leia mais

Lista de Exercícios 04

Lista de Exercícios 04 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)

Leia mais

INF Estruturas de dados avançadas. Standard Template Library

INF Estruturas de dados avançadas. Standard Template Library INF1010 - Estruturas de dados avançadas Introdução a C++ Standard Template Library PUC-Rio 2 de maio de 2018 Standard Template Library (STL) Biblioteca de classes e algoritmos parte da biblioteca padrão

Leia mais

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

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35 Lista Ordenada Estrutura de Dados Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35 Conteúdo Definição Operações Representações Contígua Encadeada Aplicação Exercícios 2

Leia mais

Algoritmos e Estruturas de Dados I

Algoritmos e Estruturas de Dados I 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

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 17 a Aula Tipos abstratos

Pedro Vasconcelos DCC/FCUP. Programação Funcional 17 a Aula Tipos abstratos Programação Funcional 17 a Aula Tipos abstratos Pedro Vasconcelos DCC/FCUP 2014 Tipos concretos Até agora definimos um novo tipo de dados começando por listar os seus construtores. data Bool = False True

Leia mais

Programação Funcional 13 a Aula Tipos abstratos

Programação Funcional 13 a Aula Tipos abstratos Programação Funcional 13 a Aula Tipos abstratos Sandra Alves DCC/FCUP 2018/19 Tipos concretos Até agora definimos um novo tipo de dados começando por listar os seus construtores. data Bool = False True

Leia mais

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

Filas. Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing, Filas Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing, pelo uso da CPU Algoritmos e Estruturas de Dados I José

Leia mais

Pilhas e Filas. Algoritmos e Estruturas de Dados Flavio Figueiredo (http://flaviovdf.github.io)

Pilhas e Filas. Algoritmos e Estruturas de Dados Flavio Figueiredo (http://flaviovdf.github.io) Pilhas e Filas Algoritmos e Estruturas de Dados 2 2017-1 Flavio Figueiredo (http://flaviovdf.github.io) 1 Pilhas 2 Pilhas (Stack) Estrutura similar às listas lineares que vimos na última aula [Mais Simples]

Leia mais

TCC Prof.: Leandro A. F. Fernandes Conteúdo: Listas Lineares

TCC Prof.: Leandro A. F. Fernandes  Conteúdo: Listas Lineares Programação de Computadores II TCC 00.174 Prof.: Leandro A. F. Fernandes www.ic.uff.br/~laffernandes Conteúdo: Material elaborado pelos profs. Anselmo Montenegro e Marcos Lage com contribuições do prof.

Leia mais

Standard Template Library (STL)

Standard Template Library (STL) Standard Template Library (STL) BCC 221 - Programação Orientada a Objectos(POO) Guillermo Cámara-Chávez Departamento de Computação - UFOP Introdução Considerando a utilidade do reuso de software e também

Leia mais

Laboratório de programação II

Laboratório de programação II Laboratório de programação II Standard Template Library (STL) Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Standard Template Library Biblioteca padronizada de funções Oferece um

Leia mais

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

Estrutura de Dados. Aula 07 Alocação Dinâmica Estrutura de Dados Aula 07 Alocação Dinâmica 2 ALOCAÇÃO DINÂMICA Existem três modos de reservar espaço de memória para o armazenamento de informações: 1ª - através do uso de variáveis globais (e estáticas).

Leia mais

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA ESTRUTURAS DE DADOS E ALGORITMOS 1 LISTA LIGADA Adalberto Cajueiro Departamento de Sistemas e Computação Universidade Federal de Campina Grande LISTA LIGADA (LINKED LIST) É uma estrutura de dados em que

Leia mais

Análise de Algoritmos

Análise de Algoritmos Análise de Algoritmos Análise de operações em struturas de dados lineares Profa. Sheila Morais de Almeida DAINF-UTFPR-PG março - 2016 Pilhas e Filas Pilhas e filas são estruturas onde os elementos a serem

Leia mais

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I BCC202 - Estrutura de Dados I Aula 08: Listas (Parte 1) ASN Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Material elaborado com base nos slides do Prof. Reinaldo Fortes (curso

Leia mais

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

Fila e Deque. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Fila e Deque SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências

Leia mais

Programação Orientada a Objetos II JAVA Décima Aula. Prof. Rogério Albuquerque de Almeida

Programação Orientada a Objetos II JAVA Décima Aula. Prof. Rogério Albuquerque de Almeida Programação Orientada a Objetos II JAVA Décima Aula Prof. Rogério Albuquerque de Almeida 1 Programação Orientada a Objeto II Introdução à Estruturas de Dados Alocação Dinâmica Listas, pilhas e filas Construção

Leia mais

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I Pilhas e Filas Encadeadas Algoritmos e Estruturas de Dados I Pilha Lista linear: pilha Represente graficamente o funcionamento da pilha, representando a pilha vazia, a entrada e a saída de elementos Quais

Leia mais

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

Tipos e Estruturas de Dados Profa. Graça Nunes Lista de Exercícios (Listas Encadeadas, Duplamente Encadeadas e Circulares) Tipos e Estruturas de Dados Profa. Graça Nunes Lista de Exercícios (Listas Encadeadas, Duplamente Encadeadas e Circulares) 1. Refaça todos os itens do exercício 1 da Lista de Exercícios anterior (Listas

Leia mais

Bit (Binary Digit) é a menor unidade de armazenamento de informação dentro do computador; Byte é a união de 8 bits capaz de representar 256

Bit (Binary Digit) é a menor unidade de armazenamento de informação dentro do computador; Byte é a união de 8 bits capaz de representar 256 Bit (Binary Digit) é a menor unidade de armazenamento de informação dentro do computador; Byte é a união de 8 bits capaz de representar 256 informações diferentes; Tipos Primitivos são implementados nas

Leia mais

FICHA 8 PILHAS E FILAS

FICHA 8 PILHAS E FILAS ESTRUTURAS DE DADOS E ALGORITMOS Departamento de Engenharia Eletrotécnica e de Computadores Faculdade de Ciências e Tecnologia da Universidade de Coimbra FICHA 8 PILHAS E FILAS 8.1. Objetivos Objetivos

Leia mais

Instituto Luterano de Ensino Superior de Ji-Paraná Curso Bacharelado em Informática Estrutura de Dados I Prof.: José Luiz A.

Instituto Luterano de Ensino Superior de Ji-Paraná Curso Bacharelado em Informática Estrutura de Dados I Prof.: José Luiz A. 1 Instituto Luterano de Ensino Superior de Ji-Paraná Curso Bacharelado em Informática Prof.: José Luiz A. Duizith Procedimento Insere_Esquerda (Lista,Valor) Aloque(Aux) Se (Aux = Nil) Senao Aux.Dado Valor

Leia mais

Prova 2 PMR3201 1o. semestre 2015 Prof. Thiago Martins

Prova 2 PMR3201 1o. semestre 2015 Prof. Thiago Martins Prova PMR0 o semestre 0 Prof Thiago Martins Instruções: Escreva o nome e o número USP na folha de papel almaço ( pontos) Uma árvore binária de busca é uma árvore binária na qual para qualquer sub-árvore

Leia mais

Estruturas de dados para listas arrays e listas ligadas

Estruturas de dados para listas arrays e listas ligadas Estruturas de dados para listas arrays e listas ligadas Fernando Lobo Algoritmos e Estrutura de Dados Algumas figuras retiradas do livro Introduction to Algorithms, 3rd Edition. 1 / 29 Listas Uma lista

Leia mais

Estruturas de Dados Aula 11: TAD Pilha

Estruturas de Dados Aula 11: TAD Pilha Estruturas de Dados Aula 11: TAD Pilha 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

Leia mais

programas = estrutura de dados + algoritmos

programas = estrutura de dados + algoritmos Algoritmos e Estruturas de Dados I1 Prof. Eduardo 1 1. INTRODUÇÃO O mundo tem mudado rapidamente com ajuda dos computadores. Podemos citar as pesquisas espaciais, o projeto genoma, os simuladores de vôo,

Leia mais

Estrutura de dados - Listas Encadeadas

Estrutura de dados - Listas Encadeadas Estrutura de dados - Listas Encadeadas Prof. Leonardo Cabral da Rocha Soares leonardo.soares@newtonpaiva.br Centro Universitário Newton Paiva 25 de abril de 2019 Estrutura de dados - Listas Encadeadas

Leia mais

Aula 07. Estruturas de dados Lista, Pilha, Fila Pair, Map, Set e Bitset

Aula 07. Estruturas de dados Lista, Pilha, Fila Pair, Map, Set e Bitset Logo Aula 07 Estruturas de dados Lista, Pilha, Fila Pair, Map, Set e Bitset 2 Estrutura de Dados Estrutura de dados já foi vista em vetores, que foi uma maneira de manipular várias informações (variáveis

Leia mais

ESTRUTURAS DE DADOS E ALGORITMOS II ANTONIO RAMOS DE CARVALHO JÚNIOR PILHAS

ESTRUTURAS DE DADOS E ALGORITMOS II ANTONIO RAMOS DE CARVALHO JÚNIOR PILHAS ESTRUTURAS DE DADOS E ALGORITMOS II ANTONIO RAMOS DE CARVALHO JÚNIOR PILHAS TEORIA CONJUNTO ORDENADO DE ITENS NO QUAL NOVOS ITENS PODEM SER INSERIDOS E A PARTIR DO QUAL PODEM SER ELIMINADOS ITENS EM UMA

Leia mais

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

Listas Lineares. Algoritmos e Estruturas de Dados I. José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP Listas Lineares Algoritmos e Estruturas de Dados I Nas aulas anteriores vimos pilhas e filas que são listas restritas Nesta aula veremos o ADT lista em sua forma genérica, também conhecido com lista linear

Leia mais

Estruturas Compostas Parte II

Estruturas Compostas Parte II Estruturas Compostas Parte II Filas e Pilhas Leonardo Tórtoro Pereira Slides fortemente baseados no material do professor Ricardo Farias: http://www.cos.ufrj.br/~rfarias/cos121/ Pilhas Pilhas Também conhecida

Leia mais

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

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 03 Pag.: 1 lgoritmos e Estruturas de ados Prof Osório PIP/ - ula 03 Pag: 1 - UNIVERSIE O VLE O RIO OS SINOS ENTRO E IÊNIS EXTS E TENOLÓGIS (6/6) PIP/ - Programa Interdisciplinar de Pós-Graduação em omputação plicada

Leia mais

Prova 2 PMR2300 1o. semestre 2015 Prof. Thiago Martins

Prova 2 PMR2300 1o. semestre 2015 Prof. Thiago Martins Prova PMR00 o. semestre 0 Prof. Thiago Martins Instruções: Escreva o nome e o número USP na folha de papel almaço.. ( pontos) Um heap binário é uma árvore binária completa (todos os níveis exceto o último

Leia mais

SCC Algoritmos e Estruturas de Dados I

SCC Algoritmos e Estruturas de Dados I SCC 202 - Algoritmos e Estruturas de Dados I TAD Pilha Lembrem...TADs são tipos definidos em termos de seu comportamento e não de sua representação (que pode variar na busca de eficiência) 12/8/2010 Pilha

Leia mais

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

Universidade Federal do Ma Curso de Ciência da Computaçã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

Leia mais

Prof. Jesus José de Oliveira Neto

Prof. Jesus José de Oliveira Neto Prof. Jesus José de Oliveira Neto É uma das estruturas de dados mais simples A idéia fundamental da pilha é que todo o acesso a seus elementos é feito através do seu topo. Assim, quando um elemento novo

Leia mais

Filas. Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1

Filas. Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1 Filas Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1 Índice Introdução Aplicações Implementação / Modelagem Operações de uma fila TAD da Fila em C UDESC - Rui J. Tramontin Jr. 2 Introdução

Leia mais

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

Programação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio Programação II Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio Vetores vs Estruturas Dinâmicas Vetores (arrays): Ocupa um espaço contíguo de memória Permite acesso randômico

Leia mais

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

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Listas Estáticas SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de

Leia mais

Estruturas de Dados Estruturas de Dados Fundamentais

Estruturas de Dados Estruturas de Dados Fundamentais Estruturas de Dados Estruturas de Dados Fundamentais Prof. Eduardo Alchieri Estruturas de Dados Fundamentais Todos os tipos abstratos de dados (pilhas, filas, deques, etc.) podem ser implementados usando

Leia mais

Classificação e Pesquisa

Classificação e Pesquisa Classificação e Pesquisa Análise de Algoritmos - Complexidade Prof. Rodrigo Rocha prof.rodrigorocha@yahoo.com http://www.bolinhabolinha.com Onde Estamos Ementa Pesquisa de Dados Seqüencial Binária Métodos

Leia mais

Alocação Seqüencial VAL MAX TOPO

Alocação Seqüencial VAL MAX TOPO 306 Alocação Encadeada Como vimos, uma fila nada mais é do que uma lista com uma disciplina de acesso. Logo, podemos nos utilizar de todos os conceitos vistos em listas para implementarmos filas. Por exemplo,

Leia mais

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP Introdução à Computação II AULA 16 BCC Noturno - EMA896115B Prof. Rafael Oliveira olivrap@gmail.com Universidade Estadual Paulista Júlio de Mesquita Filho UNESP Rio Claro 2014 (Sem 2) Estruturas de Dados

Leia mais

CAP-241 Computação Aplicada I Dica: Standard Template Library (STL) Parte I - Containers Dr. Gilberto Ribeiro de Queiroz

CAP-241 Computação Aplicada I Dica: Standard Template Library (STL) Parte I - Containers Dr. Gilberto Ribeiro de Queiroz CAP-241 Computação Aplicada I Dica: Standard Template Library (STL) Parte I - Containers Dr. Gilberto Ribeiro de Queiroz São José dos Campos, 28 de Abril de 2016 C++ Templates Suporte a Templates em C++

Leia mais

Aula 11 Pilha Dinâmica. prof Leticia Winkler

Aula 11 Pilha Dinâmica. prof Leticia Winkler Aula 11 Pilha Dinâmica prof Leticia Winkler 1 Pilha Dinâmica (Dynamic Stack) Pilha implementada através de uma lista linear encadeada. É uma lista linear encadeada em que as operações de inserção e retirada

Leia mais

FILAS. As coisas de que uma fila é feita serão chamadas itens. Os itens podem ser números, strings, structs, etc., etc.

FILAS. As coisas de que uma fila é feita serão chamadas itens. Os itens podem ser números, strings, structs, etc., etc. KATIA LIMA FILAS RAFAEL DA SILVA REIAS JEFFERSON DA SILVA OLIVEIRA RAFFAELA LEITE SANTANA EXISTEM MUITOS EXEMPLOS DE FILA NO MUNDO REAL: UMA FILA DE BANCO; NO PONTO DE ÔNIBUS; UM GRUPO DE CARROS AGUARDANDO

Leia mais

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

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: ponteiros e alocação dinâmica Prof. Renato Pimentel 1 Ponteiros 2 Prof. Renato Pimentel 1 Ponteiros: introdução Toda a informação

Leia mais

Filas Implementação Sequencial

Filas Implementação Sequencial SCE 202 182 Algoritmos e Estruturas de Dados I Filas Implementação Sequencial Conceito Coleção ordenada de itens (lista ordenada) em que a inserção de um novo item se dá em um dos lados no fim e a remoção

Leia mais

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

Filas. Prof. Túlio Toffolo  BCC202 Aula 12 Algoritmos e Estruturas de Dados I Filas Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 12 Algoritmos e Estruturas de Dados I O que é uma fila? 1 4 2 3 Fila 1 2 3 4 TAD Fila Tipo Abstrato de dados com a seguinte característica:

Leia mais

INF 1620 P2-23/10/04 Questão 1 Nome:

INF 1620 P2-23/10/04 Questão 1 Nome: INF 1620 P2-23/10/04 Questão 1 Considere um tipo abstrato de dados para representar uma disciplina da PUC-Rio, com as seguintes informações: Nome da disciplina: com até 50 caracteres Código da disciplina:

Leia mais

Exemplos. Alocação Dinâmica de Pilhas. Pilhas. Pilhas. Implementação Seqüencial X Encadeada. SCE 182 Algoritmos e Estruturas de Dados I

Exemplos. Alocação Dinâmica de Pilhas. Pilhas. Pilhas. Implementação Seqüencial X Encadeada. SCE 182 Algoritmos e Estruturas de Dados I SCE 182 Algoritmos e Estruturas de Dados I Uma pilha é uma lista linear em que a inserção ou eliminação de elementos somente pode ocorrer em uma das extremidades, que é chamada de TOPO da PILHA. D C B

Leia mais

LISTAS LINEARES. Estrutura de Dados

LISTAS LINEARES. Estrutura de Dados LISTAS LINEARES Lista Linear Definição: seqüência de zero ou mais elementos a 1,a 2,...,a n sendo a i elementos de um mesmo tipo n o tamanho da lista linear Propriedade fundamental: os elementos têm relações

Leia mais

Listas Lineares Ordenadas

Listas Lineares Ordenadas Listas Lineares Ordenadas Algoritmos e Estruturas de Dados I Nesta apresentação será apresentado o ADT lista linear ordenada Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre

Leia mais

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!

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! Rafael D. Ribeiro, M.Sc. rafaeldiasribeiro@gmail.com http://www.rafaeldiasribeiro.com.br Exemplo: 5! = 5 x 4! 4! = 4 x 3! 3! = 3 X 2! 2! = 2 x 1! 1! = 1 x 0! Fatorial de 0 = 1 Recursividade 1 Recursividade

Leia mais

2. Listas 3. Listas ligadas simples 4. Operações dentro das listas 5. Listas Circulares 6. Listas Duplamente Ligadas 7. Pilhas 8.

2. Listas 3. Listas ligadas simples 4. Operações dentro das listas 5. Listas Circulares 6. Listas Duplamente Ligadas 7. Pilhas 8. Profa. Dra. Laura Rodríguez E-mail: lmrodrig@uma.pt Universidade da Madeira 1. Introdução 2. Listas 3. Listas ligadas simples 4. Operações dentro das listas 5. Listas Circulares 6. Listas Duplamente Ligadas

Leia mais

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

Pilhas. Algoritmos e Estruturas de Dados I. José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP Pilhas Algoritmos e Estruturas de Dados I Nesta aula veremos o ADT pilha Uma pilha é usada em muitas situações tais como avaliação de expressões aritméticas, chamada e retorno de procedimentos e funções

Leia mais

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

Listas (Parte 1) Túlio Toffolo  BCC202 Aula 09 Algoritmos e Estruturas de Dados I Listas (Parte 1) Túlio Toffolo tulio@toffolo.com.br www.toffolo.com.br BCC202 Aula 09 Algoritmos e Estruturas de Dados I Ementa do Curso Tipos Abstratos de Dados / Alocação Dinâmica Análise de Algoritmos

Leia mais

Programação Orientada a Objetos (utilizando C#) Professor Emiliano S. Monteiro Versão 20 Jan/2017.

Programação Orientada a Objetos (utilizando C#) Professor Emiliano S. Monteiro Versão 20 Jan/2017. Programação Orientada a Objetos (utilizando C#) Professor Emiliano S. Monteiro Versão 20 Jan/2017 4.9. Delegates Exercício 217 4.9. Delegates Repare nas diferenças destes dois casos com e sem Delegates:

Leia mais

Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010

Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010 Filas de prioridade Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010 Qual a Utilidade das Filas de Prioridade? Trabalhos maiores devem ser executados no fim (mesmo que não tenha sido o último

Leia mais

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

10.1. Aula 10: Pilhas. O conceito de pilha. Algoritmos de inserção e remoção. Exemplo: Notação Polonesa 10.1 Aula 10: Pilhas O conceito de pilha Algoritmos de inserção e remoção Exemplo: Notação Polonesa 10.2 Pilhas Uso eficiente de listas: inserções e remoções não devem acarretar movimentação de nós. A

Leia mais

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA (ABORDAGEM RECURSIVA)

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA (ABORDAGEM RECURSIVA) ESTRUTURAS DE DADOS E ALGORITMOS 1 LISTA LIGADA (ABORDAGEM RECURSIVA) Adalberto Cajueiro Departamento de Sistemas e Computação Universidade Federal de Campina Grande QUESTÕES DE IMPLEMENTAÇÃO Implementacao

Leia mais

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

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 4: Listas Estáticas e Dinâmicas Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 4: Listas Estáticas e Dinâmicas Listas Estáticas: com Vetores Dinâmicas: Listas Ligadas (com ponteiros) Variáveis e Métodos de Controle:

Leia mais

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I BCC202 - Estrutura de Dados I Aula 09: Listas (Parte 2) Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Ciência da Computação, DECOM Website: www.decom.ufop.br/reifortes Email:

Leia mais

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

INF 1620 P2-01/11/03 Questão 1 Nome: INF 1620 P2-01/11/03 Questão 1 Considere a implementação de uma lista encadeada para armazenar as notas dos alunos de uma turma dada pelo tipo abaixo: struct lista { char nome[81]; int mat; float p1, p2,

Leia mais

Estrutura de Dados. Aleardo Manacero Jr.

Estrutura de Dados. Aleardo Manacero Jr. Estrutura de Dados Aleardo Manacero Jr. Programa Tipos abstratos de Dados (semana 1) Listas, pilhas e filas (semana 1) Árvores (semanas 2, 3 e 4) Tabelas Hash (espalhamento) (semana 5) Gerenciamento de

Leia mais

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

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões Edital de Seleção 024/2017 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: «Nome» INSCRIÇÃO: «Inscrição» Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome

Leia mais