public void PrintCacheElements(DoublyLinkedList doublyLinkedList) { if (doublyLinkedList == null) { Console.WriteLine("The Doubly Linked List is empty!" + " Cannot print any element :)"); } else { DoublyLinkedListNode doublyLinkedListNode = doublyLinkedList.GetDoublyLinkedListNodeHead(); if (doublyLinkedListNode == null) { Console.WriteLine("The head of the Doubly linked list is empty!"); return; } Console.WriteLine("Printing elements in the cache memory------"); while (doublyLinkedListNode != null) { Console.Write(doublyLinkedListNode.GetDoublyLinkedListNodeData() + " "); doublyLinkedListNode = doublyLinkedListNode.GetDoublyLinkedListNodeNext(); } } Console.WriteLine(); }
public void ReferPageInLRUCache(int data) { if (!hashMap.ContainsKey(data)) { Console.WriteLine("The entered element is not present in the HashMap!"); if (doublyLinkedList != null && doublyLinkedList.isDoublyLinkedListFull()) { Console.WriteLine("Cache memory is full! Making way for the new" + " element by deleting the least recently used" + " element at the last"); doublyLinkedList.SetDoublyLinkedListNodeHead( doublyLinkedList.DeleteLast(doublyLinkedList.GetDoublyLinkedListNodeHead())); } if (doublyLinkedList != null && doublyLinkedList.GetDoublyLinkedListSize() < doublyLinkedList.GetDoublyLinkedListCapacity()) { Console.WriteLine("Cache memory is empty! Adding the element"); } doublyLinkedList.SetDoublyLinkedListNodeHead( doublyLinkedList.InsertAtFront(doublyLinkedList.GetDoublyLinkedListNodeHead(), data) ); hashMap.Add(data, doublyLinkedList.GetDoublyLinkedListNodeHead()); } else { Console.WriteLine("The element is present! Bringing it to the front..."); doublyLinkedList.SetDoublyLinkedListNodeHead( doublyLinkedList.DeleteNode(doublyLinkedList.GetDoublyLinkedListNodeHead(), data)); hashMap.Remove(data); doublyLinkedList.SetDoublyLinkedListNodeHead( doublyLinkedList.InsertAtFront(doublyLinkedList.GetDoublyLinkedListNodeHead(), data)); hashMap[data] = doublyLinkedList.GetDoublyLinkedListNodeHead(); } }