本文实例讲述了Python数据结构之栈、队列及二叉树定义与用法。分享给大家供大家参考,具体如下:
目前只实现了三种,栈、队列和二叉树,哪天得空继续补吧~
1. 栈
#栈
class Stack:
def __init__(self,size = 16):
self.stack = []
self.size = size
self.top = -1
def setSize(self, size):
self.size = size
def isEmpty(self):
if self.top == -1:
return True
else:
return False
def isFull(self):
if self.top +1 == self.size:
return True
else:
return False
def top(self):
if self.isEmpty():
raise Exception("StackIsEmpty")
else:
return self.stack[self.top]
def push(self,obj):
if self.isFull():
raise Exception("StackOverFlow")
else:
self.stack.append(obj)
self.top +=1
def pop(self):
if self.isEmpty():
raise Exception("StackIsEmpty")
else:
self.top -= 1
return self.stack.pop()
def show(self):
print(self.stack)
s = Stack(5)
s.push(1)
s.push(2)
s.push(3)
s.push(4)
s.push(5)
s.show()
s.pop()
s.show()
s.push(6)
s.show()
运行结果:
2. 队列
#队列
class Queue:
def __init__(self,size = 16):
self.queue = []
self.size = size
self.front = 0
self.rear = 0
def isEmpty(self):
return self.rear == 0
def isFull(self):
if (self.front - self.rear +1) == self.size:
return True
else:
return False
def first(self):
if self.isEmpty():
raise Exception("QueueIsEmpty")
else:
return self.queue[self.front]
def last(self):
if self.isEmpty():
raise Exception("QueueIsEmpty")
else:
return self.queue[self.rear]
def add(self,obj):
if self.isFull():
raise Exception("QueueOverFlow")
else:
self.queue.append(obj)
self.rear += 1
def delete(self):
if self.isEmpty():
raise Exception("QueueIsEmpty")
else:
self.rear -=1
return self.queue.pop(0)
def show(self):
print(self.queue)
q = Queue(3)
q.add(1)
q.add(2)
q.show()
q.delete()
q.show()
运行结果:
3. 二叉树
#队列
class Queue:
def __init__(self,size = 16):
self.queue = []
self.size = size
self.front = 0
self.rear = 0
def isEmpty(self):
return self.rear == 0
def isFull(self):
if (self.front - self.rear +1) == self.size:
return True
else:
return False
def first(self):
if self.isEmpty():
raise Exception("QueueIsEmpty")
else:
return self.queue[self.front]
def last(self):
if self.isEmpty():
raise Exception("QueueIsEmpty")
else:
return self.queue[self.rear]
def add(self,obj):
if self.isFull():
raise Exception("QueueOverFlow")
else:
self.queue.append(obj)
self.rear += 1
def delete(self):
if self.isEmpty():
raise Exception("QueueIsEmpty")
else:
self.rear -=1
return self.queue.pop(0)
def show(self):
print(self.queue)
#二叉树
class BinaryTreeNode:
def __init__(self,data,left,right):
self.left = left
self.data = data
self.right = right
class BinaryTree:
def __init__(self):
self.root = None
def makeTree(self,data,left,right):
self.root = BinaryTreeNode(data,left,right)
#left.root = right.root = None
def isEmpty(self):
if self.root is None:
return True
else:
return False
def preOrder(self,r):
if r.root is not None:
print(r.root.data)
if r.root.left is not None:
self.preOrder(r.root.left)
if r.root.right is not None:
self.preOrder(r.root.right)
def inOrder(self,r):
if r.root is not None:
if r.root.left is not None:
self.inOrder(r.root.left)
print(r.root.data)
if r.root.right is not None:
self.inOrder(r.root.right)
def postOrder(self,r):
if r.root is not None:
if r.root.left is not None:
self.preOrder(r.root.left)
if r.root.right is not None:
self.preOrder(r.root.right)
print(r.root.data)
def levelOrder(self,a):
q = Queue()
r = a
while r is not None:
print(r.root.data)
if r.root.left is not None:
q.add(r.root.left)
if r.root.right is not None:
q.add(r.root.right)
if q.isEmpty():
print("empty")
r = None
else:
r = q.delete()
r = BinaryTree()
ra = BinaryTree()
ra.makeTree(2,None,None)
rb = BinaryTree()
rb.makeTree(3,None,None)
r.makeTree(1,ra,rb)
print("前序遍历")
r.preOrder(r)
print("中序遍历")
r.inOrder(r)
print("后序遍历")
r.postOrder(r)
print("层级遍历")
r.levelOrder(r)
运行结果:
后续实现了会慢慢补上~~旧的也会不断改进~~
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。


