Python:先进先出打印

arc*_*rus 7 python lifo

我是python的初学者,我遇到了这个程序的问题:

以下程序是后进先出(LIFO).我想制作先进先出(FIFO)程序.

from NodeList import Node

class QueueLL:

    def __init__(self):
        self.head = None


    def enqueueQLL(self,item):
        temp = Node(str(item))
        temp.setNext(self.head) 
        self.head = temp
        length = max(len(node.data) for node in self.allNodes()) if self.head else 0
        print('\u2510{}\u250c'.format(' '*length))
        for node in self.allNodes():
            print('\u2502{:<{}}\u2502'.format(node.data, length))
        print('\u2514{}\u2518'.format('\u2500'*length))
Run Code Online (Sandbox Code Playgroud)

这是NodeList:

class Node:

    def __init__(self,initdata):
        self.data = initdata
        self.next = None

    def getData(self):
        return self.data

    def getNext(self):
        return self.next

    def setData(self,newdata):
        self.data = newdata

    def setNext(self,newnext):
        self.next = newnext
Run Code Online (Sandbox Code Playgroud)

注意:"Rainbow"应位于"Arc"的底部或FIFO中(下图为LIFO)

我想在NodeList中添加一个类似setPrevious的新def,但我不知道如何.(说实话,我对这些self.head = none东西真的很新.我曾经写过self.items = [])

任何帮助和提示将不胜感激!谢谢!

Con*_*ius 25

除了学习目的,我不建议使用自定义数据结构来制作LIFO或FIFO.list毕竟内置的数据类型很好.

您可以使用该append方法添加项目并使用它们删除它们pop.对于LIFO,这将是这样的:

stack = list()
stack.append(1)
stack.append(2)
stack.append(3)

print stack.pop()  #3
print stack.pop()  #2
print stack.pop()  #1
Run Code Online (Sandbox Code Playgroud)

如果提供整数参数,则pop可以指定要删除的元素.对于FIFO,请使用0第一个元素的索引:

stack = list()
stack.append(1)
stack.append(2)
stack.append(3)

print stack.pop(0)  #1
print stack.pop(0)  #2
print stack.pop(0)  #3
Run Code Online (Sandbox Code Playgroud)

  • `list`适用于堆栈,因为`.append()`和`.pop()`都很快.但是,它不是FIFO队列的最佳选择,因为`.pop(0)`很慢(它的复杂性不是'O(1)`).使用`collections.deque`作为FIFO. (4认同)