python有栈的概念吗_Python数据结构之栈、队列及二叉树定义与用法浅析

本文实例讲述了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()

运行结果:

c8c3d46788a9465c7a53b764baac6379.png

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()

运行结果:

68c257bbbcba0da18625c2c858a2211e.png

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)

运行结果:

e930f3bfeb06daf17f16bb8de2ec83ae.png

后续实现了会慢慢补上~~旧的也会不断改进~~

希望本文所述对大家Python程序设计有所帮助。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值