//Função que desenfileira um dado da Fila public void Desenfileirar(ref Produto xProd) { if (Vazia()) { Console.Write("\nFila Vazia!!!"); } else { xProd = inicio.item; inicio = inicio.prox; } tamanho--; }
//Função que retira um dado da Lista public void Retirar(Produto xProd) { Celula anterior; Celula auxiliar; if (Vazia()) { Console.Write("\nLista vazia..."); } else { anterior = null; auxiliar = inicio; int achou = 0; while (auxiliar != null) { if (auxiliar.item == xProd) { achou++; if (auxiliar == inicio) { inicio = auxiliar.prox; auxiliar = inicio; } else if (auxiliar == fim) { fim = anterior; fim.prox = null; } else { anterior.prox = auxiliar.prox; auxiliar = auxiliar.prox; } } else { anterior = auxiliar; auxiliar = auxiliar.prox; } } tamanho = tamanho - achou; } }
//Função que insere ordenadamente um dado na Lista public void InserirOrdenado(Produto xProd, Celula anterior) { Celula auxiliar = new Celula(); auxiliar.item = xProd; if (anterior != null) { auxiliar.prox = anterior.prox; anterior.prox = auxiliar; } else { auxiliar.prox = inicio; inicio = auxiliar; } tamanho++; }
//Função que enfileira um dado na Fila public void Enfileirar(Produto xProd) { Celula auxiliar = new Celula(); auxiliar.item = xProd; auxiliar.prox = null; if (Vazia()) { inicio = auxiliar; fim = auxiliar; auxiliar.prox = null; } else { fim.prox = auxiliar; fim = auxiliar; } tamanho++; }
//Função que implementa o Método LRU para gerência da prateleira public void MetodoLRU(Produto[] vetProd) { metodo = "LRU"; tempo = 0; registro = null; numFaltas = 0; compras = 0; Lista prateleira; //Define uma prateleira do tipo Lista. try { //Tenta a abertura do arquivo StreamReader arq = new StreamReader(caminho); //EndOfStream significa o fim do arquivo while (!arq.EndOfStream) { cont = 0; Celula aux; Celula anterior = null; Produto xProd; prateleira = new Lista(); tamanho = Convert.ToInt16(arq.ReadLine()); //Pega na primeira linha do arquivo o tamanho da prateleira. while (!arq.EndOfStream) { registro += arq.ReadLine(); //Lê o resto do arquivo até o final. } //Vai ser pego caractere por caractere do arquivo que será associado a um Produto que vai tentar entrar na prateleira for (i = 0; i < registro.Length; i++) { achou = false; ch = Convert.ToChar(registro.Substring(i, 1)); //Pega cada caractere. if (ch >= '0' && ch <= '9') { pos = Convert.ToInt16(ch.ToString()); //Encontra o produto correspondente àquele caractere. //Acresce no número de vendas do produto, além do tempo e nº de compras de uma prateleira tempo++; vetProd[pos].NumVendas++; compras++; //Atualiza o tempo de último acesso do Produto na prateleira vetProd[pos].UltimoAcesso = tempo; xProd = new Produto(); xProd = vetProd[pos]; //Busca se o Produto já se encontra na prateleira prateleira.BuscaPosição(xProd.UltimoAcesso, ref anterior, ref achou); //Se não encontrou o Produto na prateleira, tenta-se inserí-lo if (!achou) { numFaltas++; //Caso haja espaço, o Produto é inserido if (cont < tamanho) { prateleira.InserirOrdenado(xProd, anterior); cont++; } //Senão, deverá ser feita a substituição de Produtos else { prateleira.Inicio.item.NumSubstituido++; prateleira.Retirar(prateleira.Inicio.item); prateleira.InserirOrdenado(xProd, anterior); } } //Se o Produto já existe na prateleira, ele será realocado para o final da Lista else { prateleira.Retirar(xProd); prateleira.BuscaPosição(xProd.UltimoAcesso, ref anterior, ref achou); prateleira.InserirOrdenado(xProd, anterior); } } else if (ch == '.') { tempo++; } //Passo-a-passo mostrando o funcionamento do Algoritmo FIFO a cada tempo Console.WriteLine("\n"); Console.Write("Tempo {0}", tempo); aux = prateleira.Inicio; while (aux != null) { Console.Write("\n{0} - {1}: Vendas: {2} Subst.: {3}", aux.item.Codigo, aux.item.Descricao, aux.item.NumVendas, aux.item.NumSubstituido); aux = aux.prox; } } } arq.Close(); //Fecha o arquivo. Console.Write("\n\nPressione <QUALQUER TECLA> para gerar relatório."); Console.ReadKey(); //Mostra relatório Relatorio(vetProd, numFaltas, compras, tempo, metodo); } //Caso gere uma exceção na abertura do arquivo, ela será tratada catch (System.IO.DirectoryNotFoundException ex) { Console.Write(ex.Message); } catch (FileNotFoundException ex) { Console.Write(ex.Message); } catch (FileLoadException ex) { Console.Write(ex.Message); } catch (FormatException ex) { Console.Write(ex.Message); } catch (ArgumentException ex) { Console.Write(ex.Message); } }
//Inicializador de dados (Construtor) public Fila() { inicio = null; fim = null; tamanho = 0; }
public Celula prox; //Ponteiro que aponta para a próxima posição da Lista ou Fila. //Inicializador de dados (Construtor) public Celula() { item = new Produto(); prox = null; }
//Inicializador de dados (Construtor) public Lista() { inicio = null; fim = null; tamanho = 0; }