队列(单端)
只允许一端添加,从另一端去取,是一种先进先出的线性表,允许删除的一端为队头。其和排队买饭是一样的。假设队列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