数据结构Python实现-队列

队列(单端)

只允许一端添加,从另一端去取,是一种先进先出的线性表,允许删除的一端为队头。其和排队买饭是一样的。假设队列q={a1,a2,a3,a4,…an},那么a1就是队头元素,an是队尾元素,这样删除从a1开始,插入时总是从an之后,第一个出队列的是a1,新进来的在an后面。

队列操作(单端)

  • Queue()创建一个空的队列
  • enqueue(item)往队列添加一个item元素
  • dequeue()从队头删除一个元素
  • is_empty()判断队列是否为空
  • size()返回队列的大小

队列(双端)

双端队列具有队列和栈的性质的数据结构。双端 队列的元素可以从两端弹出,其插入和删除操作可以在表的两端进行。如果只看一端,那就类似于栈。

单端队列代码实现

class Queue(object):
    def __init__(self):
        self._list=[]
        
    def enqueue(self,item):
        self._list.append(item)
        
    def dequeue(self):
        if self._list:
           return self._list.pop(0)
        else:
           return None;  
    def size(self):
        return len(self._list)
               
    def is_empty(self):
        return self._list==[]
     
if __name__ == '__main__':
      s=Queue()
      s.enqueue(1)
      s.enqueue(2)
      s.enqueue(3)
      s.enqueue(4)
      print(s.dequeue())
      print(s.dequeue())
      print(s.dequeue())
      print(s.size())

Queue()创建一个空的队列
enqueue(item)往队列添加一个item元素
dequeue()从队头删除一个元素
is_empty()判断队列是否为空
size()返回队列的大小

队列(双端)

  • Deque() 创建一个空的双端队列
  • add_front(item)从队头加入一个item元素
  • add_rear(item)从队尾加入一个item元素
  • remove_front()从队头删除一个item元素
  • remove_rear()从队尾删除一个item元素
  • is_empty()判断双端队列是否为空
  • size()返回队列的大小

双端队列代码实现

class Deque(object):

    def __init__(self):
        self.list=[]
   
    def add_front(self,item):
        #从队头添加新的元素
        return self.list.insert(0,item)
     
    def add_rear(self,item):
        #从队尾添加新的元素
        return self.list.append(item)
       
        
    def remove_front(self):
        #从队头删除元素
        return self.list.pop(0)
        
    def remove_rear(self):
        #从队尾删除元素
        return  self.list.pop()
    
               
    def is_empty(self):
        return self.list==[]
     
if __name__ == '__main__':
       s=Deque()
       s.add_front(1) 
      
       s.add_rear(2) 
       s.add_front(3)  
       s.add_rear(4) 
       print(s.remove_front())
       print(s.remove_rear())
       print(s.remove_front())
       print(s.remove_rear())
自己敲代码遇到的问题

TypeError: add_rear() takes 1 positional argument but 2 were given
TypeError: append() takes exactly one argument (0 given)
TypeError: remove_front() takes 0 positional arguments but 1 was given
TypeError: add_front() takes 1 positional argument but 2 were given
遇到了上述这些错误,主要的问题是在写下面代码时没有加self

def add_front(self,item):
    #从队头添加新的元素
    return self.list.insert(0,item)
 
def add_rear(self,item):
    #从队尾添加新的元素
    return self.list.append(item)    
    
def remove_front(self):
    #从队头删除元素
    return self.list.pop(0)

self总结:

def init(self)
self关键字在使用实例时,用于传输实例对象,必须在__init__定义并且初始化,然后通过self传递。首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗(为了和其他编程语言统一,减少理解难度),不要搞另类,大家会不明白的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值