Python 实现数据结构中的的栈队列
作者:yongxinzlv 发布时间:2023-01-24 02:14:33
标签:python,数据结构,栈,队列
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈可以用顺序表实现,也可以用链表实现,这里为了方便就用顺序表实现。
# -*- coding: utf-8 -*-
class Stack(object):
"""栈的实现类"""
def __init__(self):
self.__items = []
# push(item) 添加一个新的元素item到栈顶
def push(self, item):
self.__items.append(item)
# pop() 弹出栈顶元素
def pop(self):
return self.__items.pop()
# peek() 返回栈顶元素
def peek(self):
return self.__items[self.size() - 1]
# is_empty() 判断栈是否为空
def is_empty(self):
return self.__items == []
# size() 返回栈的元素个数
def size(self):
return len(self.__items)
if __name__ == '__main__':
stack = Stack()
stack.push(2)
stack.push(3)
stack.push(4)
stack.push(5)
tmp = stack.pop()
print(tmp)
print(stack.peek())
print(stack.size())
print(stack.is_empty())
队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表
# -*- coding: utf-8 -*-
class Queue(object):
"""队列的实现"""
def __init__(self):
self.__items = []
# push(item) 往队列中添加一个item元素
def push(self, item):
self.__items.insert(0, item)
# pop() 从队列头部删除一个元素
def pop(self):
return self.__items.pop()
# is_empty() 判断一个队列是否为空
def is_empty(self):
return self.__items == []
# size() 返回队列的大小
def size(self):
return len(self.__items)
if __name__ == '__main__':
queue = Queue()
queue.push(1)
queue.push(2)
queue.push(3)
queue.push(4)
print(queue.pop())
print(queue.pop())
print(queue.pop())
print(queue.size())
print(queue.is_empty())
双端队列
双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。
双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。
# -*- coding: utf-8 -*-
class Deque(object):
"""双端队列"""
def __init__(self):
self.__items = []
# add_front(item) 从队头加入一个item元素
def add_front(self, item):
self.__items.insert(0, item)
# add_rear(item) 从队尾加入一个item元素
def add_rear(self, item):
self.__items.append(item)
# remove_front() 从队头删除一个item元素
def remove_front(self):
return self.__items.pop(0)
# remove_rear() 从队尾删除一个item元素
def remove_rear(self):
return self.__items.pop()
# is_empty() 判断双端队列是否为空
def is_empty(self):
return self.__items == []
# size() 返回队列的大小
def size(self):
return len(self.__items)
def print_items(self):
print(self.__items)
if __name__ == '__main__':
deque = Deque()
deque.add_front(1)
deque.add_front(3)
deque.add_front(5)
deque.print_items()
deque.add_rear(9)
deque.add_rear(8)
deque.add_rear(7)
deque.print_items()
print(deque.is_empty())
print(deque.remove_front())
print(deque.remove_rear())
deque.print_items()
总结
以上所述是小编给大家介绍的Python 实现数据结构中的的栈队列,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://juejin.im/post/5cdc2321e51d453a543f9e67
0
投稿
猜你喜欢
- 1.zip用法简介在python 3.x系列中,zip方法返回的为一个zip object可迭代对象。class zip(object):&
- 大家经常用的是Adodb.Stream,但这时就有个缺陷,就是不支持断点续传了。经常看到flashget中是红脸(即不支持断点续传)其实支持
- py文件不是html文件,当然不能在浏览器里打开。py文件可以用任何编辑器打开,py文件是和txt一样都是普通的文本文件,只是python解
- 一、前言CodeIgniter 是一个简单快速的PHP MVC框架。EllisLab 的工作人员发布了 CodeIgniter。CodeIg
- ThinkPHP模板的empty标签用于判断模板变量是否为空值。ThinkPHP模板empty标签用来判断模板变量是否为空值,其功能相当于P
- 快到 520 了,分享几段 520 专属 Python 代码,不多说了,下面直接上货。No.1效果:主要代码:import tur
- PHP程序员应该都知道连接MySQL数据库可以使用mysql_pconnect(永久连接)函数,使用数据库永久连接可以提高效率,但是实际应用
- 背景在注册或者登陆场景下,经常会遇到需要输入图片验证码的情况,最经典的就是12306买火车票。图片验证码的破解还是有一定难度的,而且如果配合
- 以前在一个图书类网站看到这样一个功能:客户可以按条件搜索书目的信息,服务器会将符合条件的信息筛选出来保存为一个Excel文件供客户下载。今天
- 文章目录 微信登录问题Python chrome driver操作导入库并声明浏览器:完整流程:用js来预约生成js代码 主函数——程序出错
- 基本概念数字图像定义对于一幅图像,我们可以将其放入坐标系中,这里取图像左上定点为坐标原点,x 轴向右,和笛卡尔坐标系x轴相同;y 轴向下,和
- W3C 发布 XPath 1.0 规范是在 1999 年,那时我还正在备战高考,不料十年后,我才开始学习XPath,落后的差距不是一般的大(
- 索引是提高数据查询最有效的方法,也是最难全面掌握的技术,因为正确的索引可能使效率提高10000倍,而无效的索引可能是浪费了数据库空间,甚至大
- 最简单的:<textarea name="A" cols="45" rows="2&
- 借助 GitHub 的网络钩子webhook,开发者可以创建很多有用的服务。从触发一个 Jenkins 实例上的 CI(持续集成) 任务到配
- 本文实例讲述了Python下载指定页面上图片的方法。分享给大家供大家参考,具体如下:#!/usr/bin/python #coding:ut
- for x in ...循环 就是把每个元素代入变量x,然后执行缩进块的语句。range()函数,可以生成一个整数序列,再通过list()函
- 这篇论坛文章(赛迪网技术社区)主要介绍了数据仓库基本报表制作过程中的SQL写法,详细内容请参考下文:在数据仓库的基本报表制作过程中,通常会使
- 更新多个对象例如说我们现在想要将Apress Publisher的名称由原来的”Apress”更改为”Apress Publishing”。
- 一、理解装饰器所有东西都是对象(函数可以当做对象传递)由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。de