用Python实现基本数据结构——栈与队列

来源:互联网 发布:禁止来宾用户安装软件 编辑:程序博客网 时间:2024/05/22 01:33

转自:http://sjlovechina.blog.163.com/blog/static/123368598201111169211721/

最近学习《算法导论》,看了栈与队列,觉得用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(item)
07     
08     def pop(self) :
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 = []
30     
31     def enqueue(self, item) :
32         self.queue.append(item)
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
51     
52     def length(self) :
53         return len(self.queue)
54         
55     def isempty(self) :
56         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 
05 s = basicds.Stack()    # get a stack
06 q = basicds.Queue()    # get a queue
07 
08 
09 for i in range(10) :
10     s.push(i)
11     q.enqueue(i)
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()

运行结果:
用Python实现基本数据结构——栈与队列 - Jesse - ONE PIECE

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 合同保证金单据丢了怎么办 公司注销期间发现欠税怎么办 公司注销后银行账户怎么办 注销公司营业执照和公章丢失怎么办 工商核名过期了怎么办 核名后的许可没办下来怎么办 重庆公司核名有同名的怎么办 新电视不全屏怎么办左右有黑边 所学类别找不到音乐表演怎么办 公司口头通知不续签合同怎么办 雪纺衬衣皱了怎么办 狗打架受伤怎么办泰迪 大狗打架破了怎么办 舌头上长溃疡怎么办吃什么药 悠悠球不回弹怎么办啊 围棋遇到对方不停围堵怎么办? s围棋业余四段想提升怎么办 wps禁止创建分享链接怎么办 驾驶人开车违章不认可怎么办 京东白条退货分期服务费怎么办 新车年检标丢了怎么办 异地违章罚单丢了怎么办 异地现场违章罚单丢了怎么办 新车没有牌照过停车杆怎么办 驾照换证时间过了怎么办 杭州告知单丢了怎么办 电工证过了复审日期怎么办 大人有居住证小孩没有怎么办 异地补办身份证没有暂住证怎么办 挂科了心里难受怎么办 c1升b2考不过怎么办 b2驾照扣了1分怎么办 红绿色盲驾考怎么办 驾驶证忘带被交警查了怎么办 车子被扣45分怎么办 驾照被扣在外省交警支队怎么办 从渭南把驾照转到西安怎么办 a1a2驾驶证扣3分怎么办 车辆累计扣12分怎么办 驾照扣了40分怎么办 驾驶证扣了30分怎么办