您的位置:首页 > 理论基础 > 数据结构算法

Python笔记——几种数据结构的实现:栈、队列及二叉树

2013-01-21 21:02 981 查看
转自:http://blog.csdn.net/wklken/article/details/6315549

目前只实现了三种,栈、队列和二叉树,哪天得空继续补吧~

毕设忙晕了~~

1.栈

[python] view
plaincopyprint?

#栈

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.队列

[python] view
plaincopyprint?

#队列

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.二叉树

[python] view
plaincopyprint?

#二叉树

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)

运行结果:

后续实现了会慢慢补上~~旧的也会不断改进,希望大家多多给意见~~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: