python 使用顺序表实现栈和队列
栈:
# -*- coding: utf-8 -*-
# @author: Tele
# @Time : 2019/04/24 下午 2:33
# 采用list(顺序表)实现栈结构,后入先出
class MyStack:
def __init__(self):
self.__list = list() def is_empty(self):
return self.__list == list() def size(self):
return len(self.__list) # 弹出栈顶元素(删除)
def pop(self):
return self.__list.pop() # 入栈
def push(self, item):
self.__list.append(item) # 返回栈顶元素
def peek(self):
if self.is_empty():
return None
else:
return self.__list[-1] def main():
mystack = MyStack()
mystack.push(1)
mystack.push(2)
mystack.push(3)
mystack.push(4)
mystack.push(5)
print(mystack.peek())
print(mystack.pop())
print(mystack.size())
print(mystack.is_empty()) if __name__ == '__main__':
main()
队列:
# -*- coding: utf-8 -*-
# @author: Tele
# @Time : 2019/04/28 下午 3:16
# 队列,先进先出
# 设定list的头即为队列的头,list的尾即为队列的尾
class Queue:
def __init__(self):
self.__list = list() def is_empty(self):
return self.__list == list() def size(self):
return len(self.__list) # 入队
def enqueue(self, item):
self.__list.append(item) # 出队,从队列头部删除一个元素
def dequeue(self):
return self.__list.pop(0) def main():
queue = Queue()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
print(queue.dequeue())
print(queue.is_empty())
print(queue.size()) if __name__ == '__main__':
main()
双向队列:
# -*- coding: utf-8 -*-
# @author: Tele
# @Time : 2019/04/28 下午 3:24
# 双端队列,类似两个栈的栈底合并在一起
# 设定list的头即为队列的头,list的尾即为队列的尾
class DoubleQueue:
def __init__(self):
self.__list = list() def is_empty(self):
return self.__list == list() def size(self):
return len(self.__list) # 在队头添加元素
def add_front(self, item):
self.__list.insert(0, item) # 在队尾添加元素
def add_rear(self, item):
self.__list.append(item) # 从队头删除元素
def remove_front(self):
return self.__list.pop(0) # 从队尾删除元素
def remove_rear(self):
return self.__list.pop() def main():
dq = DoubleQueue()
dq.add_front(1)
dq.add_front(2)
dq.add_rear(1000)
print(dq.size())
print(dq.is_empty())
print(dq.remove_front())
print(dq.remove_rear()) if __name__ == '__main__':
main()
队列的头尾选择与list的头尾对应关系应根据实际需要,如入队的频率高(在队尾添加元素),则队列的的尾就是list的尾,因为append的的复杂度为O(1),反之出队的频率高(从队头删除一个元素),则队列的头部为list的尾部,pop的复杂度为O(1)
python 使用顺序表实现栈和队列的更多相关文章
- python---用顺序表实现双端队列
class Dqueue(object): """双端队列""" def __init__(self): self.__list = [] ...
- 行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)
行逻辑链接,带行链接信息.程序有空指针BUG,至今未解决.还是C/C++适合描述算法数据结构.以后复杂的算法还是改用C/C++吧. 有BUG的代码,总有一天会换成没有BUG的. package 行逻辑 ...
- python---用顺序表实现队列
class Queue(object): """队列""" def __init__(self): self.__list = [] def ...
- Python数据结构 将列表作为栈和队列使用
列表作为栈使用 Python列表方法使得列表作为堆栈非常容易,最后一个插入,最先取出(“后进先出”).要添加一个元素到堆栈的顶端,使用 append() .要从堆栈顶部取出一个元素,使用 pop() ...
- Python列表操作——模拟实现栈和队列
1.实现栈: stack=[] def pushit(): stack.append(raw_input('Enter New String:').strip()) def popit(): if l ...
- Python :用两个栈实现队列
转自:http://blog.csdn.net/Lynette_bb/article/details/75092745 牛客网上的剑指 offer的在线编程: 题目描述 用两个栈来实现一个队列,完成队 ...
- Python 如何用列表实现栈和队列?
1.栈结构,其实就是一个后进先出的一个线性表,只能在栈顶压入或弹出元素.用列表表示栈,则向栈中压入元素,可以用列表的append()方法来实现,弹出栈顶元素可以用列表的pop()方法实现. >& ...
- python数据结构与算法第六天【栈与队列】
1.栈和队列的原理 栈:后进先出(LIFO),可以使用顺序表和链表实现 队列:先进先出(FIFO),可以使用顺序表和链表实现 2.栈的实现(使用顺序表实现) #!/usr/bin/env python ...
- Python 实现栈与队列
#基于Python2.7 #基于顺序表实现 #发现用Python写题时,没有像写C++时方便的STL可用,不过查阅资料之后发现用class实现也很简洁,不过效率应该不是很高 Python实现栈并使用: ...
随机推荐
- 谈谈Command对象与数据检索
摘要 到目前为止,我相信大家对于ADO.NET如何与外部数据源建立连接以及如何提高连接性能等相关知识已经牢固于心了.连接对象作为ADO.NET的主力先锋,为用户与数据库交互搭建了扎实的桥梁.它的一生是 ...
- 基于EmguCV的摄像机标定及矫正
标签: EmguCV摄像头标定C# 2015-05-03 14:55 501人阅读 评论(6) 收藏 举报 分类: C# 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] ...
- 【hihocoder 1564】同步H公司的终端
[链接]http://hihocoder.com/problemset/problem/1564 [题意] 在这里写题意 [题解] 如下图 (上图中节点旁边的红色数字为它的权值) 从叶子节点开始考虑. ...
- linux删除svn版本号库
当使用了svn版本号控制系统后每一个文件夹下都会有一个.svn文件夹存在,开发完当交付产品或者上传到server时一般要把这些文件夹删除.事实上在linux删除这些文件夹是非常easy的,命令例如以下 ...
- java方法调用之动态调用多态(重写override)的实现原理——方法表(三)
上两篇篇博文讨论了java的重载(overload)与重写(override).静态分派与动态分派.这篇博文讨论下动态分派的实现方法,即多态override的实现原理. java方法调用之重载.重写的 ...
- 一个DDOS病毒的分析(一)
一.基本信息 样本名称:Rub.EXE 样本大小:21504 字节 病毒名称:Trojan.Win32.Rootkit.hv 加壳情况:UPX(3.07) 样本MD5:035C1ADA4BACE78D ...
- 硬件——nrf51822第一篇,GPIO的使用
未完,待续...... 本实现是基于一个开发箱,包括:综合应用开发系统主板XT-EDU-AK 1套: 手持终端系统 XT-EDU-HK 1套: GPIO操作 工程: 这是一个关于流水灯的程序: 我 ...
- stm32单片机的封装
接着去查看VREF...
- php课程 10-35 php实现文件上传的注意事项是什么
php课程 10-35 php实现文件上传的注意事项是什么 一.总结 一句话总结:记得限制大小和类型,还有就是用move_uploaded_file($sfile,$dfile);函数把上传到php临 ...
- thinkphp3.1课程 1-2 thinkphp中入口文件的实质是什么
thinkphp3.1课程 1-2 thinkphp中入口文件的实质是什么 一.总结 一句话总结:在thinkphp中,我们访问的始终是入口文件,并没有主动去访问任何一个其他文件,只不过在入口文件体内 ...