队列与栈的原理及特点

栈 stack

  1. last in first out (LIFO) 后进先出
  2. 仅在表尾进行插入和删除操作的线性表
  3. 入 (压栈,进栈,入栈) push
  4. 出 (弹出,出栈) pop
  5. 栈的本质是一个特殊的线性表(数组),特殊在于只在表尾(栈顶)进行操作
  6. 有顺序栈 和 链栈 两种

队列 queue

  1. First in First out (FIFO) 先进先出
  2. 只能在表尾进行插入,只能在表头进行删除
  3. 队列也是一种线性表
  4. 顺序队列和链对 以循环顺序队列更加常见

使用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)

简单的原理实现,还存在有些问题

  1. 多线程获取的时候会冲突
  2. 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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值