小言_互联网的博客

数据结构Python实现-队列

322人阅读  评论(0)

队列(单端)

只允许一端添加,从另一端去取,是一种先进先出的线性表,允许删除的一端为队头。其和排队买饭是一样的。假设队列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或其它名字都可以,但是约定成俗(为了和其他编程语言统一,减少理解难度),不要搞另类,大家会不明白的。


转载:https://blog.csdn.net/qq_40660825/article/details/101466933
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场