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实现栈并使用: ...
随机推荐
- amazeui学习笔记三(你来我往1)--常见问题FAQs
amazeui学习笔记三(你来我往1)--常见问题FAQs 一.总结 1.DOM事件失败:记得加上初始化代码,例如 图片轮播 $('#my-slider').flexslider(); 2.jquer ...
- Windows Route 路由表命令整理
Windows Route 路由表命令 在本地 IP 路由表中显示和修改条目. 语法 route [-f] [-p] [Command [Destination] [mask Netmask] [Ga ...
- ASM学习笔记--ASM 4 user guide 第二章要点翻译总结
参考:ASM 4 user guide 第一部分 core API 第二章 类 2.1.1概观 编译后的类包括: l 一个描述部分:包括修饰语(比如public或private).名字.父类.接口 ...
- AbstractQueuedSynchronizer的介绍和原理分析
简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过 ...
- 【例题 6-13 UVA - 1103】Ancient Messages
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每个图案里面的"洞"的个数都是不同的. 则可以根据这个判别每个图像是什么. 先用dfs确定轮廓之后. 再从每个白 ...
- Linux 内核源代码分析 chap 2 存储管理 (5)
物理页面分配 linux 内核 2.4 中有 2 个版本号的物理页面分配函数 alloc_pages(). 一个在 mm/numa.c 中, 还有一个在 mm/page_alloc.c 中, 依据条件 ...
- C语言创建删不掉的目录
上一篇博客写了一个杀不死的进程,如今再写一个删不掉的目录(文件同理),所谓删不掉不是真的删不掉而是删掉后立即又一次创建. 代码例如以下: #include <stdio.h> #inclu ...
- 火狐与IE的7个JavaScript差异
作者注:本篇文章发表于2009.04.27,是一篇关于讨论Javascript在IE6.IE7和FF2+.FF3.0之间的存在的问题的文章. 虽然须要用冗长的JavaScript代码去识别特定的浏览器 ...
- swift Reflection(字典转模型)变量继承本类类名解决办法
class IWStatus: Reflect { var source: NSString! var created_at: NSString! var idstr: NSString! var u ...
- ECMAScript5和ECMAScript6_浏览器支持情况
ECMAScript5浏览器支持情况: Opera 11.60 Internet Explorer 9* Firefox 4 Safari 5.1** Chrome 13 * IE9不支持严格模式 - ...