栈 stack
- last in first out (LIFO) 后进先出
- 仅在表尾进行插入和删除操作的线性表
- 入 (压栈,进栈,入栈) push
- 出 (弹出,出栈) pop
- 栈的本质是一个特殊的线性表(数组),特殊在于只在表尾(栈顶)进行操作
- 有顺序栈 和 链栈 两种
队列 queue
- First in First out (FIFO) 先进先出
- 只能在表尾进行插入,只能在表头进行删除
- 队列也是一种线性表
- 顺序队列和链对 以循环顺序队列更加常见
使用python 列表实现一个队列
class Myqueue:
def __init__(self):
self.queue=list()
def put(self, num):
if self.queue:
self.queue.append(num)
def get(self):
if self.queue:
return self.queue.pop(0)
def qsize(self):
return len(self.queue)
简单的原理实现,还存在有些问题
- 多线程获取的时候会冲突
- pop 方式移动列表在列表数据长度很长时,效率很差
python 使用字典实现 链式队列
import random
class linkQueue:
def __init__(self):
self.queue = {}
self.first = 0
self.last = 0
def put(self, num):
# 生成唯一键
key = "".join(random.sample(string.ascii_letters + string.digits, 12))
value = [key, num]
if not self.queue:
self.queue.update({self.first:value})
self.last = key
else:
self.queue.update({self.last:value})
self.last = key
def get(self):
if not self.queue:
return "error"
value = self.queue.pop(self.first)
# 指向下一个地址
self.first = value[0]
return value[1]
def qsize(self):
return len(self.queue)