一、栈
1.概念
-
首先,栈是一种运算受限的线性表
-
其次,栈仅允许在表的一端进行插入和删除数据
-
这一端称为栈顶,另一端称为栈底
-
处理数据符合先进后出的特点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cf5eZ4GR-1604711897508)(C:\Users\lzq\AppData\Roaming\Typora\typora-user-images\image-20200906113338804.png)]
2.作用
-
栈是计算机系统里面CPU结构的一部分
-
为了在使用CPU寄存器时能够节省空间,而使用栈
-
局部变量:调用函数局部变量进栈,函数执行完局部变量出栈
3.代码实现
# 只允许尾部插入删除数据,且遵顼先进后出
class Stack(object):
# 栈:先进后出
def __init__(self):
self.items = []
# 进栈
def push(self, item):
self.items.append(item)
# 出栈
def pop(self):
self.items.pop()
# 遍历
ded travel(self):
for i in self.items:
print(i)
二、队列
1.概念
-
队列是一种特殊的线性表
-
只允许在表的头部(front)进行删除操作,在表的尾部{rear进行插入操作
-
插入操作端称为队尾,删除操作端称为队头
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qGRYSZdo-1604711897510)(C:\Users\lzq\AppData\Roaming\Typora\typora-user-images\image-20200906115448000.png)]
2.作用
-
相当于排队,按顺序执行
-
任务处理类的系统:会先将用户的请求存在队列中,后端开启多个程序从队列中取任务进行处理
-
起到了缓冲压力的作用
3.代码实现
# 只能通过一端添加,一端删除数据
class Queue(object):
# 队列 尾进头出
def __init__(self):
self.items = []
# 尾部添加数据
def enqueue(self, item):
self.items.append(item)
# 头部出数据
def dequeue(self):
self.items.pop(0)
# 队列是否为空
def is_empty(self):
return self.items == []
# 队列的大小
def size(self):
return len(self.items)
4.双端队列
- 具有队列和栈两种性质的线性结构
- 限制插入和删除操作在表的两端进行
class Deque(object):
"""双端队列"""
def __init__(self):
self.items = []
def is_empty(self):
"""判断是否为空"""
return self.item == []
def size(self)
"""返回队列大小"""
return len(self.items)
def add_front(self, item):
"""头部添加"""
self.items.insert(0,item)
def add_rear(self, item):
"""尾部添加"""
self.items.append(item)
def pop_front()
"""头部删除"""
self.items.pop(0)
def pop_rear()
"""尾部删除"""
self.items.pop
“”
self.items.pop(0)
def pop_rear()
"""尾部删除"""
self.items.pop