Prof. Hilton Cardoso Marins Junior

Slides:



Advertisements
Apresentações semelhantes
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Advertisements

Índice Estrutura de Dados Pilhas 2010 Renan Robson Lima Carneiro
Marco Antonio Montebello Júnior
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Programação Avançada I
Algoritmos de manipulação de estruturas elementares de dados
ESTRUTURAS DO TIPO FILA
Algoritmos e Estrutura de Dados I
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Aplicações de Pilhas Pilhas são fundamentais em diversas áreas da computação: Sistemas Operacionais Arquitetura de Computadores Compiladores Entre outros.
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
AED – Algoritmos e Estruturas de Dados
FILAS (Queues) Estrutura linear de acesso seqüencial que ordena seus elementos pela seqüência cronológica de sua entrada; Estrutura FIFO (First In First.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Estrutura de dados Busca
COMO FUNCIONA A SIMULAÇÃO
Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
Algoritmos e Estruturas de Dados
Meta - heurísticas Prof. Aurora
Prof. Hilton Cardoso Marins Junior LISTA LINEAR
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
Listas Lineares Estrutura de Dados.
Algoritmos e Estruturas de Dados
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 6 Vetores e Matrizes
Linguagem de Programação II Parte IX
Denise Guliato Faculdade de Computação – UFU
Listas lineares Denise Guliato Faculdade de Computação – UFU
Aula 11 LISTAS LIGADAS.
Estruturas de Dados com Jogos
INTELIGÊNCIA ARTIFICIAL
Tipos Abstratos de Dados
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Denise Guliato Faculdade de Computação – UFU
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Listas, Filas e Pilhas Katia Guimarães.
Aula 3 Listas, pilhas, filas.
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Estruturas de Dados Aula 11: TAD Pilha
Sistemas Operacionais
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
SISTEMAS OPERACIONAIS I
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Capítulo VIII Ambientes de Execução
SISTEMAS OPERACIONAIS I Gerenciamento de Arquivos
Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Pilhas e Filas usando Alocação Estática e Dinâmica de Memória
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Lista Linear Base para outras estruturas
Fundamentos de linguagens de programação
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Algoritmos.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Aula Prática 12 Listas Encadeadas Monitoria
Objetivos Ao concluir esta Disciplina espera-se que os alunos sejam capazes de: Distinguir os conceitos de Estrutura e Dados; Compreender o que são, como.
© Copyright 2007 Algoritmos e Estruturas de Dados - Todos os direitos reservados Estruturas de Dados Dinâmicas IF672 - Algoritmos e Estruturas de Dados.
Estruturas de Dados Murilo Salgado Razoli.
Estrutura de Dados Aula 3 - Listas
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
UNIVERSIDADE FEDERAL DO AMAZONAS- UFAM INSTITUTO DE CIÊNCIAS EXATAS E TECNOLOGIA- ICET SISTEMAS DE INFORMAÇÃO ALGORITMOS E ESTRUTURAS DE DADOS II PILHAS.
INE5408 Estruturas de Dados Listas Encadeadas Simples.
Pilha dinâmica Prof.° Jean Daniel Henri Merlin Andreazza
Estrutura de Dados Prof. André Cypriano M. Costa
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Transcrição da apresentação:

Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail Prof. Hilton Cardoso Marins Junior hiltonmarins@gmail.com LISTAS LINEARES COM DISCIPLINA DE ACESSO

Listas Lineares com Disciplina de Acesso Em algumas aplicações pode aparecer um critério que determina como será a inserção e remoção dos elementos que compõem um conjunto de dados. Veremos a seguir dois critérios: LIFO (Last In First Out): Último elemento inserido será o primeiro a ser removido. Estruturas Lineares com essa disciplina de acesso são denominadas PILHAS pois pode-se fazer um analogia com uma pilha de livros, onde um novo livro sempre será colocado no topo da pilha e só podemos retirar o livro do topo da pilha, caso contrário ela desabaria. FIFO (First In First Out): Primeiro elemento inserido será o primeiro a ser removido. Estruturas Linears com essa disciplina de acesso são denominadas FILAS pois pode-se fazer uma analogia com o funcionamento de uma fila de pessoas em um guichê, onde as pessoas são atendidas na ordem em que chegaram.

Pilha A utilização do critério LIFO torna a Pilha uma ferramenta ideal para processamento de estruturas aninhadas de profundidade imprevisível, situação em que é necessário garantir que subestruturas mais internas sejam processadas antes das estruturas que as contenham. Vejamos a seguir alguns exemplos de estruturas aninhadas: Quando é necessário caminhar em um conjunto de dados e guardar uma lista de coisas a fazer posteriormente (Editor de Textos – desfazer digitação). Controle de sequências de chamadas de subprogramas e algoritmos recursivos. Veremos detalhadamente quando analisarmos a pilha de execução de um programa. Sintaxe de expressões aritméticas.

Exemplo: Calculadora Um bom exemplo de aplicação de pilha é o funcionamento das calculadoras da HP (Hewlett-Packard). Elas trabalham com expressões pós-fixadas, então para avaliarmos uma expressão como (1-2)*(4+5) podemos digitar 1 2 – 4 5 + *. O funcionamento dessas calculadoras é muito simples. Cada operando é empilhado numa pilha de valores. Quando se encontra um operador, desempilha-se o número apropriado de operandos (dois para operadores binários e um para operadores unários), realiza-se a operação devida e empilha-se o resultado. Deste modo, na expressão acima, são empilhados os valores 1 e 2. Quando aparece o operador -, 1 e 2 são desempilhados e o resultado da operação, no caso -1 (1 - 2), é colocado no topo da pilha. A seguir, 4 e 5 são empilhados. O operador seguinte, +, desempilha o 4 e o 5 e empilha o resultado da soma, 9. Nesta hora, estão na pilha os dois resultados parciais, -1 na base e 9 no topo. O operador *, então, desempilha os dois e coloca -9 (-1 * 9) no topo da pilha.

Exemplo: A Pilha de Execução de um Programa Todo programa C é composto por uma ou mais funções  (sendo main a primeira função a ser executada).  Ao encontrar a invocação de uma função, o computador cria um novo "espaço de trabalho", que contém todos os parâmetros e todas as variáveis locais da função.  Esse espaço de trabalho é colocado na pilha de execução (sobre o espaço de trabalho que invocou a função) e a execução da função começa (confinada ao seu espaço de trabalho).  Quando a execução da função termina, o seu espaço de trabalho é retirado da pilha e descartado.  O espaço de trabalho que estiver agora no topo da pilha é reativado e a execução é retomada do ponto em que havia sido interrompida.

Exemplo: A Pilha de Execução de um Programa main(){ funcao_1(); } funcão_1(){ funcao_2(); funcao_2(){ funcao_3(); funcao_3(){ ... Pilha de Execução Em algum momento este programa será executado. Neste momento o fluxo de execução será desviado para...

Exemplo: A Pilha de Execução de um Programa main(){ funcao_1(); } funcão_1(){ funcao_2(); funcao_2(){ funcao_3(); funcao_3(){ ... Pilha de Execução main “espaço de trabalho", que contém todos os parâmetros e todas as variáveis locais desta função. Toda chamada de função provoca a criação de uma área de trabalho correspondente. Toda finalização de função provoca a eliminação da área de trabalho correspondente. espaço de trabalho", que contém todos os parâmetros e todas as variáveis locais da função

Exemplo: A Pilha de Execução de um Programa main(){ funcao_1(); } funcão_1(){ funcao_2(); funcao_2(){ funcao_3(); funcao_3(){ ... Pilha de Execução funcao_1 main

Exemplo: A Pilha de Execução de um Programa main(){ funcao_1(); } funcão_1(){ funcao_2(); funcao_2(){ funcao_3(); funcao_3(){ ... Pilha de Execução funcao_2 funcao_1 main

Exemplo: A Pilha de Execução de um Programa main(){ funcao_1(); } funcão_1(){ funcao_2(); funcao_2(){ funcao_3(); funcao_3(){ ... Pilha de Execução funcao_3 funcao_2 funcao_1 main

Exemplo: A Pilha de Execução de um Programa main(){ funcao_1(); } funcão_1(){ funcao_2(); funcao_2(){ funcao_3(); funcao_3(){ ... Pilha de Execução funcao_2 funcao_1 main

Exemplo: A Pilha de Execução de um Programa main(){ funcao_1(); } funcão_1(){ funcao_2(); funcao_2(){ funcao_3(); funcao_3(){ ... Pilha de Execução funcao_1 main

Exemplo: A Pilha de Execução de um Programa main(){ funcao_1(); } funcão_1(){ funcao_2(); funcao_2(){ funcao_3(); funcao_3(){ ... Pilha de Execução main

Exemplo: A Pilha de Execução de um Programa main(){ funcao_1(); } funcão_1(){ funcao_2(); funcao_2(){ funcao_3(); funcao_3(){ ... Pilha de Execução

Operaçõs com Pilha Em uma Pilha a inserções e remoções sempre ocorrem na mesma extremidade: no topo da pilha.

Operações com Pilha A figura abaixo mostra como funciona a recuperação e o armazenamento de informações em uma PILHA: Ação Conteúdo da Pilha insere(a) a insere(b) ba insere(c) cba recupera insere(d) dba Pilha vazia

Operações com Pilha. Empilhar - Inserir um elemento no topo da pilha Operações com Pilha Empilhar - Inserir um elemento no topo da pilha. Desempilhar - Recuperar um elemento do topo da pilha. Calcular o tamanho da pilha (quantidade de elementos). Representações de uma Pilha A Pilha, sendo também uma Lista Linear, pode ser representada por contiguidade ou por encadeamento. A escolha de uma destas formas dependerá da frequência com que determinadas operações serão executadas.

Pilha por Contiguidade Neste tipo de representação os elementos da Pilha são armazenados em posições contíguas de memória conforme mostra figura abaixo: Devido ao fato de que o comprimento da pilha (n) pode se modificar durante a execução do programa, consideraremos uma Pilha de n elementos como sendo parte de um vetor de m elementos, sendo m >= n. 1 . n m Pilha de n elementos. Vetor de m elementos. m é o tamanho máximo permitido para a pilha. Em C definiríamos assim: tipo pilha[m] topo da pilha

Pilha por Encadeamento Cada elemento da pilha contém informações próprias e uma ligação, através de um ponteiro, com outro elemento da pilha. topo info prox info prox info prox NULL

Pilha por Encadeamento Assim como na Lista Encadeada podemos utilizar um descritor. Obs: Podemos também utilizar o encadeamento duplo e circular. fundo n topo info prox 100 info prox info prox NULL

Fila A utilização do critério FIFO torna a Fila uma ferramenta ideal para processamento de itens de acordo com a “ordem de chegada”. Sistemas Operacionais, por exemplo, utilizam filas para regular a ordem na qual tarefas devem receber processamento e recursos devem ser alocados a processos.

Operações com Fila. Inserir um elemento no final da fila Operações com Fila Inserir um elemento no final da fila. Recuperar um elemento do início da fila. Verificar o número de elementos da fila. Fila é uma lista onde todas as inclusões são feitas em uma extremidade e todas as exclusões na outra extremidade Representação A Fila também pode ser representada por contiguidade ou por encadeamento.

Fila por Contiguidade Neste tipo de representação os elementos da Fila são armazenados em posições contíguas de memória conforme mostra figura abaixo: Onde: n: é o numero de elementos da fila. m: tamanho máximo permitido para a fila. livre e proximo: variáveis que indicam a posição a inserir e a recuperar. Em C definiríamos assim: tipo fila[m] Devido ao fato de que o comprimento da fila (n) pode se modificar durante a execução do programa, iremos representá-la como sendo parte de um vetor de m elementos, sendo m >= n. X1 X2 ... Xn Xm

Fila por Contiguidade livre A variável livre indica uma posição para inserção (indica também o n = número de itens na fila). A variável prox indica a posição a ser recuperada. A figura ao lado mostra como funciona a recuperação e o armazenamento de informações em uma Fila. Quando a posição a inserir (livre) for a mesma que a recuperar (próximo) significa que não há mais nenhum elemento restante na fila. Quando livre for igual a m (tamanho do vetor) indica fila cheia. Em uma Fila a inserções sempre ocorrem no final e as remoções sempre ocorrem no início. Fila vazia prox. livre insere(A) A prox. livre insere(B) A B prox. livre recupera A B prox. livre recupera A B prox. livre insere(C) A B C prox.

Fila por Contiguidade livre Podemos perceber que as operações de inserção ocupam um espaço na memória que não é reaproveitado. Com algumas inserções e recuperações de itens, a fila vai de encontro ao limite (m) do espaço alocado para ela. Se em um programa definíssemos a fila tipo fila[m], só conseguiriámos inserir e recuperar m itens da fila, pois as posições recuperadas são descartadas e não tornam livres para posterior inserção. Como solucionar problema ? A solução ideal seria reutilizar as posições que já foram recuperadas. Para isso usa-se a representação circular de fila. Fila vazia prox. livre insere(A) A prox. livre insere(B) A B prox. livre recupera A B prox. livre recupera A B prox. livre insere(C) A B C prox.

Fila Circular por Contiguidade Para possibilitar que posições recuperadas possam ser reutizadas, devemos fazer com que as variáveis livre e proximo, ao alcançarem seus valores de limite (m), voltem a ter valores iniciais (0). Isto pode ser implementado através da aritmética modular conforme veremos a seguir. Precisaríamos também de uma variável (tamanho) para controlar o tamanho da fila. A cada inserção é incrementada e a cada recuperação decrementada. X0 Xn Xm X1 .

Fila Circular por Contiguidade Usaremos a aritmética modular para fazer com que as variáveis livre e proximo, ao alcançarem seus valores de limite (m), voltem a ter valores iniciais (0). Considerando inicialmente m = 5, livre = 0 e proximo = 0: Nas Inserções livre = livre % m 1a. inserção: livre = (0 % 5) a posição livre no vetor é 0 2a. inserção: livre++ livre = (1 % 5) a posição livre no vetor é 1 3a. inserção: livre++ livre = (2 % 5) a posição livre no vetor é 2 4a. inserção: livre++ livre = (3 % 5) a posição livre no vetor é 3 5a. inserção: livre++ livre = (4 % 5) a posição livre no vetor é 4 6a. inserção: livre++ livre = (5 % 5) a posição livre no vetor é 0 7a. inserção: livre++ livre = (1 % 5) a posição livre no vetor é 1 ...

Fila Circular por Contiguidade Nas Recuperações Fila Circular por Contiguidade Nas Recuperações proximo = proximo % m 1a. recuperação: proximo = (0 % 5) a posição proximo no vetor é 0 2a. recuperação: proximo++ proximo = (1 % 5) a posição proximo no vetor é 1 3a. recuperação: proximo++ proximo = (2 % 5) a posição proximo no vetor é 2 4a. recuperação: proximo++ proximo = (3 % 5) a posição proximo no vetor é 3 5a. recuperação: proximo++ proximo = (4 % 5) a posição proximo no vetor é 4 6a. recuperação: proximo++ proximo = (5 % 5) a posição proximo no vetor é 0 7a. recuperação: proximo++ proximo = (1 % 5) a posição proximo no vetor é 1 …

Fila Circular por Contiguidade O uso mais comum para uma fila circular pode ser na operação de sistemas que “retêm” a informação lida e escrita em um arquivo de disco ou console (buffers). Um outro uso comum ocorre na aplicação de programas em tempo-real, nos quais, por exemplo, o usuário pode continuar a introduzir dados pelo teclado enquanto o programa executa uma outra tarefa. Durante um curto intervalo, o que é digitado não é mostrado na tela; este intervalo dura até que o programa complete o outro processo no qual ele trabalhava. Para realizar isto, o programa de aplicação deve continuar verificando entradas do teclado durante a execução do outro processo. Se uma tecla tiver sido digitada, ela será rapidamente colocada na fila e processo continuará. Depois do processo ter sido completado, os caracteres serão recuperados da fila e tratados de maneira normal.

Fila por Encadeamento Cada elemento da fila contém um ligação, através de um ponteiro, com outro elemento da fila. fim info prox Inserções sempre no FINAL info prox inicio info prox Recuperações sempre no INÍCIO NULL