Python 实现数据结构中的的栈队列
作者:yongxinzlv 时间:2023-01-24 02:14:33
栈(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
标签:python,数据结构,栈,队列
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python入门教程(十)Python布尔值介绍
2022-06-01 18:01:55
![](https://img.aspxhome.com/file/2023/1/81521_0s.png)
SQL 2008 FileStream数据类型
2008-10-28 21:07:00
如何获取SQL Server数据库元数据的方法
2009-01-19 14:00:00
js关于 byval 与 byref 的区别
2007-10-13 10:48:00
如何实现上下翻页?
2010-05-24 18:29:00
python密码学RSA算法及秘钥创建教程
2022-03-20 04:02:34
![](https://img.aspxhome.com/file/2023/3/97253_0s.jpg)
python中xlutils库用法浅析
2023-06-05 15:22:26
pandas object格式转float64格式的方法
2022-05-26 15:58:53
CSS网页布局编码小技巧整理
2009-12-30 16:50:00
使用python实现对元素的长截图功能
2023-11-20 10:27:44
![](https://img.aspxhome.com/file/2023/3/63923_0s.png)
python中绑定方法与非绑定方法的实现示例
2021-01-03 03:59:13
![](https://img.aspxhome.com/file/2023/6/65896_0s.png)
Python3.5字符串常用操作实例详解
2023-08-31 00:25:53
![](https://img.aspxhome.com/file/2023/8/62608_0s.png)
JavaScript 编程引入命名空间
2007-10-11 19:00:00
Python Pycurl的属性与方法案例详解
2022-09-27 04:57:23
使用单通道实现半透明效果
2009-12-12 17:40:00
![](https://img.aspxhome.com/file/UploadPic/200912/12/pic_0-96s.png)
基于tkinter中ttk控件的width-height设置方式
2023-07-04 21:32:20
![](https://img.aspxhome.com/file/2023/3/62563_0s.png)
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2021-11-15 02:29:29
![](https://img.aspxhome.com/file/2023/3/69533_0s.png)
Python中的复杂数据类型(list、tuple)
2023-06-07 10:10:19
![](https://img.aspxhome.com/file/2023/4/90824_0s.png)
网马解密大讲堂——网马解密中级篇(Eval篇)
2009-09-16 16:04:00
Python3自动签到 定时任务 判断节假日的实例
2022-11-15 15:48:48