Python数据结构之栈、队列及二叉树定义与用法浅析
程序员文章站
2022-06-23 22:24:27
本文实例讲述了python数据结构之栈、队列及二叉树定义与用法。分享给大家供大家参考,具体如下:
目前只实现了三种,栈、队列和二叉树,哪天得空继续补吧~
1. 栈...
本文实例讲述了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("*") 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程序设计有所帮助。
上一篇: python获取本机所有IP地址的方法