以后用python研究算法,用python做一些练习。
Queue和Stack python有build in,Dlist没有。
Dlist:
#!/usr/bin/python
#coding=utf-8
'''
dual direction list
'''
class MyNode:
def __init__ (self,Data=None,PreNode=None,NextNode=None):
self.Data=Data
self.PreNode=PreNode
self.NextNode=NextNode
class MyDList:
def __init__ (self,head):
self.head=head
def forward_trace(self,node):
if node:
print(node.Data,end=",")
self.forward_trace(node.NextNode)
def reverse_trace(self,node):
if node:
print(node.Data,end=",")
self.reverse_trace(node.PreNode)
def show(self):
print("forward_trace")
self.forward_trace(self.head)
print("\nreverse_trace")
self.reverse_trace(self.find_tear(self.head))
def find_tear(self,node):
if node.NextNode == None:
return node
else:
return self.find_tear(node.NextNode)
def add_tear(self,node_add):
node_tear=self.find_tear(self.head)
# print(node_tear)
node_tear.NextNode=node_add
node_add.PreNode=node_tear
if __name__ == '__main__':
n0=MyNode(0,None,None)
n1=MyNode(1,None,None)
n2=MyNode(2,None,None)
n3=MyNode(3,None,None)
n4=MyNode(4,None,None)
n5=MyNode(5,None,None)
dlist=MyDList(n0)
dlist.add_tear(n1)
dlist.add_tear(n2)
dlist.add_tear(n3)
dlist.add_tear(n4)
dlist.add_tear(n5)
dlist.show()
Queue:
#!/usr/bin/python
# coding=utf-8
'''
' stack
'''
class Queue:
def __init__(self, size=16):
self.stack = []
self.size = size
self.length=0
def isEmpty(self):
if len(self.stack) == 0 :
return True
else:
return False
def isFull(self):
if len(self.stack) == self.size:
return True
else:
return False
def add(self, obj):
if self.isFull():
raise Exception("QueueOverFlow")
else:
self.stack.append(obj)
def delete(self):
if self.isEmpty():
raise Exception("QueueIsEmpty")
else:
self.stack=self.stack[1:len(self.stack)]
def show(self):
print(self.stack)
q = Queue()
q.show()
q.add(1)
q.add(2)
q.add(3)
q.show()
q.delete()
q.delete()
q.delete()
q.show()
Stack:
#!/usr/bin/python
#coding=utf-8
class Stack:
def __init__(self, size=16):
self.stack = []
self.size = size
self.length=0
def isEmpty(self):
if len(self.stack) == 0 :
return True
else:
return False
def isFull(self):
if len(self.stack) == self.size:
return True
else:
return False
def add(self, obj):
if self.isFull():
raise Exception("StackOverFlow")
else:
self.stack.append(obj)
def delete(self):
if self.isEmpty():
raise Exception("StackIsEmpty")
else:
self.stack=self.stack[0:len(self.stack)-1]
def show(self):
print(self.stack)
if __name__ == '__main__':
s = Stack(3)
s.add(1)
s.add(2)
s.show()
s.delete()
s.show()
s.add(6)
s.show()
s.delete()
s.delete()
s.show()