INE5408 Estruturas de Dados Aula 6b Listas Circulares.

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

Infra-estrutura de Software - Aula de Revisão -
Sistemas Operacionais Gerência de Processador
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Estruturas de Dados Árvores Binárias
Listas encadeadas Prof. Rosana Palazon.
Listas duplamente encadeadas
Programação II Estruturas de Dados
TADS – Tipos Abstratos de Dados
TADS – Tipos Abstratos de Dados
Listas duplamente encadeadas
Padrão de Projeto Interpreter
Pesquisa em Memória Primária
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Aluno: Ricardo Nogueira de Figueiredo
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Listas Ligadas – Conceitos Avançados
AED – Algoritmos e Estruturas de Dados
Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Capítulo 3 - Russell e Norvig
Listas com Ponteiros Listas encadeadas Listas circulares.
Slides: Prof. João Fabro UTFPR - Curitiba
Lista Encadeada Circular Lista Duplamente Encadeada
Sistemas Operacionais Aula 4
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Estruturas de Dados com Jogos
Principais operações em Listas TPA Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p.
Árvores Binárias de Pesquisa
Lista Encadeada Circular Lista Duplamente Encadeada
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Listas lineares Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Estruturas de Dados Aula 9: Listas (parte 1)
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 I
Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;
Listas Simplesmente Encadeadas
Sistemas Operacionais
Estruturas de Dados Aula 17: Estruturas Genéricas
Introdução à Linguagem C
Escalonamento de Processos e Threads
Lista Linear Base para outras estruturas
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Estruturas de Dados Aula 9 -2: Listas simplesmente encadeadas sem sentinela e sem cabeçalho 19/06/2013.
Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva.
Busca Sequencial Int pseq(int x, int n, int v[]){ for(i=0; i
INE5408 Estruturas de Dados Listas Encadeadas Simples.
11 Pilhas, Filas e Listas Duplamente Encadeadas Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
Sistemas Operacionais
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C”
1 Introdução aos Padrões de Projetos (na prática) Créditos: Lúbia Vinhas Hazel Carvalho Crato Adaptações: Prof. Nécio de Lima Veras.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Pilhas e Filas Cristiano Arbex Valle Vinicius Fernandes dos Santos
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.
INE5408 Estruturas de Dados Introdução a Árvores - Conceitos - Árvores Binárias - Métodos e algoritmos de percurso - Métodos e algoritmos de balanceamento.
Noções de projeto orientado a objetos - camadas Prof. Gustavo Wagner (alterações) Prof. Tiago Massoni (Slides originais) Desenvolvimento de Sistemas FATEC-PB.
SISTEMAS OPERACIONAIS MEMÓRIA VIRTUAL. INTRODUÇÃO Memória Virtual é um técnica sofisticada e poderosa de gerenciamento de memória, onde a MP e a MS são.
Padrões de Projeto Aula 14 – Padrão Abstract Factory.
INE5408 Estruturas de Dados Estruturas de Dados básicas utilizando Vetores - Listas.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Listas Lineares Cristiano Arbex Valle Vinicius Fernandes dos Santos
INE5408 Estruturas de Dados Listas Encadeadas - Pilhas encadeadas - Filas encadeadas - Listas duplamente encadeadas.
Função de buscar elemento na lista simplesmente encadeada
Transcrição da apresentação:

INE5408 Estruturas de Dados Aula 6b Listas Circulares

Listas Encadeadas Circulares Último elemento conecta ao primeiro. Implementação mais simples: 3 info próximo info próximo info próximo nrodados melão doce caro maçã azeda cara uva irkh barata

Listas Encadeadas Circulares Caso especial: –Lista circular unitária. Atividade: –Quais operações têm algoritmos diferentes? –Qual é a posição mais indicada para inserir quando a posição não importa ? 1 info próximo nrodados melão doce caro

Listas Encadeadas Circulares Alternativa para evitar mudança nos algoritmos –nodo-sentinela funciona sempre como nodo sem informações atachado à cabeça de lista –lista é criada posuindo o nodo sentinela –algoritmos não se modificam 4 info próximo info próximo info nrodados maçã azeda cara uva irkh barata melão doce caro próximo info próximo

Para que servem listas circulares? Modelagem e planejamento de rotas circulares –Caminho de retorno é diferente do de ida. –Exemplo: rotas aéreas tipo volta-ao-mundo. –Útil em sistemas de planejamento de itinerário e de reserva global de passagens como Amadeus Global Travel Distribution System

Para que servem listas circulares?

Escalonamento de Processos (Process Scheduling) em kernels de sistemas operacionais multitarefa preemptivos. –Exemplo: método round-robin (tradução: sabiá-cíclico - não se preocupe: ninguém usa) de escalonamento de processos com fatia de tempo constante por processo.

Round Robin CPU Proc.#1 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 Proc.#2 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 Proc.#3 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 Proc.#4 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5

Round Robin CPU Proc.#1 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 Proc.#2 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 Proc.#3 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 Proc.#4 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5

Round Robin CPU Proc.#1 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 Proc.#2 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 Proc.#3 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 Proc.#4 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5 long int SomeFunction(); /* int OtherFunction(); */ /* int */ CallingFunction() { long int test1; register /* int */ test2; test1 = SomeFunction(); if (test1 > 0) test2 = 0; else test2 = OtherFunction(); return test2; }. Var1 Var2 Var3 Var4 Var5

Para que servem listas circulares? Sistemas de impressão que controlam várias impressoras –Realizam escalonamento de impressoras (round-robin printing queue) por disponibilidade para impressão de documentos em uma fila de impressão cíclica única para várias impressoras.

Para que servem listas circulares?