python数据结构之栈与队列
python数据结构之栈与队列
用list实现堆栈stack
堆栈:后进先出
如何进?用append
如何出?用pop()
>>>
>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]
用list实现队列queue
队列:先进先出
如何进?用append
如何出?用popleft()
>>>
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # Terry arrives
>>> queue.append("Graham") # Graham arrives
>>> queue.popleft() # The first to arrive now leaves
'Eric'
>>> queue.popleft() # The second to arrive now leaves
'John'
>>> queue # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])
自定义堆栈
栈是限定仅在表尾进行插入或删除操作的线性表。对于栈来说,表尾称为栈顶,表头称为栈底。不含元素的空表称为空栈。
堆栈ADT(抽象数据类型)一般提供以下接口:
| 函数 | 说明 |
|---|---|
| Stack() | 创建堆栈 |
| push(item) | 向栈顶插入项 |
| pop() | 删除栈顶的项 |
| clear() | 清空堆栈 |
| is_empty() | 判断堆栈是否为空 |
| size() | 返回堆栈中项的个数 |
| top() | 返回栈顶的项 |
| print() | 打印堆栈 |

class Stack(object):
"""堆栈"""
def __init__(self, item = []):
self.item = []
if len(item):
for i in item:
self.item.append(i)
def push(self, item):
self.item.append(item)
def clear(self):
del self.item
def is_empty(self):
return self.size() == 0
def size(self):
return len(self.item)
def print(self):
print(self.item)
def top(self):
return self.item[-1]
def pop(self):
data = self.top()
self.item.pop()
return data
print("创建堆栈")
stack = Stack([1,2,3])
stack.print()
print("向栈顶插入元素")
stack.push(4)
stack.print()
print("判断堆栈是否为空")
print(stack.is_empty())
print("返回堆栈中项的个数")
print(stack.size())
print("返回栈顶的项")
print(stack.top())
print("删除栈顶的项")
stack.pop()
stack.print()
print("清空堆栈")
print(stack.clear())
程序输出:
创建堆栈
[1, 2, 3]
向栈顶插入元素
[1, 2, 3, 4]
判断堆栈是否为空
False
返回堆栈中项的个数
4
返回栈顶的项
4
删除栈顶的项
[1, 2, 3]
清空堆栈
None
自定义队列
队列是一种先进先出的线性表。它只允许在表的一端进行插入,在另一端删除元素。
队列ADT(抽象数据类型)一般提供以下接口:
| 函数 | 说明 |
|---|---|
| Queue() | 创建队列 |
| enqueue(item) | 向队列插入元素 |
| dequeue() | 删除队列的元素 |
| clear() | 清空队列 |
| is_empty() | 判断队列是否为空 |
| size() | 返回队列中项的个数 |
| print() | 打印队列 |
class Queue(object):
"""模拟队列"""
def __init__(self, item = []):
self.item = []
if len(item):
for i in item:
self.item.append(i)
def enqueue(self, item):
self.item.append(item)
def dequeue(self):
self.item.pop(0)
def clear(self):
del self.item
def is_empty(self):
return self.size() == 0
def size(self):
return len(self.item)
def print(self):
print(self.item)
print("创建队列")
queue = Queue([1,2,3])
queue.print()
print("向队列插入元素")
queue.enqueue(4)
queue.print()
print("从队列中删除元素")
queue.dequeue()
queue.print()
print("判断队列是否为空")
print(queue.is_empty())
print("返回队列中项的个数")
print(queue.size())
queue.print()
print("清空队列")
print(queue.clear())
程序输出结果:
创建队列
[1, 2, 3]
向队列插入元素
[1, 2, 3, 4]
从队列中删除元素
[2, 3, 4]
判断队列是否为空
False
返回队列中项的个数
3
[2, 3, 4]
清空队列
None
参考
《数据结构》严蔚敏
https://docs.python.org/3.6/tutorial/datastructures.html#more-on-lists
python数据结构之栈与队列的更多相关文章
- python数据结构之栈、队列的实现
这个在官网中list支持,有实现. 补充一下栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIF ...
- python——python数据结构之栈、队列的实现
这个在官网中list支持,有实现. 补充一下栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIF ...
- Python数据结构之“栈”与“队列”
栈(Stacks): ·定义:是一种只能通过访问其一端来实现的数据存储于检索的线性数据结构,具有后进先出(last in first out,LIFO)的特征 ·主要操作: 1. Stack():建立 ...
- 学习javascript数据结构(一)——栈和队列
前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...
- Python数据结构:栈 队列
栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIFO)的特征 2.队列(queue)是一种具有 ...
- [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)
再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...
- PHP数据结构:栈、队列、堆、固定数组
数据结构:栈 队列: 堆: 固定尺寸的数组:
- 算法与数据结构(二) 栈与队列的线性和链式表示(Swift版)
数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线 ...
- 数据结构之栈和队列及其Java实现
栈和队列是数据结构中非常常见和基础的线性表,在某些场合栈和队列使用很多,因此本篇主要介绍栈和队列,并用Java实现基本的栈和队列,同时用栈和队列相互实现. 栈:栈是一种基于“后进先出”策略的线性表.在 ...
随机推荐
- python 魔法方法(学习过程的笔记)
有小伙伴会问,什么是python的魔法方法,python的魔法方法有什么用呢, 它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两 ...
- win10下移动硬盘位置不可用无法访问
win10下移动硬盘位置不可用无法访问 网上搜索得到的答案是: 请参考以下步骤解决: 1.按Windows+R输入"CHKDSK H: /F /R"(H:是硬盘所在盘符./R 找到 ...
- Thinkphp3.2.3框架下封装公共的函数,例如封装CURL函数来获取接口数据
当我们需要在控制层调用相同的封装函数时,写多次相同的函数,显得代码十分的拉杂,不精简: TP框架有一个很好的机制,可以再Common定义一个function.php函数,当我们在控制层调用的时候直接调 ...
- yum安装mariadb-galera同步
节点 ip地址 hostname 系统版本 程序版本 node1 10.4.90.90 mysql1 db1 ...
- Android学习记录:界面设计
本片文章将记录进行android界面开发时积累的知识 包括 activity全屏 activity跳转 button设计 逐个输入编辑框设计 d0710 合并旧文章总结更新 d0721 添加内容 == ...
- 转:【Java并发编程】之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17348313 happen-before规则介绍 Java语言中有一个"先行发生 ...
- 团队作业4---第一次项目冲刺(ALpha版本)第一天
一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 1.界面 完成登录界面 2.功能 完成数据结构设计及数据交互模块代码 完成爬虫博客页面数据采集模块 四.困难与问题 1.因为要 ...
- 201521123069 《Java程序设计》 第5周学习总结
1. 本章学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 参考资料: 百度脑图 XMind 1.1 1.2 (1)用Arrays.sort ...
- 201521123110 《Java程序设计》第9周学习总结
1. 本周学习总结 2. 书面作业 1.常用异常 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 原来编写代码经常会出现数组访问 ...
- eclipse : java项目中的web.xml( Deployment Descriptor 部署描述文件 )配置说明
context-param.listener.filter.servlet 首先可以肯定的是,加载顺序与它们在 web.xml 配置文件中的先后顺序无关.即不会因为 filter 写在 listen ...