昨天尝试了python的链表操作,一时意犹未尽,就连续写了几行python堆栈与队列的代码。当然python作为高级语言,一般都要使用到类。在抒写代码之前,首先要对堆栈和队列两种数据结构进行分析,提取出各自类的特征属性(数据和方法)。
class Stack:
def __init__(self,.top.):
# top指针
def push(self,data):
#data入栈
def pop(self):
#data 出栈
return data
def isEmpty(self):
#堆栈判空
以上是堆栈类的简易代码,里面的数据和方法都是堆栈的基本特征和操作。同样依据这一方法,给出如下的Queue类的简易代码:
class Stack:
def __init__(self,head.tail):
# head 节点
# tail 节点
def enqueue(self,data):
#data入对
def dequeue(self):
#data 出对
return data
def isEmpty(self):
#队列判空
剩下就是类中的方法实现了。当然了需要明白stack先进后出,queue先进先出,不过这是小事,稍微提醒自己以下。MyStack类以及MyQueue类具体实现如下:
class MyStack:
def __init__(self,top = 0):
self.top = top
self.size = 0
def push(self, data):
tmp_node = Node(data, None)
if self.size == 0:
self.top = tmp_node
self.size += 1
return
tmp_node.p_next = self.top
self.top = tmp_node
self.size += 1
def pop(self):
if self.isEmpty():
print "The Stack is already empty!"
return
tmp_value = self.top.data
self.top = self.top.p_next
self.size -= 1
return tmp_value
def isEmpty(self):
return self.top is None
class MyQueue:
def __init__(self, head = 0, tail = 0):
self.head = head
self.tail = tail
self.size = 0
def enqueue(self,data):
tmp_node = Node(data, None)
if self.isEmpty():
self.head = tmp_node
self.tail = tmp_node
self.head.p_next = self.tail
self.tail.p_next = None
self.size += 1
return
self.tail.p_next = tmp_node
self.tail = self.tail.p_next
self.size += 1
def dequeue(self):
if self.isEmpty():
print "Queue is empty!"
return
tmp_data = self.head.data
self.head = self.head.p_next
self.size -= 1
return tmp_data
def isEmpty(self):
return self.size == 0
需要说一句的是,queue类的实现采用了和stack类一样的模式方法,但是这不是唯一一种,用两个stack来模仿queue也未尝不可,仅需要queue类中实例化2个stack(s1,s2),剩下的所有操作皆可由s1、s2配合完成。代码也非常简单,就不贴出来了....