Skip to content

Instantly share code, notes, and snippets.

@CrazyPython
Last active August 20, 2019 13:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CrazyPython/1233be4bb096bdd9cd3223d372d2f3ec to your computer and use it in GitHub Desktop.
Save CrazyPython/1233be4bb096bdd9cd3223d372d2f3ec to your computer and use it in GitHub Desktop.
Simple heap wrapper library.
import heapq
class Heap(object):
_heap = []
def __init__(self, l=()):
_heap = list(l)
heapq.heapify(_heap)
def isempty(self):
if len(self._heap) == 0:
return True
return False
def getroot(self):
return self._heap[0] if len(self._heap) != 0 else 0
def __len__(self):
return len(self._heap)
def push(self, item):
raise NotImplementedError
def pop(self):
raise NotImplementedError
def pushpop(self, item):
raise NotImplementedError
def replace(self, item):
raise NotImplementedError
class HeapMax(Heap):
def push(self, item):
heapq.heappush(self._heap, -item)
def pop(self):
return -heapq.heappop(self._heap)
def view_max(self):
return self.getroot()
def pushpop(self, item):
return -heapq.heappushpop(self._heap, -item)
def replace(self, item):
return -heapq.heapreplace(self._heap, -item)
class HeapMin(Heap):
def push(self, item):
heapq.heappush(self._heap, item)
def pop(self):
return heapq.heappop(self._heap)
def view_min(self):
return self.getroot()
def pushpop(self, item):
return heapq.heappushpop(self._heap, item)
def replace(self, item):
return heapq.heapreplace(self._heap, item)
@javiervisiedo
Copy link

Constructor for HeapMax:

  def __init__(self, l=[]):
      self._heap = [-a for a in l]
      heapq.heapify(self._heap)
  
  def __str__(self):
      return f'{[-a for a in self._heap]}'
  
  def __repr__(self):
      return f'{[-a for a in self._heap]}'

@javiervisiedo
Copy link

Printing HeapMin:

    def __len__(self):
        return len(self._heap)
    
    def __str__(self):
        return f'{self._heap}'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment