用python实现基本数据结构栈与队列
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7
用 Python 实现基本数据结构——栈与队列 最近学习《算法导论》 ,看了栈与队列,觉得用 C 实现 没意思 (以前实现过,不过不能通用 ),遂用最近在研究的
Python 实现这两个基本的数据结构! 在一个 basicds 模块里用实现了两个类: Stack 和 Queue 及 其各自所支持的操作,写得比较笨: -) 其实完全可以写个 基类 List ,然后从 List 中派生出类 Stack 和 Queue ,这样做 可以避免一些重复代码,因为两个类有很多类似的方法,比 如 isempty, length 等等。(当然这些改进还是等待下一版再 做吧,: -)以下是模块 basicds 模块源码:
basicds.py
Python 语言 : 高亮代码由发芽网提供
01 class Stack(object) :
02 def __init__(self) : 03 self.stack = [] 04 05 def push(self, item) : 06 self.stack.append(it em)
08 def
pop(self) :
30
09 if self.stack != [] : 10 return self.stack.pop(-1) 11 else : 12 return None 13 14 def top(self) : 15 if self.stack != [] : 16 return self.stack[-1] 17 else : 18 return None 19 20 def length(self) : 21 return len(self.stack) 22 23 def isempty(self) : 24 return self.stack == [] 25 26 27 class
Queue(object) : 28 def __init__(self) : 29 self.queue = []
51
31 def enqueue(self, item) : 32
self.queue.append(ite m) 33
34
def dequeue(self) : 35
if self.queue != [] : 36
return self.queue.pop(0) 37
else : 38
return None 39
40
def head(self) : 41
if self.queue != [] : 42
return self.queue[0] 43
else : 44
return None 45
46
def tail(self) : 47
if self.queue != [] : 48
return self.queue[-1] 49
else : 50
return None 52
def length(self) :
07
08
return self.queue == [] 代码很简单, 不解释不注
释,呵呵〜 使用例程: 注意 basicds.py 必须放在 Python 解释器可以搜索的路径里
使用 import 时会搜索模块) ,这里 basicds.py 和 example.py 在同一个目录下,属于 Python 解释器可搜索范 围。
example.py
Python 语言 : 高亮代码由发芽网提供
01 #!/usr/bin/env python 02 03 import basicds 04
09 for i in range(10) :
53 return len(self.queue) 54 55 def
isempty(self) : 10
s.push(i)
56 05 s = basicds.Stack()
# get a stack 06 q = basicds.Queue()
# get a queue
12 13 # stack s
14 print 'length of stack s is %d' %s.length() 15 print 'top of stack s is %d' %s.top()
16 print 'pop an item %d from stack
s' %s.pop()
17 print 'now, top of stack s is %d' %s.top() 18 19 print '\n' 20
21 #queue q
22 print 'length of queue q is %d' %q.length() 23 print 'head of queue q is %d' %q.head() 24 print 'tail of queue q is %d' %q.tail() 25 print 'del an item %d from queue
q' %q.dequeue()
26 print 'now, head of queue q
is %d' %q.head()
27 print 'tail of queue q is %d' %q.tail() 运行结果:
11
q.enqueue(i )