我是靠谱客的博主 烂漫身影,最近开发中收集的这篇文章主要介绍python基于单链表的链式队列和基于数组的循环队列,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

队列(queue)

  • 队列是一种操作受限“”的线性数据结构,只支持入栈和出栈操作。
  • 栈中的元素只能先进后出(First In First Out)。
  • 队列的出口端叫作队头head,队列的入口端叫作队尾tail
  • 队列的应用非常广泛,特别是一些具有额外特性的队列,如:循环队列、阻塞队列、并发队列

下面为链式队列的实现代码:

class Node(object):
    def __init__(self, value:str = None, next = None):
        self.value = str(value)
        self.next = next

class LinkedQueue(object):
    def __init__(self):
        self.head = None
        self.tail = None
        
    def enqueue(self, value: str):
    	'''入队,将新元素放入队列'''
        new_node = Node(value)
        if self.tail:
            self.tail.next = new_node
        else:
            self.head = new_node
        self.tail = new_node
    
    def dequeue(self):
    	'''出队,将元素移出队列,仅允许在队头移出元素'''
        if self.head:
            value = self.head.value
            self.head = self.head.next
            if not self.head:
                self.tail = None
            return value
            
    def travel(self):
        data = []
        current = self.head
        while current:
            data.append(current.value)
            current = current.next
        return data
            
              
if __name__ == "__main__":
    queue = LinkedQueue()
    for i in range(1,7):
        queue.enqueue(i)
    print("——————当前队列数据:", queue.travel())
    message = ''
    while message != 'q':
        print('''
          *************************************************************************************************************
          **********************************************请选择相应的序号完成相应的操作************************************
          *************************************************************************************************************   
          **         q、退出操作!!!!!!                                                                          ***
          **         1、入队!                                                                                       ***
          **         2、出队!                                                                                       ***
          *************************************************************************************************************
          ''')
        message = input('——————输入下一步要进行的相应操作序号——————:')
        if message == 'q':
            break
        print("——————操作前队列数据:", queue.travel())
        if message == '1':
            value = input('——————请输入要入队的数据:')
            queue.enqueue(value)
        elif message == '2':
            queue.dequeue()
        print("——————操作后队列数据:", queue.travel())

下面为循环队列的实现代码:

class Node(object):
    def __init__(self, value:str = None, next = None):
        self.value = str(value)
        self.next = next

class CircularQueue(object):
    def __init__(self,size=0):
        self.items = [ None for i in range(size+1)]
        self.size = size+1 #队列大小 为了方便判断队满状态,循环队列会浪费一个数组的存储空间
        self.head = 0 #队头位置
        self.tail = 0 #队尾位置
        
    def enqueue(self, value: str):
        if (self.tail + 1) % self.size == self.head: 
            print("——————当前队列已满")
            return False
        tail = self.tail % self.size
        self.items[tail] = str(value)
        self.tail = (self.tail + 1) % self.size
        return True
    
    def dequeue(self):
        if self.head == self.tail:
            return False
        value = self.items[self.head]
        self.head = (self.head + 1) % self.size
        return value
            
    def travel(self):
        #print(f'——————原始数组数据:{self.items}') #为了方便判断队满状态,循环队列会浪费一个数组的存储空间
        if self.tail >= self.head:
            return self.items[self.head : self.tail]
        else:
            items = self.items[self.head:]+self.items[:self.tail]
            return items
          
              
if __name__ == "__main__":
    queue = CircularQueue(4) 
    print("——————当前队列数据:", queue.travel())
    message = ''
    while message != 'q':
        print('''
          *************************************************************************************************************
          **********************************************请选择相应的序号完成相应的操作************************************
          *************************************************************************************************************   
          **         q、退出操作!!!!!!                                                                          ***
          **         1、入队!                                                                                       ***
          **         2、出队!                                                                                       ***
          *************************************************************************************************************
          ''')
        message = input('——————输入下一步要进行的相应操作序号——————:')
        if message == 'q':
            break
        print("——————操作前队列数据:", queue.travel())
        if message == '1':
            value = input('——————请输入要入队的数据:')
            queue.enqueue(value)
        elif message == '2':
            value = queue.dequeue()
            print("——————出队数据:", value)
        print("——————操作后队列数据:", queue.travel())

最后

以上就是烂漫身影为你收集整理的python基于单链表的链式队列和基于数组的循环队列的全部内容,希望文章能够帮你解决python基于单链表的链式队列和基于数组的循环队列所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部