예제 #1
0
 public void AddNode(DoublyLinked node)
 {
     // Insert after head dummy node
     node.prev      = head;
     node.next      = head.next;
     head.next      = node;
     node.next.prev = node;
 }
예제 #2
0
    public void PopTail()
    {
        map.Remove(tail.prev.key);
        DoublyLinked prevTail = tail.prev.prev;

        prevTail.next = tail;
        tail.prev     = prevTail;
        contains--;
    }
예제 #3
0
    public LRUCache(int capacity)
    {
        this.map      = new Dictionary <int, DoublyLinked>();
        this.capacity = capacity;
        this.head     = new DoublyLinked(0);
        this.tail     = new DoublyLinked(0);

        this.head.next = this.tail;
        this.tail.prev = this.head;
    }
예제 #4
0
            public void addNode(object data)
            {
                DoublyLinked newNode = new DoublyLinked();

                newNode.Data = data;
                if (Head == null)
                {
                    Head      = Tail = newNode;
                    Head.Prev = null;
                    Tail.Next = null;
                }
                else
                {
                    Tail.Next    = newNode;
                    newNode.Prev = Tail;
                    Tail         = newNode;
                    Tail.Next    = null;
                }
            }
예제 #5
0
    public void Put(int key, int value)
    {
        if (map.ContainsKey(key))
        {
            map[key].val = value;
            MoveToHead(map[key]);
        }
        else
        {
            var node = new DoublyLinked(value);
            node.key = key;
            contains++;
            map[key] = node;
            AddNode(node);

            if (contains > capacity)
            {
                PopTail();
            }
        }
    }
예제 #6
0
 public DoublyLinkedList()
 {
     Head = new DoublyLinked();
     Tail = new DoublyLinked();
 }
예제 #7
0
 public void RemoveNode(DoublyLinked node)
 {
     // Remove node from position in list
     node.prev.next = node.next;
     node.next.prev = node.prev;
 }
예제 #8
0
 public void MoveToHead(DoublyLinked node)
 {
     RemoveNode(node);
     AddNode(node);
 }