剧情提要:
阿伟看到了一本比较有趣的书,是关于《计算几何》的,2008年由北清派出版。很好奇
它里面讲了些什么,就来看看啦。
正剧开始:
星历2016年07月25日 11:42:16, 银河系厄尔斯星球中华帝国江南行省。
阿伟看到了一本比较有趣的书,是关于《计算几何》的,2008年由北清派出版。很好奇
它里面讲了些什么,就来看看啦。
正剧开始:
星历2016年07月25日 11:42:16, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[计算几何]]。
<span style="font-size:18px;">###
# @usage 队列
# @author mw
# @date 2016年07月25日 星期一 10:51:53
# @param
# @return
#
###
class Queue:
def info(self):
s = '[';
for x in self:
s+=repr(x)+', ';
if (len(s) > 2):
s = s[:-2]+']';
else:
s += ']';
print(s);
def __len__(self):
return len(self.items)-self.frontIdx;
def __iter__(self):
for i in range(self.frontIdx, len(self.items)):
yield self.items[i];
#初始化
def __init__(self):
self.items = []
self.frontIdx = 0
def __compress(self):
newlst = []
for i in range(self.frontIdx,len(self.items)):
newlst.append(self.items[i])
self.items = newlst
self.frontIdx = 0
def dequeue(self):
if self.isEmpty():
raise RuntimeError("Attempt to dequeue an empty queue")
# When queue is half full, compress it. This
# achieves an amortized complexity of O(1) while
# not letting the list continue to grow unchecked.
if self.frontIdx * 2 > len(self.items):
self.__compress()
item = self.items[self.frontIdx]
self.frontIdx += 1
return item
def enqueue(self,item):
self.items.append(item)
def front(self):
if self.isEmpty():
raise RuntimeError("Attempt to access front of empty queue")
return self.items[self.frontIdx]
def isEmpty(self):
return self.frontIdx == len(self.items)
def find(self, item, start = 0):
for i in range(self.frontIdx + start, len(self.items)):
if (self.items[i] == item):
return i-self.frontIdx;
return -1;
def __contains__(self, item):
for i in range(self.frontIdx, len(self.items)):
if (self.items[i] == item):
return True;
return False;
def __str__(self):
s = '[';
for x in self:
s+=repr(x)+', ';
if (len(s) > 2):
s = s[:-2]+']';
else:
s += ']';
return s; </span>
用例:
<span style="font-size:18px;">def main():
#计时开始
startTime = time.clock();
q = Queue()
lst = list(range(10))
lst2 = []
for k in lst:
q.enqueue(k)
print(str(q));
print(10 in q);
if q.front() == 0:
print("Test 1 Passed")
else:
print("Test 1 Failed")
while not q.isEmpty():
lst2.append(q.dequeue())
if lst2 != lst:
print("Test 2 Failed")
else:
print("Test 2 Passed")
for k in lst:
q.enqueue(k)
lst2 = []
q.info();
pos = q.find(5);
print(pos);
print(len(q));
while not q.isEmpty():
lst2.append(q.dequeue())
if lst2 != lst:
print("Test 3 Failed")
else:
print("Test 3 Passed")
try:
q.dequeue()
print("Test 4 Failed")
except RuntimeError:
print("Test 4 Passed")
except:
print("Test 4 Failed")
try:
q.front()
print("Test 5 Failed")
except RuntimeError:
print("Test 5 Passed")
except:
print("Test 5 Failed")
#计时结束
endTime = time.clock();
#打印结果
print('操作用时:{0:.3e} s'.format(endTime-startTime));</span>
本节到此结束,欲知后事如何,请看下回分解。