算法笔记4队列

微信公众号:珷玞的日常

概念

队列:先进先出。只支持两种基本操作:入队,出对。 队列作为一种基础的数据结构,应用也很广泛。

循环队列和链式队列

队列和栈一样,可以使用数组实现,也可以使用链表实现。用数组实现的叫做顺序队列,用链表实现的叫做链式队列。

# 4-1 顺序队列

# 实现线性队列

# 实现线性队列

class Queue():

   def __init__(self,size):

       self.size = size

       self.head = 0

       self.tail = 0

       self.queue = [0]*self.size



   def enqueue(self,x):

       if self.isfull():

           raise Exception("queue is full")

       else:

           self.queue[self.tail] = x

           self.tail += 1



   def dequeue(self):

       if self.isempty():

           raise Exception("queue is empty")

       else:

           self.queue[self.head] = 0

           self.head += 1

           self.reform()





   def isfull(self):

       return self.tail - self.head == self.size



   def isempty(self):

       return self.tail == self.head



   def reform(self):

       # 每次出队列一个都将队列向前移动一位

       for i in range(self.size - 1):

           self.queue[i] = self.queue[1+i]

       self.queue[-1] = 0

       self.tail = self.tail - 1

       self.head = 0

   def showQueue(self):

       print(self.queue)


# 4-2 链式队列

# 链式队列

class Node():

   def __init__(self,data=None):

       self.data = data

       self.next = None



class LQueue():

   def __init__(self):

       self.head = Node()

       self.tail = Node()

       self.size = 0



   def enqueue(self,x):

       tem = Node(x)

       if self.isempty():

           self.head = tem

           self.tail = tem

       else:

           self.tail.next = tem

           self.tail = tem

       self.size +=1

   def dequeue(self):

       if self.isempty():

           return

       else:

           self.head = self.head.next

           self.size -=1

   def isempty(self):

       return self.size == 0

   def showQueue(self):

       if self.isempty():

           print("kongde")

       else:

           print('begin')

           size = self.size

           temp = self.head

           while size>0:

               print(temp.data)

               temp = temp.next

               size -= 1

           print('over')

循环队列

在使用顺序队列的时候,由于数组在一次出队后都需要移动,循环列表解决了这个问题。

# 4-3 循环队列

class Queue():

   def __init__(self,size):

       # 队列实际大小比使用大小的大一个,因为最后一个是空的

       self.size = size + 1

       self.head = 0

       self.tail = 0

       self.queue = [0]*self.size



   def enqueue(self,x):

       if self.isfull():

           print("queue is full")

           return

       else:

           self.queue[self.tail] = x

           self.tail = (self.tail+1) % self.size



   def dequeue(self):

       if self.isempty():

           print("queue is empty")

           return

       else:

           self.queue[self.head] = 0

           self.head = self.head+1



   def isfull(self):

       return (self.head - self.tail) % self.size == 1



   def isempty(self):

       return self.head == self.tail

   def showQueue(self):

       print(self.queue)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿德罗斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值