用python实现的优先队列,纯粹练习~

最近做实验的时候经常用到优先队列,之前都是用java实现的,今天闲的没事用python写了一个,全当练手~

PS:这是个小顶堆

# Implemented by LiangTE
# 2013.4.12
# Just for Practicing Python
class PriorityQueue:        
	__pq = [None]
	__size = -1
	__N = 0
	def __init__(self, size):
		self.__size = size+1
		
	def insert(self, k):
		if len(self.__pq) < self.__size:
			self.__pq.append(k)
			self.__N += 1
			self.__swim(self.__N)
		else:
			if k > self.__peek():
				self.__pq[1] = k
				self.__sink(1)
			
	def __peek(self):
		return self.__pq[1]
	
	def __sink(self, m):
		i = -1
		while m*2 <= self.__size:
			if self.__pq[m*2] > self.__pq[m*2+1]:
				i = m*2 + 1
			else:
				i = m*2
			if self.__pq[m] > self.__pq[i]:
				tmp = self.__pq[m]
				self.__pq[m] = self.__pq[i]
				self.__pq[i] = tmp
				m = i
			else:
				break
			
	def __swim(self, n):
		while n > 1:
			if self.__pq[n/2] > self.__pq[n]:
				tmp = self.__pq[n/2]
				self.__pq[n/2] = self.__pq[n]
				self.__pq[n] = tmp
				n = n/2
	def printQuene(self):
		print self.__pq[1:]

转载于:https://my.oschina.net/liangtee/blog/122362

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值